C++ OpenGL着色器不会绘制

C++ OpenGL着色器不会绘制,c++,opengl,shader,glfw,glew,C++,Opengl,Shader,Glfw,Glew,因此,最近我开始观看一个关于我的诅咒的视频,但当我说到着色器时,我遇到了一个问题,这是因为制作着色器或定义着色器时遇到了问题: #include iostream #define GLEW_STATIC #include GL/glew.h #include GLFW/glfw3.h const GLint WIDTH = 800, HEIGHT = 600; //here start the shaders def/creation const GLchar *vertexShader

因此,最近我开始观看一个关于我的诅咒的视频,但当我说到着色器时,我遇到了一个问题,这是因为制作着色器或定义着色器时遇到了问题:

#include iostream

#define GLEW_STATIC
#include GL/glew.h

#include GLFW/glfw3.h

const GLint WIDTH = 800, HEIGHT = 600;

//here start the shaders def/creation
const GLchar *vertexShaderSource = 
"#version 330 core\n"
"layout ( location = 0 ) in vec3 position;\n"
"void main( )\n"
"{\n"
"gl_Position = vec4( position.x, position.y, position.z, 1.0 )\n"
"}";

const GLchar *fragmentShaderSource = 
"#version 330 core\n"
"out vec4 color;\n"
"void main( )\n"
"}\n"
"color = vec4( 1.0f, 0.5f, 0.2f, 1.0f );\n"
"}";
//here it ends

//more code down here
//....
//....
之后,我在控制台中得到的(另一个代码得到cmd上的错误行)是:

错误::着色器::顶点::编译失败 0(6):错误C0000:语法错误,意外的“}”,应为“,”或“;”在标记“}”处

错误::着色器::片段::编译失败 0(4):错误C0000:语法错误,意外的“}”,应为“,”或“;”在标记“}”处

错误::着色器::程序::链接失败

顶点信息 0(6):错误C0000:语法错误,意外的“}”,应为“,”或“;”在标记“}”
(0):错误C2003:链接的选项不兼容

片段信息 0(4):错误C0000:语法错误,意外的“}”,应为“,”或“;”在标记“}”
(0):错误C2003:链接的选项不兼容

我知道支持着色器没有问题,因为我实际上可以运行3.0着色器,在我定义着色器的代码中可以有什么

编辑: 好吧,对不起,如果我用这个问题打扰了别人,原因是 第16行 错误在于:
“gl\u Position=vec4(Position.x,Position.y,Position.z,1.0)\n”

右翼呢
“gl_Position=vec4(Position.x,Position.y,Position.z,1.0);\n”

是的,这个符号;XD

在第一线 23 错误的是
“}\n”
和右边的
“{\n”
这只是我的一个朋友
很抱歉打扰

您的顶点着色器缺少分号,并且您的片段着色器在打开
main
函数时使用了错误的大括号

const GLchar *vertexShaderSource = 
"#version 330 core\n"
"layout ( location = 0 ) in vec3 position;\n"
"void main( )\n"
"{\n"
//=============================================Mistake is here↓
"gl_Position = vec4( position.x, position.y, position.z, 1.0 )\n"
//===============================================================
"}";

const GLchar *fragmentShaderSource = 
"#version 330 core\n"
"out vec4 color;\n"
"void main( )\n"
//↓Mistake======================================
"}\n"
//==============================================
"color = vec4( 1.0f, 0.5f, 0.2f, 1.0f );\n"
"}";
修复这两个错误,代码就会正常工作


也可以,你需要的唯一的显式新行是在版本> /COD>指令之后的第一个新行。它们在编译阶段会被删除,就像C或C++一样。如果你把着色器代码转储到控制台,它们会使调试变得更容易,但是它们不会影响你的代码的行为或性能。on(

)在
gl_Position=vec4(Position.x,Position.y,Position.z,1.0)
…-\u-如果这样做了一半,它可能是另一个分号或其他东西,你必须在
void main()
之后的着色器片段中使用一个开放的曲线括号
{/code>,而不是一个封闭的
@rabbi76在我看到所有评论之前,我就开始写答案了。不管怎样,你都不应该因为这个原因回答评论中的问题。我建议使用。这个问题是离题的,因为它是一个简单的印刷错误。谢谢你花时间回答,我终于在你说之前完成了还是谢谢你