GLSL and glReadPixels



我使用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);

使用它绘制图像后,首先,我得到与原始texture1相同的颜色,然后得到黑色的空颜色。有人能告诉我怎么了吗?我需要对FBO做些什么吗?我有点迷路了……(

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

指定像素数据的格式。以下符号值GL_ALPHA, GL_RGB, GL_RGBA。

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

除此之外,假设你有某种类型的工作帧缓冲区,你通过渲染一个适当放置的几何块到帧缓冲区来应用你的片段着色器,glReadPixels应该是正确的使用。

最新更新