0

阅读本书:OpenGL ES 2.0 Programming Guide (Addison-Wesley)。我已阅读以下内容:

“在附加到程序对象的顶点着色器中不存在或未激活的属性名称将被忽略。”

当一个属性不活跃时?

谢谢。

4

2 回答 2

3

来自 OpenGL 规范:

如果编译器和链接器确定在执行着色器时可以访问该属性,则认为通用属性变量是活动的。在顶点着色器中声明但从未使用过的属性变量将不计入限制。在编译器和链接器无法做出决定性决定的情况下,属性将被视为活动的。如果活动顶点属性的数量超过 MAX_VERTEX_ATTRIBS,程序对象将无法链接。

于 2010-12-01T20:41:51.600 回答
0

有时,拥有一个顶点着色器很有用,它为各种片段着色器提供一堆属性,而不必担心每个特定的片段着色器是否使用它。在这些情况下,编译器和链接器可以删除顶点着色器输出中实际未使用的属性,这些属性将映射到 -1 的无操作句柄。

然而,这并不能保证行为 - 它只是 GLSL 编译器可以自由进行的优化,因此最终优化着色器是个好主意,这样顶点着色器只提供片段着色器需要的数据,因为您可能会在某些平台上获得性能改进。

于 2012-06-20T18:02:50.780 回答