opengl - 在 Intel 上编译 Verbose GLSL Shader

标签 opengl shader glsl

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

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

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

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

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

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

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 */ }

这是您获得的唯一编译状态;我找不到任何可移植的方法来确定您是否收到警告。 (编译日志可以包含实现想要放入其中的任何内容,包括成功通知。)

关于opengl - 在 Intel 上编译 Verbose GLSL Shader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/649318/

相关文章:

opengl-es - 如何在mapbox GL JS自定义样式层中使用u_time

c++ - 没有或有静态设备上下文的 OpenGL 加载纹理?

c++ - OpenGL 通过重新规范更新 VBO 数据

c++ - 无法将着色器链接到 OpenGL 中的程序对象,无法调试

javascript - 如何在 Three.js 中将 alpha 贴图纹理与 ShaderMaterial 一起使用?

c++ - OpenGL 奇怪的顶点着色器问题

c++ - 基于 GLEW 的程序无法编译

opengl - glMapBuffer()和glBuffers,使用(void *)访问如何与硬件一起工作?

glsl - 如何在 GLSL 着色器中实现颜色矩阵过滤器

java - OpenGL GLSL统一集返回错误