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?

È stato utile?

Soluzione

La soluzione era reimpostare l'oggetto CIContext dopo che GLKView è stato ridimensionato.
Grazie di niente a tutti!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top