3

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

该项目旨在不向标准输出打印任何内容,除非出现问题或您明确打开一些额外的调试输出。

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

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

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

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

strstr("successfully",log)

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

编辑:

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

4

1 回答 1

7

干得好:

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

这是您获得的唯一编译状态;我没有找到任何便携式方法来确定您是否收到警告。(编译日志可以充满实现需要放入其中的任何内容,包括成功通知。)

于 2009-03-16T06:14:19.300 回答