2011-11-15 32 views
1

我使用OpenGL ES 2.0和GLSL绘制对象。 然后,我想从任何我的片段着色器在屏幕上绘制的像素中读取像素。 我掺混两种灰度纹理和我的片段着色器的最后,我有:GLSL和glReadPixelels

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做些什么吗?我是一个有点失去了... :(

+1

我想glReadPixels后,你更新你的纹理输入到下一帧的着色器之一?发布一些更多的代码来更新纹理,也许错误在那里。 –

+1

请向我们展示您的程序中的代码,这些代码正在发布。 – datenwolf

回答

3

每规范ES 2.0文档glReadPixels,格式参数:

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

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

除此之外,假设你有这么一个工作帧缓冲我排序并且通过将适当放置的几何图形渲染到帧缓冲区来应用片段着色器,glReadPixels应该是正确的使用方法。