3

我正试图围绕 iPhone OS 上的 OpenGL 对象模型展开思考。我目前正在屏幕上渲染成几个不同UIView的 s (build on s)。CAEAGLayer我目前将这些中的每一个都使用为单独EAGLContext的,每个都有一个颜色渲染缓冲区和一个帧缓冲区。

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

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

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

思考这个问题的最佳方式是什么?

感谢您的任何启发!

4

1 回答 1

4

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

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

于 2010-06-03T04:45:34.370 回答