我有一个使用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 */ }

这是唯一的编译状态你;没有我发现来确定,如果你有任何的警告移植的方式。 (该编译日志可以充满任何实施关心把在它,包括成功的通知。)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top