2011-03-20 9 views
1

CAEAGLLayer가있는 다른 스레드에 OpenGL ES 초기화를 넣었습니다. 다른 스레드의 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]; 

스크리닝을 그리는하지만 기기, I 얻을 모두 검은 화면이다. 다른 설정이 필요합니까?

+0

솔루션 찾기? 나는 시뮬레이터에서 훌륭하게 작동하는 동일한 문제를 가지고 있지만 장치에는 아무 것도 표시되지 않습니다. – Kekoa

답변

2

OpenGL 컨텍스트는 한 번에 하나의 스레드에서만 활성화 될 수 있습니다. 따라서 먼저 한 스레드에서 컨텍스트를 분리하고 다른 스레드에서 다시 연결해야합니다. 코드에 분리가없는 것 같습니다.

+0

어떻게 분리하고 다시 부착 할 수 있습니까? 나는 약간의 구글을했고, 아무 것도 발견하지 못했다. ... – user668294

+0

나는 그가 [EAGLContext setCurrentContext : nil]을 의미한다고 생각한다. 분리하다 –

관련 문제