Ridimensionare un GLKView
-
27-10-2019 - |
Domanda
Quando un GLKView
viene ridimensionato, ci sono alcune operazioni dietro le quinte che avvengono sui buffer e nel contesto di quel GLKView
. Durante il tempo necessario per eseguire queste operazioni dietro le quinte, il disegno sul GLKView
non produce risultati corretti.
Nel mio scenario, ho un GLKView
che ha setNeedsDisplay
abilitato, in modo che ogni volta che ho bisogno di aggiornare i suoi contenuti sullo schermo, chiamo -setNeedsDisplay
su quello
GLKView
. Sto usando GLKView
per disegnare immagini, quindi se ho bisogno di disegnare un'immagine con una dimensione diversa, devo cambiare anche la dimensione del GLKView
.
Il problema: quando cambio la dimensione del GLKView
e chiamo setNeedsDisplay
su quella vista, il risultato sullo schermo non è corretto. Questo perché GLKView
non ha terminato le operazioni dietro le quinte invocate dal nuovo cambio di dimensione prima di provare a disegnare la nuova immagine.
Ho trovato una soluzione a questo problema chiamando: performSelector:@selector(setNeedsDisplay) withObject:nil afterDelay:0
invece di setNeedsDisplay
sul GLKView
. Questo fondamentalmente forza il thread principale ad attendere il completamento di tutte le operazioni openGL dietro le quinte prima di chiamare setNeedsDisplay
. Sebbene funzioni bene, mi chiedo se esista una soluzione migliore. Ad esempio, esiste una chiamata openGL per fare in modo che il thread attenda il completamento di tutte le operazioni openGL prima di continuare?
Soluzione
La soluzione era reimpostare l'oggetto CIContext
dopo che GLKView
è stato ridimensionato.
Grazie di niente a tutti!