使用OpenGL,我已将图像上传到纹理中:
glTexImage2D (GL_TEXTURE_2D, 0, GL_RGB, imageWidth, imageHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, imageData);
现在,我想看看我是否可以在OpenGL的帮助下分离我的频道? 例如,为了能够将我的红/绿/蓝通道各自存储在一个单独的缓冲区中? 这对OpenGL来说容易吗?
答案 0 :(得分:1)
RGB
纹理可以看作3个独立的缓冲区,但是用stride保存在内存中。但是,如果您需要使用三个单独的连续缓冲区,则可以使用GL_RED
格式,您可以使用三次,每次使用一个通道。
要从这种数据中提取,您必须将数据放回一个缓冲区,或者使用一次从3个纹理中采样的着色器:
vec2 tc;
sampler2d red, green, blue;
my_out_color = vec4(texture(red, tc).r, texture(green, tc).r, texture(blue, tc).r, 1.0);