从GLKView / GLKit获取默认帧缓冲区ID

我在我的IOS OpenGL ES 2.0项目中使用GLkit / GLKView来pipe理我的应用程序的默认FBO /生命周期。

在桌面OpenGL中,为了绑定默认的FBO(前台缓冲区),我只能调用glBindFrameBuffer(GL_FRAMEBUFFER,0),但是在iOS应用中并不是这样,因为你必须自己创build默认的FBO,并且它将有唯一的ID;

问题是GLKit / GLKView编码风格迫使我使用GLKView的“bindDrawable”函数来激活默认的FBO,这使得我的跨平台渲染系统的devise有点难看(必须将GLKView指针存储为void *在我的c ++引擎类和桥每次我想要执行默认的FBO绑定时将其转换)

有没有办法获得GLKit / GLKView创build的默认FBO ID,以便我可以存储和使用它绑定默认的帧缓冲区在我的代码中的任何地方?

在最坏的情况下,我可以恢复自己创build默认的FBO,并分离GLKit / GLKView,但它是一个很好的框架,我想继续使用它。

对不起,我的英文不好,并提前感谢任何答复。

也许你可以在你的bindDrawable调用之后获得“当前”framebuffer ID,通过调用如下所示:

GLint defaultFBO; glGetIntegerv(GL_FRAMEBUFFER_BINDING_OES, &defaultFBO); 

给出的答案绝对是正确的解决scheme,但是它并没有解决在理解embedded式系统的标准openGL和openGL之间概念上的差异。 // – – – – – – – – – – – – – – – – – – – – – – – – 一世感觉这里有必要指出glBindFramebuffer(GL_FRAMEBUFFER,0)的调用不会返回到主帧缓冲区,尽pipe对于运行Windows,Unix(Mac)或Linux的机器似乎是这样的。 台式机和笔记本电脑没有一个主要的默认系统帧缓冲的概念。 这个想法从手持设备开始。 当你用0作为参数进行openGL绑定调用时,你正在做的是将这个函数设置为NULL。 这是如何禁用此function。 这跟glBindTexture(GL_TEXTURE_2D,0)是一样的。 在某些手持设备上,当您将帧缓冲区设置为NULL而不激活另一个时,驱动程序会自动激活主系统帧缓冲区。 这将是制造商所做的select,不是你应该指望的,这不是openGL ES规范的一部分。 对于台式机和笔记本电脑,这是绝对必要的,因为禁用帧缓冲区需要返回到正常的OpenGL渲染。 但要记住! 这不是返回到任何主要帧缓冲区,您正在closures激活的帧缓冲区。

在GLKit中绑定默认framebuffer的正确方法是在GLKview上调用bindDrawable方法。

[self bindDrawable][myglkview bindDrawable]取决于上下文。