2011-03-20 40 views
1

我已經把我的OpenGL ES初始化放在另一個線程與CAEAGLLayer中。在另一個線程中的OpenGL ES沒有在物理設備上繪圖

context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1 sharegroup:group];   
if (!context || ![EAGLContext setCurrentContext:context]) 
{ 
    [self release]; 
} 

// Create system framebuffer object. The backing will be allocated in -reshapeFramebuffer 
glGenFramebuffersOES(1, &viewFramebuffer); 
glGenRenderbuffersOES(1, &viewRenderbuffer); 
glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer); 
glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer); 
[context renderbufferStorage:GL_RENDERBUFFER_OES fromDrawable:eaglLayer]; 
glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, viewRenderbuffer); 

然後將其拖到篩選

BOOL rel = [EAGLContext setCurrentContext:context]; 
drawPixels(backingWidth, backingHeight, framebuf1, texID); 
rel = [context presentRenderbuffer:GL_RENDERBUFFER_OES]; 

該緩衝區模擬器顯示,但在設備上,我得到的是一個黑色的屏幕。 我需要配置別的東西嗎?

+0

尋找解決方案?我遇到了同樣的問題,它在模擬器中很好用,但設備上沒有顯示。 – Kekoa 2013-05-30 19:45:13

回答

2

OpenGL上下文一次只能在一個線程中處於活動狀態。所以你首先要從一個線程中分離上下文,並將其重新附加到另一個線程中。它看起來像你的代碼缺乏分離。

+0

任何想法如何做分離和重新附加?我做了一些google,發現什麼都沒有... – user668294 2011-03-21 12:09:12

+0

我假設他的意思是[EAGLContext setCurrentContext:nil];分離 – 2012-02-26 18:56:36