可以在着色器中写入原子计数器和图像......因此它们不是恒定的(均匀的)。
为什么他们这样称为制服?
答案 0 :(得分:4)
uniform
。虽然制服是恒定的,但它们更重要的特征是它们在着色器的所有调用中提供...... 统一变量存储。毕竟,uniform
只是存储限定符,与in
或out
相同。
atomic_uint
image2D
实际上,您永远不会在着色器运行时修改分配给任何不透明数据类型的引用;因此,他们需要in
或uniform
存储资格。而是将引用传递给修改实际引用资源的函数(无论是纹理还是着色器存储缓冲区)。
你应该非常熟悉这个范例,sampler2D
,例如,你可能是你在GLSL中使用的第一个不透明数据类型。这样的制服不存储您正在采样的纹理,它存储纹理/采样器状态的绑定位置。
它们是“被称为制服”,因为着色器调用无法更改atomic_uint
或image2D
存储的引用。您当然可以修改使用适当函数引用的数据(例如 imageStore (...)
或atomicCounterIncrement (...)
),但您无法重新分配引用本身。