GLSL ES 中的统一与属性



我有一些参数从CPU传递到GPU,这些参数对于所有片段都是恒定的,但在每一帧上都会发生变化(我使用的是GLSL ES 1.1)。我应该为这些值使用制服还是属性?属性可能因顶点而异,因此我的直觉是,对整个帧中恒定的值使用属性是低效的。但是,我读到制服是针对"相对不频繁"更改的值,这表明在每一帧上更换制服可能效率低下。

在硬件方面,我最感兴趣的是针对iPhone 4S进行优化。

我投票给制服。

原因之一已经在您的问题中解释过:制服是每个顶点/片段的常数。

更喜欢制服而不是属性的其他原因是:

  • 可用插槽的数量(允许 16 个属性,但更多的制服)
  • GLSL 编译器可以优化统一值处理
  • 长顶点
  • 阵列上的数据流更少,每个顶点的属性更少意味着更好的性能。
  • 制服在片段着色器
  • 中可用,无需在顶点着色器和片段着色器之间定义不同的属性
  • 制服可以是结构和数组,从而产生更具可读性的代码。

相关内容

  • 没有找到相关文章

最新更新