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