3

image_load_store 扩展提供加载/存储功能,*vec4只能访问。例如,如果我有layout(rgba32f) uniform image2D myimage;,似乎我必须一次写入整个像素:

imageStore(myimage, coord, vec4(1,1,1,1));

如果我只想将红色通道设置为1,我需要这样做:

vec4 pixel = imageLoad(myimage, coord);
pixel.r = 1;
imageStore(myimage, coord, pixel);

这在额外的读取中引入了相当多的开销。

有没有我可以用来只写入特定频道的机制?

类似的东西glColorMask,或者可能将数据绑定到不同的格式,例如更大的GL_R32F image2DimageBuffer?如果是这样,有哪些开销影响(例如转换/传输/缓存问题)?

4

0 回答 0