2011-03-20 1 views
1

J'ai mis mon initialisation ES OpenGL dans un autre thread avec CAEAGLLayer.OpenGL ES dans un autre thread ne dessine pas sur le périphérique physique

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); 

puis dessiner à l'écran

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

le tampon affiche dans le simulateur, mais sur un appareil, tout ce que je reçois est un écran noir. Dois-je configurer autre chose?

+0

Trouver une solution? J'ai le même problème là où ça fonctionne très bien en simulateur mais rien ne se voit sur l'appareil. – Kekoa

Répondre

2

Les contextes OpenGL peuvent être actifs dans un seul thread à la fois. Donc, vous devez d'abord détacher le contexte d'un thread et le rattacher dans un autre. Il semble que votre code n'a pas le détachement.

+0

une idée comment faire détacher et rattacher? j'ai fait du google, je n'ai rien trouvé ... – user668294

+0

je suppose qu'il veut dire [EAGLContext setCurrentContext: nil]; se détacher –