在我的 OpenGL iOS 应用程序中,我试图实现生产者-消费者模型,其中生产者需要加载纹理,而消费者需要显示它们。通过阅读文档,我了解到这将需要使用 EAGL 共享组,并且共享的 OpenGL 对象应该是双缓冲的。但是,我不太确定应该对哪些 OpenGL 对象进行双缓冲。应该纹理还是帧缓冲区?每次需要显示新帧时,我的制作人都会加载三个纹理,因此我认为切换帧缓冲区可能更有效。
所以,在高层次上,这就是我认为应该发生的事情:
- 在 openGL 初始化期间的某处创建一个渲染缓冲区和两个帧缓冲区 (frameBuffers[2])。
- 在生产者线程中,当消费者线程使用 frameBuffers[0] 时,将传入的帧作为 OpenGL 纹理加载到 frameBuffers[1] 上,并将帧缓冲区 ID 推送到某种共享队列中。
- 在消费者线程中,从共享队列中弹出下一个帧缓冲区ID,并使用它来绑定帧缓冲区(glBindFramebuffer(GL_FRAMEBUFFER,i))。最后交换渲染缓冲区以显示。
是否有意义?有没有更好的方法来实现这一切?