2011-10-20 18 views
6

Quando uno GLKView viene ridimensionato, ci sono alcune operazioni dietro le quinte che si svolgono sui buffer e il contesto di quello GLKView. Durante il tempo necessario per eseguire queste operazioni dietro le quinte, il disegno su GLKView non produce risultati corretti.Ridimensionamento di un GLKView

Nel mio scenario, ho un GLKView che ha setNeedsDisplay attivato, in modo che ogni volta che ho bisogno di aggiornare il suo contenuto sullo schermo, mi basta chiamare -setNeedsDisplay su quel GLKView. Sto usando GLKView per disegnare immagini, quindi se ho bisogno di disegnare un'immagine con una dimensione diversa, ho bisogno anche di cambiare la dimensione del GLKView.

Il problema: quando si modifica la dimensione di GLKView e si chiama setNeedsDisplay su quella vista, il risultato sullo schermo non è corretto. Questo perché lo GLKView non ha terminato le operazioni dietro le quinte invocate dalla nuova modifica della dimensione prima che provi a disegnare la nuova immagine.

Ho trovato un modo per ovviare a questo chiamando: performSelector:@selector(setNeedsDisplay) withObject:nil afterDelay:0 anziché setNeedsDisplay su GLKView. Questo in pratica costringe il thread principale ad attendere che tutte le operazioni openGL dietro le quinte siano completate prima di chiamare setNeedsDisplay. Anche se questo funziona bene, mi chiedo se c'è una soluzione migliore. Ad esempio, c'è una chiamata openGL per fare in modo che il thread attenda che tutte le operazioni openGL siano completate prima di continuare?

risposta

9

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

+2

Potrei abbracciarti – dxb

+0

Come lo hai resettato? Ricreando da zero? O c'è un metodo specifico per chiamare. – flainez

+1

Nel mio caso, dopo il ridimensionamento stavo impostando il mio oggetto 'CIContext' in questo modo:' ci_context = [CIContext contextWithEAGLContext: glkView.context] 'e quindi chiamando' [glkView display] '. Si noti che questo è stato molto tempo fa e non ho continuato a imparare a riguardo, quindi non dare per scontato che sia l'approccio giusto. – spybart

Problemi correlati