2

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

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

4

2 回答 2

2

看起来这种行为必须改变,因为我能够在辅助线程上使用 EAGLContext 而不会出现问题(在 iOS7/iOS8 上测试)

于 2015-01-21T11:15:22.170 回答
0

除非做出了一些不同,否则答案是否定的,您可能不会在除主线程之外的任何线程上呈现渲染缓冲区。您可能最接近的是在辅助线程上使用纹理绑定 FBO,您可以在该线程上执行所有绘图,然后将纹理传递给主线程(需要共享上下文)并将纹理仅重绘到主线程渲染缓冲区.

另一种方法可能是使用三重缓冲,您的绘图线程将在完成绘图后交换缓冲区 1 和 2,而主线程将在完成呈现后交换缓冲区 3 和 2。如果您尝试实施此操作,请告诉我,因为我对结果感到好奇。

于 2014-12-12T07:23:10.357 回答