Estou trabalhando em um projeto com SDL e OpenGL. O jogo funciona muito bem no Windows, Linux, OS X e iOS. No entanto, a versão do Android está mostrando um problema no meu telefone em particular. Eu testei outro dispositivo e lá funciona muito bem também.
O problema que estou enfrentando é uma falha visual. Isso acontece em explosões: por exemplo: 90 quadros estão bem e depois 40 quadros a falha. A falha em si é meio difícil de descrever, mas vou tentar. A tela está sendo atualizada parcialmente correta (da parte superior do meu telefone para aproximadamente a metade do caminho) e parcialmente piscando. O efeito trêmulo é algum tipo de salto para frente e para trás. Eu estou pensando que está relacionado ao buffer duplo. Eu acho que porque o que eu vejo na tela está pulando para frente e para trás em todos os quadros. É como se metade da tela tivesse um quadro no tempo e o quadro seguinte 2 quadros atrasado. Quase como uma procissão de Echternach, acho que você poderia dizer. Se eu o traçar em um gráfico em que o tempo passa ao descer o gráfico, acho que
left half | right half (phone is in landscape)
------------------------
time 1 | 1 1
time 2 | 2 2
time 3 | 3 1
time 4 | 4 4
time 5 | 5 3
time 6 | 6 6
time 7 | 7 5
time 8 | 8 8
time 9 | 9 7
Portanto, a metade direita é um quadro no tempo, e o quadro seguinte mostra o quadro anterior. Isso é compatível com a minha teoria de que há um problema com o buffer duplo. Parece que de alguma forma não é possível atualizar completamente o backbuffer antes de ele ser colocado na tela, ou algo assim.
Além disso, a divisão entre boa e falha na tela é diferente de quadro para quadro, o que acho que prova que é um problema de sincronização e depende muito do tempo do que está acontecendo. Adicionar glFinish();
antes da SDL_GL_SwapWindow();
chamada não ajuda.
Informações da versão: SDL reporta vsync para ser ativado. No entanto, acredito que isso não está rasgando. Meu telefone é um Samsung Galaxy S3 mini e está executando o Android 5.1.1 (CM12) e a GPU (Mali-400) suporta o OpenGL ES 2.0. Outros jogos funcionam bem no meu telefone.