我正在尝试理解iPhone OS上的OpenGL对象模型。我目前正在屏幕上渲染成几个不同的UIViews (在CAEAGLayers上构建)。我目前使用的是单独的EAGLContext,每个都有一个颜色渲染缓冲区和一个帧缓冲区。
我在它们中渲染类似的东西,我想在这些实例之间共享纹理,以节省内存开销。
我目前的理解是,我可以使用相同的设置(一些上下文,每个上下文都有一个FBO/RBO),但是如果我使用第一个的EAGLShareGroup生成后面的上下文,那么我可以简单地使用后面几个中第一个的纹理名称(GLuints)。这是准确的吗?
如果是这样的话,我想接下来的问题是:让它成为“共享组”有什么好处?我是否可以重用相同的上下文,并将多个FBO/RBO附加到该上下文?我想我正在努力处理一个共享组的抽象层,它似乎共享“对象”(纹理和其他命名的东西),但不共享上下文所拥有的“状态”(矩阵,启用/禁用状态)。
思考这个问题的最好方法是什么?
感谢您的开导!
发布于 2010-06-03 12:45:34
这是正确的-当使用相同的EAGLSharegroup创建两个EAGLContext时,它们共享缓冲区对象、纹理、渲染器和帧缓冲区的相同视图。如果上下文使用的是OpenGL ES 2.0,则它们还将共享着色器和程序对象。
使用相同的共享组的多个上下文的最大用例之一是在渲染时从另一个线程异步加载资源的能力。这似乎不是您在这里要做的事情,而且持久上下文状态对您来说也不是问题,所以您最好坚持使用单个EAGLContext,并将对它的引用保存在所有可能需要它的对象都能看到的地方。只需绑定适当的帧缓冲区和颜色渲染缓冲区,就可以更改渲染到的视图。
https://stackoverflow.com/questions/2960109
复制相似问题