我正在使用带有颜色缓冲附件的帧缓冲对象来进行每像素点击测试。我想把它渲染到屏幕上进行调试和测试,但是现在我所得到的只是一个大的白色虚无。我假设我必须发送一些类似于glSwapBuffers()的渲染命令,但由于我只使用一个缓冲区,我不知道它将交换到什么。是否有使用一个缓冲区的等效命令?
这是我的设置:
// Store the real framebuffer
glGetIntegerv(GL_FRAMEBUFFER_BINDING_OES, (GLint*) ®ularFbo);
// 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
答案 0 :(得分:1)
在iPhone平台上,唯一可以直接用作后备缓冲区的FBO是具有使用以下方式分配的颜色缓冲区的FBO:
[myEaglContext renderbufferStorage:GL_RENDERBUFFER fromDrawable: eaglLayer];
如果使用 glRenderbufferStorageOES 分配颜色缓冲区,那么它是一个正常的屏幕外FBO,让它显示在屏幕上的最佳方法是将其绑定到纹理并渲染四边形