GLSL和glReadPixels

时间:2011-11-15 08:25:21

标签: opengl-es glsl

我正在使用OpenGL ES 2.0和GLSL来绘制对象。 然后我想读取我的片段着色器在我的屏幕上绘制的像素。 我正在混合两个灰度纹理,在片段着色器的末尾,我有:

gl_FragColor = vec4(something...blending textures);

我知道gl_FragColor意味着最终的颜色将被写入帧缓冲区。 (根据http://nehe.gamedev.net/article/glsl_an_introduction/25007/) 鉴于此,我做了类似

的事情
GLubyte *pixels = new GLubyte[320*240];
glReadPixels(0, 0, 320,240, GL_LUMINANCE, GL_UNSIGNED_BYTE, pixels);

使用它绘制图像后,首先,我得到原始纹理1,然后得到黑色空白颜色。有人可以帮我解决什么问题吗?我需要和FBO做点什么吗?我有点失落...... :(

1 个答案:

答案 0 :(得分:3)

根据glReadPixels的规范ES 2.0文档,格式参数:

  

指定像素数据的格式。以下符号值   被接受:GL_ALPHA,GL_RGB和GL_RGBA。

所以GL_LUMINANCE不是GL ES支持的阅读格式。

除此之外,假设您有某种工作帧缓冲区并且通过将适当放置的几何体渲染到帧缓冲区来应用片段着色器,glReadPixels应该是正确的使用方法。