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?

¿Fue útil?

Solución

La solución era restablecer el CIContext objeto después del GLKView ha sido redimensionado.
¡Gracias por nada, todos!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top