在英特尔上编译详细的GLSL Shader

时间:2009-03-16 05:03:38

标签: opengl shader glsl

我有一个使用GLSL着色器的项目。

这个项目的目的是不向stdout打印任何内容,除非出现问题或明确打开一些额外的调试输出。

当着色器编译失败时,glGetProgramInfoLog给出的日志长度为> 0,有时当它> 0时,会给出编译警告。当你有一个完美编译的着色器时,日志长度<1 ...这就是它在我的开发机器上的NVidia卡上的工作方式。

对于我的罪过,我也在带有intel集成显卡的笔记本电脑上做了一些开发。代码运行正常,但每当我进行着色器编译时,日志包含:

“已成功编译着色器以在硬件上运行”

这非常烦人,因为我现在无法决定是否应该打印出字符串,除了某种字符串分析,例如:

strstr("successfully",log)

希望很明显为什么这是不可取的。 如果有的话,我可以判断一条消息是否值得使用OpenGL api打印出来?

编辑:

如果我使用glGetShaderiv(shaderobj,GL_COMPILE_STATUS,&err);,那么我不会收到编译警告,只会收到错误。

1 个答案:

答案 0 :(得分:6)

你走了:

glGetShaderiv(shaderobj,GL_COMPILE_STATUS,&err);
if(!err) { /* now print out the error log */ }

这是您获得的唯一编译状态;没有任何可移植的方式我发现你确定是否有警告。 (编译日志可以包含任何实现关注的内容,包括成功通知。)