Я работаю над проектом с SDL и OpenGL. Игра отлично работает на Windows, Linux, OS X и iOS. Тем не менее, версия Android показывает проблему на моем телефоне, в частности. Я проверил другое устройство, и там он прекрасно работает.
Проблема, с которой я сталкиваюсь - визуальный сбой. Это происходит в пакетном режиме: например: 90 кадров, а затем 40 кадров. Сам глюк довольно сложно описать, но я попробую. Экран обновляется частично корректно (с верхней части телефона примерно до половины вниз) и частично мигает. Эффект мерцания - это своего рода прыжки вперед и назад. Я думаю, что это связано с двойной буферизацией. Я думаю, потому что то, что я вижу на экране, прыгает вперед и назад каждый кадр. Как будто половина экрана - один кадр во времени, а следующий кадр - на 2 кадра позже. Полагаю, что это похоже на процессию Эхтернаха. Если я нанесу это на график, где время движется вниз, я думаю, что
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
Таким образом, правая половина - это один кадр во времени, а следующий кадр показывает предыдущий кадр. Это подтверждает мою теорию о том, что существует проблема с двойной буферизацией. Похоже, что каким-то образом не удается полностью обновить буфер, прежде чем он появится на экране, или что-то еще.
Кроме того, различие между хорошим и глюком на экране отличается от кадра к кадру, что, я думаю, доказывает, что это проблема синхронизации и сильно зависит от времени происходящего. Добавление glFinish();
до SDL_GL_SwapWindow();
звонка не помогает.
Информация о версии: SDL сообщает о включении vsync. Тем не менее, я считаю, что это не разрывает. Мой телефон Samsung Galaxy S3 mini работает под управлением Android 5.1.1 (CM12), а графический процессор (Mali-400) поддерживает OpenGL ES 2.0. Другие игры работают нормально на моем телефоне.