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