Добавьте функции изменения частоты кадров

Используйте следующие функции для использования Android Frame Pacing с движком рендеринга на основе API OpenGL ES.

Инициализировать и уничтожить

Используйте следующие функции для инициализации и уничтожения экземпляра Android Frame Pacing соответственно:

В общем случае следует вызывать SwappyGL_init() как можно раньше во время запуска движка, а SwappyGL_destroy() — при выходе из игры. В других случаях вызывать эти методы не требуется.

Настройте интервал подкачки и период обновления

Используйте следующие функции для настройки экземпляра Android Frame Pacing:

При вызове 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 регулирует длительность подкачки и режим конвейера на основе средней длительности предыдущих кадров. Вы можете управлять этим поведением с помощью следующих функций:

Выполнять покадровую замену

Во время каждого кадра рендеринга вызывайте 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 , и лучше всего реализовать альтернативную стратегию регулирования кадров.