EAGLContext no funciona en OpenGLES 1 iPhone OS
-
01-10-2019 - |
Pregunta
Tengo un proyecto en 3D basado en el exemple EAGLView de Apple.
Tengo un error muy Stange con el contexto (creo), mi contexto es crear mediante el uso de:
[contexto renderbufferStorage: GL_RENDERBUFFER_OES fromDrawable: (CAEAGLLayer *) self.layer];
sobre inicio de la vista 3D de trabajo, y en la subvista diseño, mi uso de este dispositivo es destruir un crear de nuevo. Sin embargo, en algunos casos, el uso de este dispositivo no se crean. Tengo buscar con el depurador Tengo encontrar el problema convertido en el contexto de la "creación":
- (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;
}
No entiendo por qué de trabajo o no. Cuando tengo este error, vuelvo los iPhone de la fuerza para ejecutar layoutSubview, y es el trabajo. es muy extraño.
¿Cuáles son las razones para el contexto no crea en segunda y que está bien justo después.
Solución
No se ha publicado el código que muestra cómo en realidad se creó el contexto, sólo usarla. Su creación del contexto debe ser algo como esto
context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1];
if (!context || ![EAGLContext setCurrentContext:context])
return false;
Y si el contexto es 0 (lo que significa cero) entonces habrá detectado que antes de la mano.