EAGLContext nicht die Arbeit an OpenGLES 1 iphone os
-
01-10-2019 - |
Frage
Ich habe ein 3D-Projekt auf der Basis der EAGLView exemple von Apple.
Ich habe einen sehr seltsam Fehler mit dem Kontext (glaube ich), ist mein Kontext unter Verwendung erstellen:
[Kontext renderbufferStorage: GL_RENDERBUFFER_OES fromDrawable: (CAEAGLLayer *) self.layer];
Auf init die 3D es Arbeit zu sehen, und auf dem Layout subview, mein Framebuffer ist ein wieder schaffen zerstören. Aber in einigen Fällen wird der Framebuffer nicht erstellen. Ich habe mit dem Debugger suche ich das Problem aus dem Kontext „Schöpfung“ werden finden müssen:
- (BOOL)createFramebuffer
{
NSLog(@"[EAGLVIEW] create framebuffer");
glGenFramebuffersOES(1, &viewFramebuffer);
glGenRenderbuffersOES(1, &viewRenderbuffer);
glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);
//////// HERE, some time the context is 0 /////////
[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);
// On génère le tampon de profondeur -- bah oui, on fait de la 3D
glGenRenderbuffersOES(1, &depthRenderbuffer);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, depthRenderbuffer);
// On paramètre le tampon :
// - avec les dimensions que l'on veut
glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_DEPTH_COMPONENT16_OES, backingWidth, backingHeight);
//glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_RGB8_OES, backingWidth, backingHeight);
// - avec la profondeur que l'on veut
glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_DEPTH_ATTACHMENT_OES, GL_RENDERBUFFER_OES, depthRenderbuffer);
if(glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES) != GL_FRAMEBUFFER_COMPLETE_OES) {
NSLog(@"failed to make complete framebuffer object %x", glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES));
return NO;
}
return YES;
}
Ich verstehe nicht, warum Arbeit oder nicht. Wenn ich diesen Fehler haben, schalte ich mein iphone für Kraft layoutSubview auszuführen, und es ist Arbeit. es ist sehr seltsam.
, was der Grund für den Kontext nicht auf dem zweiten erstellen und es ist in Ordnung, nur nach.
Lösung
Sie haben geschrieben nicht den Code zeigt, wie Sie tatsächlich den Kontext erstellt, indem es einfach. Ihr Kontext Schöpfung sollte so etwas wie dieses
aussehencontext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1];
if (!context || ![EAGLContext setCurrentContext:context])
return false;
Und wenn der Kontext 0 (was bedeutet, nil), dann haben Sie es vor der Hand erkannt wird.