Ich habe mit OpenGL-Aufrufe in dieses geraten, wenn zwei Threads gleichzeitig versuchen, in die OpenGL-Szene zu zeichnen. Das klingt jedoch nicht wie das, was Sie tun.
Haben Sie vor diesem Aufruf Ihren Anzeigekontext und Framebuffer ordnungsgemäß initialisiert? Zum Beispiel in meinem UIView Unterklasse, die OpenGL Zeichnung der Fall ist, nenne ich folgendes in seiner initWithCoder: Methode:
context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1];
if (!context || ![EAGLContext setCurrentContext:context] || ![self createFramebuffer])
{
[self release];
return nil;
}
Die createFramebuffer Methode sieht wie folgt aus:
- (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;
}
Das ist so ziemlich Standardcode , wie von der OpenGL ES Application Vorlage in XCode generiert. Vielleicht bekommst du einen Absturz, wenn du Dinge vor dem Aufruf von glMatrixMode() nicht initialisierst.
Auch, warum machst du OpenGL Zeichnung in applicationDidFinishLaunching :? Wäre ein View- oder View-Controller kein geeigneterer Ort für OpenGL-Aufrufe als Ihr UIApplicationDelegate?
Es könnte sein, weil Apples Demo-Anwendung, CrashLanding es so macht. – xyz