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?

Foi útil?

Solução

A solução foi redefinir o objeto CIContext após a GLKView foi redimensionada.
Obrigado por nada, todos!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top