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
image2D
或imageBuffer
?如果是这样,有哪些开销影响(例如转换/传输/缓存问题)?