当指定一个不随每个顶点变化到我的顶点着色器的值时,我可以选择将其指定为均匀或恒定顶点属性(使用glVertexAttrib1f和朋友)。
我应该选择哪一个而不是另一个?简单地说,在任何给定的实现上都有有限数量的可用顶点属性和制服,因此我需要明智地选择,还是还有性能影响?
我做了一些环顾四周并找到了一些讨论,但没有任何具体解决我的问题: - http://www.khronos.org/message_boards/showthread.php/7134-Difference-between-uniform-and-constant-vertex-attribute https://gamedev.stackexchange.com/questions/44024/what-is-the-difference-between-constant-vertex-attributes-and-uniforms
我绝不是OpenGL大师,所以如果我只是遗漏了一些基本的话,我很抱歉。
答案 0 :(得分:4)
如果传递顶点属性指针,顶点属性可以设置为每顶点变化;只需更改将数据提供给特定通用属性位置的方式,就可以在常量值和每个顶点变化之间切换。
制服永远不会在每个顶点变化,到目前为止它们更加恒定。一般来说,GLSL ES保证您使用的顶点属性槽(8个,每个最多4个组件)要少于统一组件(128个向量,每个4个组件) - 大多数实现超出了这些要求,但趋势是相同的(更多制服)比属性)。
此外,制服是按程序状态。这些是可以从GLSL程序的任何阶段访问的常量。在OpenGL ES 2.0中,这意味着Vertex / Fragment着色器,但在桌面GL中,这意味着Vertex,Fragment,Geometry,Tessellation Control,Tessellation Evaluation。