2012-06-18 15 views
6

Cada vez que llamo al glClear(GL_COLOR_BUFFER_BIT);, aparece el error de OpenGL "operación no válida de framebuffer".Operación de framebuffer inválido de OpenGL después de glClear (GL_COLOR_BUFFER_BIT);

La llamada parece funcionar bien y nada parece estar mal. Llamo al glClear(GL_COLOR_BUFFER_BIT); en primer lugar en el método ::paintGL().

¿Huh? ¿Debo ignorar este error?

+0

¿Ha establecido un color claro? – cmannett85

+0

@ cbamber85: no, pero acabo de poner un 'glClearColor (0,0,0,0)' para ver si hizo alguna diferencia, y el otro todavía está allí. – houbysoft

+0

Muy posiblemente el error ha sido provocado por una llamada previa de OpenGL que el código no verificó. Verifique que todas las operaciones de OpenGL estén protegidas por la comprobación de errores. –

Respuesta

4

Supongo que su framebuffer no está completo y llamar al glClear en un framebuffer incompleto está arrojando el error.

Compruebe el estado del framebuffer usando glCheckFramebufferStatus y asegúrese de que devuelve GL_FRAMEBUFFER_COMPLETE.

+0

Recibí el mismo error que el póster original, y verifiqué que mis framebuffers ** están ** completos. Estoy ejecutando OpenGL-ES3 en iPhone y la textura que se borra es una textura sRGB: cuando se cambia a una "rgb" texture normal, el error de "operación de framebuffer no válido" en glClear se detiene. A partir de la información proporcionada por el OP, no puedo decir si esto es lo mismo en este caso, pero de cualquier manera esto puede proporcionar una pista a alguien más que se encuentre con este problema. – kalmiya

+0

Actualización: en mi caso srgb8 no es compatible como "ColorRenderable" (usando GL_SRGB8_ALPHA8 como una alternativa funciona). Como dijo James, glCheckFrameBufferStatus ** debería ** haber devuelto un error, pero no es así, lo que significa que hay un error en la implementación de OpenGL que estoy usando (OpenGL-ES3 en xcode 7.3 en osx). – kalmiya

2

Estaba teniendo este problema en osx usando NSOpenGLView con CVDisplayLink para desencadenar la devolución de llamada de renderizado.

Asegúrese de esperar a que el NSOpenGLView ser muestra totalmente antes de comenzar la representación, es decir:

-(void)viewDidAppear { 
    [super viewDidAppear]; 

    CVDisplayLinkStart(_displayLink); 
} 

Hacerlo en viewDidLoad es demasiado pronto.

Cuestiones relacionadas