Redimensionnement un GLKView
-
27-10-2019 - |
Question
Quand un GLKView
est redimensionnée, il y a des opérations derrière les scènes qui se déroulent sur les tampons et le contexte de cette GLKView
. Pendant le temps qu'il faut pour effectuer ces opérations derrière les coulisses, le dessin au GLKView
ne produit pas des résultats corrects.
Dans mon scénario, j'ai un GLKView
qui a permis setNeedsDisplay
, de sorte que chaque fois que je dois mettre à jour le contenu de celui-ci sur l'écran, je viens d'appeler -setNeedsDisplay
sur cette
GLKView
. J'utilise GLKView
pour dessiner des images, donc si je dois dessiner une image avec une taille différente, je dois aussi changer la taille de la GLKView
.
Le problème: Lorsque je change la taille de la GLKView
et appel setNeedsDisplay
sur ce point de vue, le résultat à l'écran est incorrect. En effet, le GLKView
ne se fait pas terminé les opérations derrière les scènes invoquées par le nouveau changement de taille avant d'essayer de dessiner la nouvelle image.
J'ai trouvé un travail autour de cela en appelant: performSelector:@selector(setNeedsDisplay) withObject:nil afterDelay:0
au lieu de simplement setNeedsDisplay
sur le GLKView
. Cela force le thread principal d'attendre toutes les opérations openGL les coulisses de l'arrière-être terminée avant d'appeler setNeedsDisplay
. Bien que cela fonctionne bien, je me demande s'il y a une meilleure solution. Par exemple, est-il un appel openGL pour faire le fil d'attente pour toutes les opérations openGL à remplir avant de continuer?
La solution
La solution a consisté à remettre l'objet CIContext
après la GLKView
a été redimensionnée.
Merci pour rien, tout le monde!