如何测试我的帧缓冲对象是否正确渲染?

时间:2009-10-12 16:48:58

标签: iphone opengl-es

我正在使用带有颜色缓冲附件的帧缓冲对象来进行每像素点击测试。我想把它渲染到屏幕上进行调试和测试,但是现在我所得到的只是一个大的白色虚无。我假设我必须发送一些类似于glSwapBuffers()的渲染命令,但由于我只使用一个缓冲区,我不知道它将交换到什么。是否有使用一个缓冲区的等效命令?

这是我的设置:

    // Store the real framebuffer
    glGetIntegerv(GL_FRAMEBUFFER_BINDING_OES, (GLint*) &regularFbo);
    // Generate an offscreen framebuffer/renderbuffer for rendering the hit detection polys
    // Create framebuffer
    glGenFramebuffersOES(1, &hitDetectionFbo);
    glBindFramebufferOES(GL_FRAMEBUFFER_OES, hitDetectionFbo);
    // Create colorbuffer
    glGenRenderbuffersOES(1, &colorBuffer);
    glBindRenderbufferOES(GL_RENDERBUFFER_OES, colorBuffer);
    // Create storage (RGBA) for color buffer
    glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_RGBA8_OES, SCREEN_WIDTH, SCREEN_HEIGHT);
    // Attach color buffer to framebuffer
    glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, colorBuffer);
    glDisable(GL_DEPTH_TEST);
    glDepthMask(GL_FALSE);

这并没有标记任何glErrors,但我显然遗漏了一些东西,因为切换到我的新FBO后屏幕上没有任何内容出现。如果我继续使用原始帧缓冲区(通过glBindFramebufferOES(GL_FRAMEBUFFER_OES, regularFbo)调用),该程序将呈现正常。

感谢您的帮助, -S

1 个答案:

答案 0 :(得分:1)

在iPhone平台上,唯一可以直接用作后备缓冲区的FBO是具有使用以下方式分配的颜色缓冲区的FBO:

[myEaglContext renderbufferStorage:GL_RENDERBUFFER fromDrawable: eaglLayer];

如果使用 glRenderbufferStorageOES 分配颜色缓冲区,那么它是一个正常的屏幕外FBO,让它显示在屏幕上的最佳方法是将其绑定到纹理并渲染四边形