Используйте следующие функции для использования 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 , и лучше всего реализовать альтернативную стратегию регулирования кадров.