Je l'ai déjà fait avec des appels OpenGL si deux threads tentent de dessiner sur la scène OpenGL en même temps. Cependant, cela ne ressemble pas à ce que vous faites. Avez-vous correctement initialisé votre contexte d'affichage et votre framebuffer avant cet appel? Par exemple, dans ma sous-classe UIView qui fait le dessin OpenGL, j'appelle ce qui suit dans son initWithCoder: Méthode:
context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1];
if (!context || ![EAGLContext setCurrentContext:context] || ![self createFramebuffer])
{
[self release];
return nil;
}
La méthode createFramebuffer se présente comme suit:
- (BOOL)createFramebuffer
{
glGenFramebuffersOES(1, &viewFramebuffer);
glGenRenderbuffersOES(1, &viewRenderbuffer);
glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);
[context renderbufferStorage:GL_RENDERBUFFER_OES fromDrawable:(CAEAGLLayer*)self.layer];
glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, viewRenderbuffer);
glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &backingWidth);
glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &backingHeight);
if (USE_DEPTH_BUFFER) {
glGenRenderbuffersOES(1, &depthRenderbuffer);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, depthRenderbuffer);
glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_DEPTH_COMPONENT16_OES, backingWidth, backingHeight);
glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_DEPTH_ATTACHMENT_OES, GL_RENDERBUFFER_OES, depthRenderbuffer);
}
if(glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES) != GL_FRAMEBUFFER_COMPLETE_OES)
{
return NO;
}
return YES;
}
C'est à peu près le code passe-partout , tel que généré par le modèle d'application OpenGL ES dans XCode. Peut-être en n'initialisant pas les choses avant d'appeler glMatrixMode(), vous obtenez un plantage.
En outre, pourquoi dessinez-vous OpenGL dans applicationDidFinishLaunching:? Un contrôleur de vue ou de vue ne serait-il pas un endroit plus approprié pour les appels OpenGL que votre UIApplicationDelegate?
C'est peut-être parce que l'application de démonstration d'Apple, CrashLanding, le fait de cette façon. – xyz