我想在一个背景线程上完成我所有的渲染。目前,我在iOS上使用UIView子类中的一个CAEAGLLayer来完成这个工作,然后在后台线程上执行所有的OpenGL派生操作(包括通过.绑定层):
[context renderbufferStorage:GL_RENDERBUFFER fromDrawable:layer];...)然而,当我在Android上尝试这一点时,Apportable兼容性层会在EGL中触发错误,因为它试图使用来自另一个线程的EGL Surface .:
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线程?或者那是一个单独的线程?)
发布于 2013-09-24 20:50:50
CAEAGLLayer创建视图,并在主线程上创建EAGLContextEAGLContextdispatch_sync记录的优化。与普通的Android线程相比,可移植线程模型有点不标准。这主要是因为iOS在其主线程中运行OpenGL。启动应用程序的线程与创建初始OpenGL面的线程相同。有趣的是,我们基于Android的视图也是在GL线程中创建和管理的(通过对Looper/MessageQueue和Dialog构造的一些巧妙的操作)。只要您在Objective中引用的第一个OpenGL上下文处于主线程上,共享上下文的大部分内容就应该像预期的那样工作。然而,如果不是这样的话,事情就会迅速发展。理想情况下,您应该创建共享上下文,以便根据主线程创建的主上下文切换到后台线程。
更多信息来自可应用讨论小组
https://stackoverflow.com/questions/18990366
复制相似问题