使用图像的加载和存储,我想这样做在GLSL 4.2以下:GLSL 4.2图像的加载和存储与内存屏障
vec3 someColor = ...;
vec4 currentPixel = imageLoad(myImage, uv);
float a = currentPixel.a/(currentPixel.a+1.0f);
vec4 newPixel = vec4(currentPixel.rgb*a+someColor*(1.0f-a),currentPixel.a+1.0f);
imageStore(myImage, uv, newPixel);
关于“UV”的值可以作为多个光栅化的像素是相同的。为了得到正确的结果,我当然不希望其他的sharerexecution在imageLoad()和imageStore()的调用之间写入我的像素中。
这是可能用memoryBarrier做某事吗?如果是这样,这个代码如何使用?
好吗 - 已thoght左右。非常感谢您的澄清。是的,我尝试做混合。我可以使用ImageAtomicAdd(..,vec4(someColor,1.0f)),并在读取除以它们的.a值的像素 - 但问题是,像素最初已经有一个颜色以及一个重量,这个重量是介于0和1之间 – user1282931 2012-04-12 09:38:34
@ user1282931:如果您尝试进行混合,为什么您有多个片段写入相同的值? – 2012-04-12 17:43:28
它是反射映射上的一种反投影。呈现的反射以及每个像素的对象正常,并且由此反射图应该是近似的 - 因此多个片段可以映射到相同的反射纹素,并且为了避免我想要使用混合的噪声 – user1282931 2012-04-12 18:44:49