我有一些参数从CPU传递到GPU,这些参数对于所有片段都是恒定的,但在每一帧上都会发生变化(我使用的是GLSL ES 1.1)。我应该为这些值使用制服还是属性?属性可能因顶点而异,因此我的直觉是,对整个帧中恒定的值使用属性是低效的。但是,我读到制服是针对"相对不频繁"更改的值,这表明在每一帧上更换制服可能效率低下。
在硬件方面,我最感兴趣的是针对iPhone 4S进行优化。
我投票给制服。
原因之一已经在您的问题中解释过:制服是每个顶点/片段的常数。
更喜欢制服而不是属性的其他原因是:
- 可用插槽的数量(允许 16 个属性,但更多的制服)
- GLSL 编译器可以优化统一值处理 长顶点
- 阵列上的数据流更少,每个顶点的属性更少意味着更好的性能。 制服在片段着色器
- 中可用,无需在顶点着色器和片段着色器之间定义不同的属性
- 制服可以是结构和数组,从而产生更具可读性的代码。