使用Opengl ES 2.0的单个FBO进行iPhone后期处理?

时间:2011-01-17 10:18:53

标签: iphone opengl-es opengl-es-2.0 post-processing

我正在尝试使用OpenGL ES 2.0在iPhone上实现后期处理(模糊,绽放等)。我遇到了一些问题。在我的第二个渲染步骤中渲染时,我最终在屏幕上绘制了一个完全黑色的四边形而不是场景(看起来纹理数据丢失了)所以我想知道原因是否使用了单个FBO。以下列方式使用单个FBO是不正确的吗?

对于第一遍(常规场景渲染),

  • 我将纹理附加为COLOR_ATTACHMENT_0并渲染到纹理。 glFramebufferTexture2D(GL_FRAMEBUFFER,GL_COLOR_ATTACHMENT0,GL_TEXTURE_2D,texturebuffer,0)

对于第二遍(后处理),

  • 我将颜色渲染缓冲区附加到COLOR_ATTACHMENT_0 glFramebufferRenderbuffer(GL_FRAMEBUFFER,GL_COLOR_ATTACHMENT0,GL_RENDERBUFFER,colorRenderbuffer)
  • 然后使用第一遍中的纹理在屏幕上呈现为四边形。

2 个答案:

答案 0 :(得分:1)

不,FBO的用法很好。原因很可能是你没有设置纹理的MIN / MAG过滤器(texturebuffer),绑定后,使用glTexParameter将GL_MIN_FILTER和GL_MAG_FILTER设置为GL_NEAREST或GL_LINEAR,你的纹理应该正常工作。

答案 1 :(得分:1)

正如Matias所说,你的设计看起来很好。我自己做了类似的事情并且运作良好。

我编写了一个示例应用程序,它使用着色器处理相机图像,可以下载here,但是使用glReadPixels()将屏幕上的值拉入处理例程,而不是直接将结果映射到纹理在屏幕上。您可以修改它来执行此操作。

否则,我制作了一个更复杂的着色器示例应用程序here,它在一个部分中将场景渲染为立方体贴图纹理,然后将该纹理输入到第二个处理阶段。这应该说明使用OpenGL ES 2.0着色器渲染和使用纹理。

也许这些可以揭示你的实施失败的地方。