繁体   English   中英

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

[英]Getting default frame buffer id from GLKView/GLKit

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

在桌面OpenGL中为了绑定默认FBO(前缓冲区),我可以调用glBindFrameBuffer(GL_FRAMEBUFFER,0),但在IOS应用程序中不是这种情况,因为您必须自己创建默认FBO并且它将具有唯一ID;

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

有没有办法获得GLKit / GLKView创建的默认FBO ID,以便我可以存储并使用它来绑定我的代码中的任何位置的默认帧缓冲区?

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

抱歉我的英文不好,并提前感谢您的回复。

也许您可以在bindDrawable调用之后获取“当前”帧缓冲区ID,方法是:

GLint defaultFBO;
glGetIntegerv(GL_FRAMEBUFFER_BINDING_OES, &defaultFBO);

给出的答案肯定是正确的解决方案,但是它没有解决您对嵌入式系统的标准openGL和openGL之间的概念差异的理解中的错误。 // - - - - - - - - - - - - - - - - - - - - - - - - 一世我觉得有必要在这里指出,对glBindFramebuffer(GL_FRAMEBUFFER,0)的调用不会将渲染返回到主帧缓冲区,尽管对于运行Windows,Unix(Mac)或Linux的机器来说似乎是这样。 台式机和笔记本电脑没有主要默认系统帧缓冲的概念。 这个想法始于手持设备。 当您使用零作为参数进行openGL绑定调用时,您正在做的是将此函数设置为NULL。 这是你禁用这个功能的方法。 与glBindTexture(GL_TEXTURE_2D,0)相同; 在某些手持设备上,当您将帧缓冲区设置为NULL而不激活另一个帧缓冲区时,驱动程序可能会自动激活主系统帧缓冲区。 这将是制造商做出的选择,而不是您应该依赖的东西,这不是openGL ES规范的一部分。 对于台式机和笔记本电脑,这是绝对必要的,因为需要禁用帧缓冲区才能恢复正常的openGL渲染。 但要记住! 这不是返回任何主帧缓冲区,而是关闭激活的帧缓冲区。

到默认的帧缓冲结合在GLKit的正确方法是调用bindDrawable方法上GLKview

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM