Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我的着色器初始化代码有什么问题?_C++_Opengl_Glsl - Fatal编程技术网

C++ 我的着色器初始化代码有什么问题?

C++ 我的着色器初始化代码有什么问题?,c++,opengl,glsl,C++,Opengl,Glsl,我编写了这个小函数来初始化着色器,同时尝试了解GLSL的窍门 当我运行程序时,它会输出以下内容: trying to add shader, shader version is 4.30 and opengl version is 4.4.12874 Compatibility Profile Context 14.100.0.0 created shader trying to compile shader: #version 150 out vec4 colorOut; void main(

我编写了这个小函数来初始化着色器,同时尝试了解GLSL的窍门

当我运行程序时,它会输出以下内容:

trying to add shader, shader version is 4.30 and opengl version is 4.4.12874 Compatibility Profile Context 14.100.0.0
created shader
trying to compile shader:
#version 150 out vec4 colorOut; void main() { colorOut = vec4(1.0, 0.0, 0.0, 1.0); }
length: 84
error in shader compiling






















error in shader linking
Fragment shader(s) were not successfully compiled before glLinkProgram() was called.  Link failed.










Fragment shader(s) were not successfully compiled before glLinkProgram() was called.  Link failed.










error in shader validating
Fragment shader(s) were not successfully compiled before glLinkProgram() was called.  Link failed.










Fragment shader(s) were not successfully compiled before glLinkProgram() was called.  Link failed.
这一切告诉我,它无法编译。但我似乎不知道为什么。我试图在编译中搜索类似的情况,但在日志中什么都没有,但找不到任何相关的内容

我希望这段代码至少能编译着色器。我用它作为指导方针。我使用的代码几乎是从该指南中复制的1对1代码。唯一的区别是他们用两个不同的函数实现了它,我在试图找出代码的错误时添加了一些额外的错误处理


我正在使用freeglut初始化我的窗口,我包含、链接并初始化了glew。

在版本150的末尾需要一个换行符\n。以a开头的所有内容都是预处理器指令,预处理器逐行操作

将其更改为此,它应该可以工作:

createShader("#version 150\n out vec4 colorOut; void main() { colorOut = vec4(1.0, 0.0, 0.0, 1.0); }", GL_FRAGMENT_SHADER);
如果获取着色器信息日志的代码中没有小错误,您可能会看到着色器编译器发出的或多或少有意义的错误消息:

glGetShaderInfoLog(program, errorLogSize, NULL, &errorLog[0]);
glGetShaderInfoLog的第一个参数是着色器,而不是程序。在提供的代码中使用变量命名时,应为:

glGetShaderInfoLog(obj, errorLogSize, NULL, &errorLog[0]);

在版本150的末尾需要换行符\n。以a开头的所有内容都是预处理器指令,预处理器逐行操作

将其更改为此,它应该可以工作:

createShader("#version 150\n out vec4 colorOut; void main() { colorOut = vec4(1.0, 0.0, 0.0, 1.0); }", GL_FRAGMENT_SHADER);
如果获取着色器信息日志的代码中没有小错误,您可能会看到着色器编译器发出的或多或少有意义的错误消息:

glGetShaderInfoLog(program, errorLogSize, NULL, &errorLog[0]);
glGetShaderInfoLog的第一个参数是着色器,而不是程序。在提供的代码中使用变量命名时,应为:

glGetShaderInfoLog(obj, errorLogSize, NULL, &errorLog[0]);

天哪,我现在觉得自己太傻了:P。谢谢你这么做了。我想问题出在细节上,没必要觉得自己愚蠢。我立即意识到这个问题的唯一原因是我自己做的。如果没有获取着色器日志的问题,您可能会更快地理解它。请参见addition to answer.omg我现在觉得自己太愚蠢了:P。谢谢你这么做了。我想问题出在细节上,没必要觉得自己愚蠢。我立即意识到这个问题的唯一原因是我自己做的。如果没有获取着色器日志的问题,您可能会更快地找到它。请参见“添加到答案”。