【问题标题】:Uniform versus attributes in GLSL ESGLSL ES 中的统一与属性
【发布时间】:2012-06-24 20:55:45
【问题描述】:

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

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

【问题讨论】:

  • 你能列出一些你的读物吗?
  • Rost 和 Licea-Kane 的“OpenGL 着色语言”和 Munchi、Ginsburg 和 Shreiner 的“OpenGL ES 2.0”。 (显然前者不是 ES 特有的)

标签: glsl fragment-shader opengl-es-1.1


【解决方案1】:

我为制服投票。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多