我正在尝试将头绪围绕iPhone OS上的OpenGL对象模型。我目前正在屏幕上渲染成几个不同的UIView
(在CAEAGLayer
上构建)。目前,我使用单独的EAGLContext
分别使用彩色渲染缓冲区和帧缓冲区。
我正在其中渲染相似的东西,并且我想在这些实例之间共享纹理以节省内存开销。
我目前的理解是,我可以使用相同的设置(一定数量的上下文,每个上下文都具有FBO / RBO),但是如果我使用第一个的EAGLShareGroup
生成后面的上下文,则可以简单地使用纹理名称( GLuints)。这个准确吗?
如果是这样,我想接下来的问题是:成为“共享组”有什么好处?我可以重用相同的上下文,然后将多个FBO / RBO附加到该上下文吗?我认为我正在与共享组的抽象层作斗争,该共享组似乎共享上下文所拥有的“对象”(纹理和其他命名事物),而不共享“状态”(矩阵,启用/禁用状态)。
想到这一点的最佳方法是什么?
多谢赐教!
最佳答案
没错,当使用相同的EAGLContext
创建两个EAGLSharegroup
时,它们共享缓冲区对象,纹理,渲染缓冲区和帧缓冲区的相同视图。如果您的上下文使用的是OpenGL ES 2.0,它们还将共享着色器和程序对象。
使用同一共享组的多个上下文的最大用例之一是在渲染时能够从另一个线程异步加载资源。这似乎与您在此处执行的操作不一样,并且似乎不存在持久性上下文状态对您来说是个问题,因此您最好坚持使用单个EAGLContext
并保存对其的引用所有可能需要它的对象都可以看到的地方。您只需绑定适当的帧缓冲区和颜色渲染缓冲区,即可将要渲染的视图更改为要渲染的视图。
关于iphone - EAGLContext,EAGLSharegroups,RenderBuffers,FrameBuffers,我的天哪!,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2960109/