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);
}
原子操作的目的是防止多个片元着色器实例同时访问或读取同一块内存区域,造成访问冲突。
因为同一个像素可能是多个片元写入的。
原子操作不能保证运行的顺序,只能保证所有的请求操作不会相互影响。
原子操作只能用于单一的有符号或者无符号整形,原子操作不支持浮点类型或向量类型的图像。
原子特性可以很有效的实现内存区域的序列化访问。

本文介绍了一种使用原子操作来避免多个片元着色器实例同时访问同一内存区域导致的冲突问题的方法。原子操作可以确保对特定内存位置的操作不会被其他操作打断,即使在同一像素上进行多次写入也不会产生错误结果。
6494

被折叠的 条评论
为什么被折叠?



