Redimensionar uma GLKView
-
27-10-2019 - |
Pergunta
Quando um GLKView
é redimensionada, existem algumas operações por trás das cenas que ocorrem nos buffers e contexto do que GLKView
. que durante o tempo que leva para executar essas operações por trás das cenas, desenho à GLKView
não produzem resultados corretos.
Em meu cenário, eu tenho um GLKView
que tem setNeedsDisplay
habilitado, para que a qualquer momento eu preciso atualizar o seu conteúdo na tela, eu simplesmente chamar -setNeedsDisplay
em que
GLKView
. Estou usando GLKView
para desenhar imagens, por isso, se eu preciso para desenhar uma imagem com um tamanho diferente, eu preciso também mudar o tamanho da GLKView
.
O problema: Quando eu mudar o tamanho da GLKView
e chamada setNeedsDisplay
sobre esse ponto de vista, o resultado na tela não está correta. Isso ocorre porque o GLKView
não é feito de concluir as operações por trás das cenas invocados pela nova mudança de tamanho antes de tentar desenhar a nova imagem.
Eu encontrei uma solução alternativa para isso chamando: performSelector:@selector(setNeedsDisplay) withObject:nil afterDelay:0
em vez de apenas setNeedsDisplay
na GLKView
. Isso basicamente força o thread principal para esperar por todas as operações por trás das cenas OpenGL para ser concluída antes de chamar setNeedsDisplay
. Embora isso funciona ok, eu estou querendo saber se existe uma solução melhor. Por exemplo, há uma chamada de OpenGL para tornar a espera fio para todas as operações OpenGL para ser concluída antes de continuar?
Solução
A solução foi redefinir o objeto CIContext
após a GLKView
foi redimensionada.
Obrigado por nada, todos!