iphone - EAGLContext、EAGLSharegroups、RenderBuffers、FrameBuffers,天哪!

标签 iphone opengl-es eaglcontext

我正在尝试了解 iPhone 操作系统上的 OpenGL 对象模型。我当前正在屏幕上渲染到几个不同的 UIView(基于 CAEAGLayer 构建)。我目前将其中每一个都使用单独的 EAGLContext ,每个都有一个颜色渲染缓冲区和一个帧缓冲区。

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

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

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

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

感谢您的启发!

最佳答案

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

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

关于iphone - EAGLContext、EAGLSharegroups、RenderBuffers、FrameBuffers,天哪!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2960109/

相关文章:

iphone - Core Data 中的 DENY 删除规则何时真正拒绝删除对象?

iphone - Bing Api 不适合我

objective-c - 顶点数组对象 (VAO) 能否在 OpenGL ES 中的 EAGLContext 之间共享?

iphone - UITextField 文本更改回调

iphone - NSDictionary 上是否有一个开源类别可以快速将其从 NSData 转换为/转换为 NSData?

Android Lollipop 软键盘不接受 GL 表面的按键

ios - EAGLContext PresentRenderbuffer 在第二个线程上?

OpenGL状态冗余消除树,渲染状态优先级

iphone - 如何将纹理映射到曲面上?