GLSL ES中的统一与属性

Ale*_*int 30 glsl fragment-shader opengl-es-1.1

我有一些参数从CPU传递到GPU,这些参数对于所有片段都是常量但在每一帧都有变化(我使用的是GLSL ES 1.1).我应该为这些价值观使用制服或属性吗?属性可以在顶点到顶点之间变化,因此我的直觉是使用在整个帧中保持不变的值的属性将是低效的.然而,我已经读过,制服是针对"相对不频繁"变化的价值,这表明在每一帧上更换制服可能效率低下.

在硬件方面,我最感兴趣的是优化iPhone 4S.

Luc*_*uca 35

我投票支持制服.

其中一个原因已在您的问题中解释过:制服是每个顶点/片段的常量.

更喜欢制服对抗属性的其他原因是:

  • 可用插槽的数量(允许16个属性,但更多制服)
  • GLSL编译器可以优化统一的值处理
  • 在较长的顶点阵列上传输的数据较少,每个顶点的属性较少意味着更好的性能.
  • 片段着色器中提供了制服,但没有在顶点和片段着色器之间定义不同的属性
  • 制服可以是结构和数组,从而导致更易读的代码.