Используйте следующие функции для использования Android Frame Pacing с движком рендеринга на основе API OpenGL ES.
Инициализировать и уничтожить
Используйте следующие функции для инициализации и уничтожения экземпляра Android Frame Pacing соответственно:
В общем случае следует вызывать SwappyGL_init()
как можно раньше во время запуска движка, а SwappyGL_destroy()
— при выходе из игры. В других случаях вызывать эти методы не требуется.
Настройте интервал подкачки и период обновления
Используйте следующие функции для настройки экземпляра Android Frame Pacing:
-
void SwappyGL_setSwapIntervalNS(uint64_t swap_ns);
-
void SwappyGL_setFenceTimeoutNS(uint64_t fence_timeout_ns);
-
void SwappyGL_setUseAffinity(bool tf);
При вызове SwappyGL_setSwapIntervalNS()
передайте длительность показа кадра. В большинстве случаев можно использовать одну из следующих констант: SWAPPY_SWAP_60FPS
, SWAPPY_SWAP_30FPS
или SWAPPY_SWAP_20FPS
.
Как правило, эти методы следует вызывать сразу после вызова SwappyGL_init()
. Однако может возникнуть необходимость вызывать эти методы и в других моментах выполнения игры.
Настройка ANativeWindow
Swappy необходим дескриптор ANativeWindow
для выполнения специфичной для ANativeWindow
операции, например, вызова ANativeWindow_setFrameRate()
. Вызывайте SwappyGL_setWindow()
, когда поверхность дисплея Android изменилась и у вас появился новый дескриптор ANativeWindow
(см. пример Bouncyball ).
Автоматические режимы
Функция Android Frame Pacing регулирует длительность подкачки и режим конвейера на основе средней длительности предыдущих кадров. Вы можете управлять этим поведением с помощью следующих функций:
-
void SwappyGL_setAutoSwapInterval(bool enabled);
-
void SwappyGL_setMaxAutoSwapIntervalNS(uint64_t max_swap_ns);
-
void SwappyGL_setAutoPipelineMode(bool enabled);
Выполнять покадровую замену
Во время каждого кадра рендеринга вызывайте bool SwappyGL_swap(EGLDisplay display, EGLSurface surface)
. Этот метод является обёрткой для метода eglSwapBuffers()
из Open GL ES, поэтому вам следует заменить все экземпляры eglSwapBuffers()
в вашей игре на SwappyGL_swap()
.
Функции полезности
Следующий метод проверяет, включен ли Android Frame Pacing:
Возможно, экземпляр Android Frame Pacing не может инициализироваться по любой из следующих причин:
- На устройстве отсутствуют необходимые функции EGL.
- Система установила свойство
swappy.disable
.
В любой из этих ситуаций SwappyGL_isEnabled()
возвращает false
, и лучше всего реализовать альтернативную стратегию регулирования кадров.