layout( r32ui) uniform uimage2D overdraw_count;
void main()
{
uint count = imageLoad(overdraw_count,ivec2(gl_FragCoord.xy));
count = count + 1;
imageStore(output_buffer, ivec2(gl_FragCoord.xy),count);
}
原子操作的目的是防止多个片元着色器实例同时访问或读取同一块内存区域,造成访问冲突。
因为同一个像素可能是多个片元写入的。
原子操作不能保证运行的顺序,只能保证所有的请求操作不会相互影响。
原子操作只能用于单一的有符号或者无符号整形,原子操作不支持浮点类型或向量类型的图像。
原子特性可以很有效的实现内存区域的序列化访问。