Cambiar el tamaño de una vista glkview
-
27-10-2019 - |
Pregunta
Cuando una GLKView
se redimensiona, hay algunas operaciones detrás de escena que tienen lugar en los buffers y el contexto de eso GLKView
. Durante el tiempo que lleva realizar estas operaciones detrás de escena, dibujando a la GLKView
no produce resultados correctos.
En mi escenario, tengo un GLKView
que tiene setNeedsDisplay
habilitado, para que cada vez que necesite actualizar su contenido en la pantalla, solo llamo -setNeedsDisplay
en eseGLKView
. 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 del GLKView
.
El problema: cuando cambio el tamaño del GLKView
y llama setNeedsDisplay
En esa vista, el resultado en la pantalla no es correcto. Esto es porque el GLKView
no se termina de terminar las operaciones detrás de escena invocadas por el nuevo cambio de tamaño antes de que intente dibujar la nueva imagen.
Encontré un trabajo para esto llamando: performSelector:@selector(setNeedsDisplay) withObject:nil afterDelay:0
en lugar de solo setNeedsDisplay
sobre el GLKView
. Esto básicamente obliga al hilo principal a esperar a que todas las operaciones de OpenGL detrás de escena se completen antes de llamar setNeedsDisplay
. Aunque esto funciona bien, me pregunto si hay una mejor solución. Por ejemplo, ¿hay una llamada OpenGL para que el hilo espere a que todas las operaciones de OpenGL se completen antes de continuar?
Solución
La solución era restablecer el CIContext
objeto después del GLKView
ha sido redimensionado.
¡Gracias por nada, todos!