题
我有一个使用GLSL着色器的一个项目。
本项目旨在不打印任何东西到标准输出,除非事情错了,或者你明确地打开一些额外的调试输出。
当着色器编译失败通过glGetProgramInfoLog
给出的日志长度是> 0,并且有时当它成功其> 0,并给出了编译警告代替。当你有一个完美的编译日志长度是着色<1 ...这是如何工作的我的NVIDIA显卡在我的dev的机器。
有关我的罪恶,我也做一些开发上的一台笔记本电脑配备英特尔集成显卡。代码运行正常,但每当我做的着色器编译日志包含:
“着色器被成功地编译在硬件上运行”
这是很烦人的,因为我现在没有办法决定我是否应该从某种字符串分析,例如打印出来的字符串,除了:
strstr("successfully",log)
希望其明显的,为什么这是不可取的。 如何,如果在所有,可我知道一个消息值得打印出用OpenGL API?
编辑:
如果我使用glGetShaderiv(shaderobj,GL_COMPILE_STATUS,&err);
然后我没有得到警告编译,只有错误。
解决方案
在这里你去:
glGetShaderiv(shaderobj,GL_COMPILE_STATUS,&err);
if(!err) { /* now print out the error log */ }
这是唯一的编译状态你;没有我发现来确定,如果你有任何的警告移植的方式。 (该编译日志可以充满任何实施关心把在它,包括成功的通知。)
不隶属于 StackOverflow