首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apportable -如何在后台线程上运行OpenGL?

Apportable -如何在后台线程上运行OpenGL?
EN

Stack Overflow用户
提问于 2013-09-24 19:28:45
回答 1查看 1K关注 0票数 1

我想在一个背景线程上完成我所有的渲染。目前,我在iOS上使用UIView子类中的一个CAEAGLLayer来完成这个工作,然后在后台线程上执行所有的OpenGL派生操作(包括通过.绑定层):

代码语言:javascript
复制
[context renderbufferStorage:GL_RENDERBUFFER fromDrawable:layer];

...)然而,当我在Android上尝试这一点时,Apportable兼容性层会在EGL中触发错误,因为它试图使用来自另一个线程的EGL Surface .:

代码语言:javascript
复制
09-24 12:25:04.667    2622-2661/com.apportable.Spin E/EglHelper﹕ eglSwapBuffers returned 12301. tid=1535
09-24 12:25:04.677    2622-2661/com.apportable.Spin W/Adreno200-EGL﹕ <qeglDrvAPI_eglSwapBuffers:3415>: EGL_BAD_SURFACE

如何在BG线程上进行呈现?是否有任何可移植线程文档(例如,用于运行iOS主线程的Android线程?或者那是一个单独的线程?)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-24 20:50:50

  1. 使用CAEAGLLayer创建视图,并在主线程上创建EAGLContext
  2. 通过主上下文中的sharegroup值创建用于后台线程的共享EAGLContext
  3. 使这些共享上下文在后台线程上保持当前。
  4. 在使用lib分派和上下文时要非常小心(理想情况下,您应该使用NSThread方法在主线程上运行),特别是要注意为dispatch_sync记录的优化。

与普通的Android线程相比,可移植线程模型有点不标准。这主要是因为iOS在其主线程中运行OpenGL。启动应用程序的线程与创建初始OpenGL面的线程相同。有趣的是,我们基于Android的视图也是在GL线程中创建和管理的(通过对Looper/MessageQueue和Dialog构造的一些巧妙的操作)。只要您在Objective中引用的第一个OpenGL上下文处于主线程上,共享上下文的大部分内容就应该像预期的那样工作。然而,如果不是这样的话,事情就会迅速发展。理想情况下,您应该创建共享上下文,以便根据主线程创建的主上下文切换到后台线程。

更多信息来自可应用讨论小组

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18990366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档