根据this博客页面,以下着色器使用原子计数器的值写入帧缓冲区像素:
#version 420 compatibility
layout(binding = 0, offset = 0) uniform atomic_uint ac;
void main(void)
{
uint counter = atomicCounterIncrement(ac);
float r = (counter/255) / 255.f;
gl_FragColor = vec4(r, 0, 0, 1);
}
他们正在做 / 255 / 255 因为图像是 256 x 256 像素。在某些 GPU 上,结果是这样的:
在其他 GPU 上,结果是这样的:
较暗的像素显然是计数器的较低值。为什么每次像素着色器调用原子计数器都不会增加?
counter/255
将一个整数除以另一个整数。就像在 C 或 C++ 中一样,这会产生一个“整数”,而不是一个浮点值。因此,255 次片段着色器调用将得到相同的结果。
这可能就是代码的意图。
至于一张图片与另一张图片中的排列是否更加有序,这完全取决于实现。