为什么原子计数器和图像在实际上不统一时被称为制服?

时间:2014-06-05 05:20:09

标签: opengl glsl

可以在着色器中写入原子计数器和图像......因此它们不是恒定的(均匀的)。

为什么他们这样称为制服?

1 个答案:

答案 0 :(得分:4)

您从错误的角度考虑uniform

虽然制服是恒定的,但它们更重要的特征是它们在着色器的所有调用中提供...... 统一变量存储。毕竟,uniform只是存储限定符,与inout相同。

您提到的两种数据类型都属于特殊类GLSL,指的是 opaque

  1. atomic_uint

    • 引用着色器存储缓冲区中的位置以用作原子计数器

  2. image2D

    • 引用图像数据的绑定位置
  3. 实际上,您永远不会在着色器运行时修改分配给任何不透明数据类型的引用;因此,他们需要inuniform存储资格。而是将引用传递给修改实际引用资源的函数(无论是纹理还是着色器存储缓冲区)。

    你应该非常熟悉这个范例,sampler2D,例如,你可能是你在GLSL中使用的第一个不透明数据类型。这样的制服不存储您正在采样的纹理,它存储纹理/采样器状态的绑定位置。


    回答你的问题:

    它们是“被称为制服”,因为着色器调用无法更改atomic_uintimage2D存储的引用。您当然可以修改使用适当函数引用的数据(例如 imageStore (...)atomicCounterIncrement (...)),但您无法重新分配引用本身。