在我的OpenGL iOS应用程序中,我正在尝试实现生产者 - 消费者模型,其中生产者需要加载纹理,而消费者需要显示它们。从阅读文档,我知道这将需要使用EAGL共享组,并且共享的OpenGL对象应该是双缓冲的。但是,我不太确定哪个OpenGL对象应该是双缓冲的。纹理还是frambuffer?我的制作人每次需要显示一个新帧时都会加载三个纹理,因此我认为切换帧缓冲可能更有效。
所以,在高层次上,这就是我认为应该发生的事情:
有意义吗?有没有更好的方法来实现这一切?
答案 0 :(得分:0)
我认为既然你在谈论每帧加载新纹理,你不只是从磁盘中抓取它们。 (为此,GLKTextureLoader
为异步加载提供了一个简单的界面。)
对于受设计异步部分影响的对象,您应该使用双缓冲。在这种情况下,您将异步加载纹理,因此纹理对象应该是双缓冲的。当您的生产者线程正在加载纹理0,1和2时,您的使用者线程可以从纹理3,4和5中进行绘制。只要两个操作在大约相同的时间内完成,您就可以交换每个缓冲区的集合。帧;否则你需要考虑三重缓冲。