OpenGL分离RGB通道

时间:2013-03-04 19:35:09

标签: c++ opengl-es textures

使用OpenGL,我已将图像上传到纹理中:

glTexImage2D (GL_TEXTURE_2D, 0, GL_RGB, imageWidth, imageHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, imageData);

现在,我想看看我是否可以在OpenGL的帮助下分离我的频道? 例如,为了能够将我的红/绿/蓝通道各自存储在一个单独的缓冲区中? 这对OpenGL来说容易吗?

1 个答案:

答案 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);