【问题标题】:EAGLContext presentRenderbuffer on second thread?EAGLContext presentRenderbuffer 在第二个线程上?
【发布时间】:2015-01-21 19:15:22
【问题描述】:

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

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

【问题讨论】:

    标签: ios opengl-es eaglcontext


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 我认为这种行为一定已经改变了。我最终遇到的问题是我在调用presentRenderbuffer(lol)之前没有绑定渲染缓冲区,但是一旦我修复了presentRenderbuffer调用似乎在辅助线程上工作正常,只要上下文处于活动状态.为了迂腐,我通过在调用之前检查 [NSThread isMainThread] 返回 false 来仔细检查这一点。这是在带有 ES3 上下文的 iOS7 和 iPad Mini 2 上。
      • 很高兴听到这个消息。过去发生的情况是,当您在非主线程上显示时,您的屏幕有时只是黑色,有时它工作得很好。即使最小化应用程序并再次打开它也可能会改变结果。我希望你不会得到这样的结果......
      • 有趣,感谢您提供的信息!在接下来的几天里,我会进行一些严格的测试,看看我是否可以复制这些问题,并将报告我的发现。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-21
      • 1970-01-01
      • 2012-12-14
      • 2021-06-23
      相关资源
      最近更新 更多