EAGLContext,EAGLSharegroups,RenderBuffers,FrameBuffers,哦,我的!

时间:2010-06-02 17:43:39

标签: iphone opengl-es eaglcontext

我正试图在iPhone OS上围绕OpenGL对象模型。我目前正在屏幕上渲染一些不同的UIView s(构建在CAEAGLayer s)。我目前每个都使用单独的EAGLContext,每个都有一个颜色渲染缓冲区和一个帧缓冲区。

我在其中渲染类似的东西,我想在这些实例之间共享纹理以节省内存开销。

我目前的理解是我可以使用相同的设置(一些上下文,每个上下文都有一个FBO / RBO),但是如果我使用第一个EAGLShareGroup生成后面的那些,那么我可以简单地使用后面的第一个纹理名称(GLuints)。这准确吗?

如果是这种情况,我想后续问题是:让它成为“共享组”有什么好处?我可以重用相同的上下文,并将多个FBO / RBO附加到该上下文中吗?我认为我正在努力应对共享组的抽象层,它似乎共享“对象”(纹理和其他命名的东西),而不是上下文所拥有的“状态”(矩阵,启用/禁用状态)。

最好的想法是什么?

感谢任何启蒙!

1 个答案:

答案 0 :(得分:4)

这是正确的 - 当使用相同的EAGLContext创建两个EAGLSharegroup时,它们共享缓冲区对象,纹理,渲染缓冲区和帧缓冲区的相同视图。如果您的上下文使用的是OpenGL ES 2.0,它们也会共享着色器和程序对象。

使用相同共享组的多个上下文的最大用例之一是能够在渲染时从另一个线程异步加载资源。这看起来不像你在这里所做的那样,并且似乎没有持久的上下文状态对你来说是一个问题,所以你可能最好坚持使用单个EAGLContext并且只是隐藏引用它可能需要它的所有对象都可以看到它。只需绑定适当的帧缓冲区和颜色渲染缓冲区,您就可以更改要渲染的视图。