我以前已经遇到了我想通过执行以下操作在图像单元中混合颜色值的问题:
vec4 texelCol = imageLoad(myImage, myTexel);
imageStore(myImage, myTexel, texelCol+newCol);
在多个片段可以为“myTexel”具有相同值的情况下,这显然是不可能的,因为无法在 imageLoad 和 imageStore 命令之间创建原子性,并且其他着色调用可能会更改其间的纹素颜色。
现在有人告诉我,人们正在通过使用 uint 纹理上的原子命令创建信号量来解决这个问题,这样着色器会在一段时间循环中以某种方式等待,然后再访问 texel,并且一旦它空闲,就以原子方式将其写入整数纹理来阻止其他片段着色器调用,处理颜色纹素,并在完成后再次原子地释放整数纹素。
但是我无法思考这如何真正起作用以及这样的代码会是什么样子?
真的有可能做到这一点吗?可以将 GLSL 片段着色器设置为在 while 循环中等待吗?如果可能的话,有人可以举个例子吗?