2013-09-24 20 views
1

我想在後臺線程上完成所有的渲染。目前,我有一個UIView子類使用CAEAGLLayer的iOS這方面的工作,然後做所有在後臺線程OpenGL的自旋向上的(包括通過...結合層:Apportable - 如何在後臺線程上運行OpenGL?

[context renderbufferStorage:GL_RENDERBUFFER fromDrawable:layer]; 

... )然而,當我嘗試這在Android上,Apportable兼容層在EGL觸發錯誤,因爲它試圖使用EGL表面從另一個線程...:

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線?是否有任何Apportable線程文件(如:是用於運行iOS的主線程Android的UI線程?或者是一個單獨的線程?)

回答

2
  1. 在主線程中創建一個CAEAGLLayer視圖和創建EAGLContext

  2. 創建共享EAGLContext s到待經由 sharegroup值從主上下文

  3. 使那些共享的上下文上的背景電流用於後臺線程的線程

  4. 非常小心使用libdispatch和背景(理想情況下,你應該 用於主 線程運行的東西NSThread方法)具體而言,要注意記錄爲dispatch_sync優化。

相比普通的Android應用,Apportable線程模型有點不標準。這主要是因爲iOS在其主線程中運行OpenGL。您的應用程序啓動的線程與創建初始OpenGL表面的線程相同。有趣的分支是,我們的基於Android的視圖也是在GL線程中創建和管理的(通過一些對Looper/MessageQueue和Dialog構造的巧妙操作)。只要您在Objective-C中引用的第一個OpenGL上下文位於主線程中;大多數共享上下文應該按預期工作。但是,如果情況並非如此,事情可能會很快下降。理想情況下,您應該創建共享上下文以根據從主線程創建的主上下文切換到後臺線程。

更多在the Apportable discussion group