gl_FragColor and glReadPixels

Posted by chun0216 on Stack Overflow See other posts from Stack Overflow or by chun0216
Published on 2011-12-01T09:47:27Z Indexed on 2011/12/01 9:50 UTC
Read the original article Hit count: 246

Filed under:
|

I am still trying to read pixels from fragment shader and I have some questions. I know that gl_FragColor returns with vec4 meaning RGBA, 4 channels. After that, I am using glReadPixels to read FBO and write it in data

GLubyte *pixels = new GLubyte[640*480*4];
glReadPixels(0, 0, 640,480, GL_RGBA, GL_UNSIGNED_BYTE, pixels);

This works fine but it really has speed issue. Instead of this, I want to just read RGB so ignore alpha channels. I tried:

GLubyte *pixels = new GLubyte[640*480*3];
glReadPixels(0, 0, 640,480, GL_RGB, GL_UNSIGNED_BYTE, pixels);

instead and this didn't work though. I guess it's because gl_FragColor returns 4 channels and maybe I should do something before this? Actually, since my returned image (gl_FragColor) is grayscale, I did something like

float gray = 0.5 //or some other values
gl_FragColor = vec4(gray,gray,gray,1.0);

So is there any efficient way to use glReadPixels instead of using the first 4 channels method? Any suggestion? By the way, this is on opengl es 2.0 code.

© Stack Overflow or respective owner

Related posts about glsl

Related posts about opengl-es-2.0