2011-10-20 11 views
6

Cuando se cambia el tamaño de un GLKView, hay algunas operaciones detrás de escena que tienen lugar en los buffers y el contexto de ese GLKView. Durante el tiempo que lleva realizar estas operaciones entre bastidores, el dibujo al GLKView no produce resultados correctos.Cambio de tamaño de un GLKView

En mi caso, tengo una GLKView que tiene setNeedsDisplay permitido, por lo que cada vez que tengo que actualizar su contenido en la pantalla, acabo de llamar -setNeedsDisplay en ese GLKView. Estoy usando GLKView para dibujar imágenes, así que si necesito dibujar una imagen con un tamaño diferente, también necesito cambiar el tamaño de GLKView.

El problema: cuando cambio el tamaño de GLKView y llamo al setNeedsDisplay en esa vista, el resultado en la pantalla no es correcto. Esto se debe a que el GLKView no finaliza las operaciones detrás de escena invocadas por el nuevo cambio de tamaño antes de intentar dibujar la nueva imagen.

Encontré una solución a esto llamando al: performSelector:@selector(setNeedsDisplay) withObject:nil afterDelay:0 en lugar de solo setNeedsDisplay en el GLKView. Esto básicamente obliga al hilo principal a esperar a que se completen todas las operaciones OpenGL detrás de escena antes de llamar al setNeedsDisplay. Aunque esto funciona bien, me pregunto si hay una mejor solución. Por ejemplo, ¿hay una llamada openGL para hacer que el hilo espere a que se completen todas las operaciones de OpenGL antes de continuar?

Respuesta

9

La solución fue restablecer el objeto CIContext después de que el GLKView ha sido redimensionado.
¡Gracias por nada, a todos!

+2

Podría abrazarte – dxb

+0

¿Cómo lo reseteaste? ¿Recrearlo desde cero? ¿O hay un método específico para llamar? – flainez

+1

En mi caso, después del cambio de tamaño configuré el objeto 'CIContext' de la siguiente manera:' ci_context = [CIContext contextWithEAGLContext: glkView.context] 'y luego llamo a' [glkView display] '. Tenga en cuenta que esto fue hace mucho tiempo y no seguí aprendiendo sobre esto, así que no asuma que es el enfoque correcto. – spybart

Cuestiones relacionadas