有什么方法可以防止着色器编译器删除它检测到未使用的统一/属性?我偶尔会注释掉着色器的部分内容以进行测试,但这会导致程序的其余部分出现问题,因为某些名称突然不再存在(从而导致查找错误以及尝试设置值时出现错误)。
不,但这并不是绝对必要的,具体取决于您编写代码的方式。
这些glUniform*函数很乐意采用统一位置 -1。如果您使用program_pack420和explicit_attrib_location,您可以将属性索引、片段着色器输出、UBO绑定和纹理单元绑定全部放入着色器中。因此,您不必查询活动属性、输出、统一块或采样器。
请注意,我们在 GL 4.3 中也有ARB_explicit_uniform_location。所以你可以在着色器中指定它们,并且它们不会被优化掉。
程序的其余部分需要该属性才能工作,否则它将充斥着一堆 if 语句——我试图避免这种情况。
您遇到这种情况的唯一原因是您自己没有提供 OpenGL 属性索引,无论是使用explicit_attrib_location 还是使用调用glBindAttribLocation预链接。这是糟糕的编码,你不应该这样做。
始终告诉 OpenGL 你的属性位置是什么。除非您正在编写着色器自省工具,否则您永远不应该查询它们。
| 归档时间: |
|
| 查看次数: |
2105 次 |
| 最近记录: |