EAGLContext presentRenderbuffer在第二个线程?

时间:2014-12-12 01:05:37

标签: ios opengl-es eaglcontext

我将我的游戏引擎移植到iOS并在我的[EAGLContext presentRenderbuffer:]调用中运行异常。我的引擎将所有呈现代码都放在与主要引线不同的线程上;引擎的工作原理是在主线程上创建CAEAGLLayer和EAGLContext,激活上下文并为视图创建帧缓冲,然后停用上下文。在每个帧之后,我的渲染线程然后激活上下文,绑定帧缓冲,绘制,最后呈现渲染缓冲区。

是否可以在辅助线程上调用presentRenderbuffer:或者这是我的问题的原因?

2 个答案:

答案 0 :(得分:1)

看起来这个行为必须已经改变,因为我能够在辅助线程上使用EAGLContext而没有问题(在iOS7 / iOS8上进行测试)

答案 1 :(得分:0)

除非有一些差异,否则答案为否,您可能不会在除主线程之外的任何位置呈现渲染缓冲区。你可能得到的最接近的是在你完成所有绘图的辅助线程上使用纹理绑定FBO,然后将纹理传递给主线程(需要共享上下文)并仅将纹理重绘到主线程渲染缓冲区

另一种方法可能是使用三重缓冲,其中绘制线程将在完成绘制后交换缓冲区1和2,并且主线程将在完成呈现后交换缓冲区3和2。如果你试图实现这一点,请告诉我,因为我对结果感到好奇。