Emplea las siguientes funciones para usar Android Frame Pacing con un motor de renderización basado en la API de OpenGL ES.
Cómo inicializar y destruir
Usa las siguientes funciones para inicializar y destruir una instancia de Android Frame Pacing, respectivamente:
En general, debes llamar a SwappyGL_init()
lo antes posible durante la secuencia de inicio del motor, y debes llamar a SwappyGL_destroy()
cuando se cierre el juego. No debería ser necesario llamar a estos métodos en ningún otro momento.
Cómo configurar el intervalo de intercambio y el período de actualización
Usa las siguientes funciones para configurar una instancia de Android Frame Pacing:
void SwappyGL_setSwapIntervalNS(uint64_t swap_ns);
void SwappyGL_setFenceTimeoutNS(uint64_t fence_timeout_ns);
void SwappyGL_setUseAffinity(bool tf);
Cuando llames a SwappyGL_setSwapIntervalNS()
, pasa el tiempo durante el cual se debe presentar un fotograma. En la mayoría de los casos, puedes usar una de las siguientes constantes: SWAPPY_SWAP_60FPS
, SWAPPY_SWAP_30FPS
o SWAPPY_SWAP_20FPS
.
En general, deberías llamar a estos métodos inmediatamente después de una llamada a SwappyGL_init()
. Sin embargo, quizás debas llamar a estos métodos en otros momentos durante la ejecución del juego.
Cómo configurar ANativeWindow
Swappy necesita el controlador de ANativeWindow
a fin de realizar una operación específica de ANativeWindow
, como llamar a ANativeWindow_setFrameRate()
.
Llama a SwappyGL_setWindow()
cuando cambie la plataforma de visualización de Android y tengas un nuevo controlador ANativeWindow
(consulta la muestra de Bouncyball para ver un ejemplo).
Modos automáticos
Android Frame Pacing ajusta la duración del intercambio y el modo de canalización en función de la duración promedio de los fotogramas anteriores. Puedes controlar este comportamiento mediante las siguientes funciones:
void SwappyGL_setAutoSwapInterval(bool enabled);
void SwappyGL_setMaxAutoSwapIntervalNS(uint64_t max_swap_ns);
void SwappyGL_setAutoPipelineMode(bool enabled);
Cómo realizar intercambios por fotograma
Durante el procesamiento de cada fotograma, llama a bool SwappyGL_swap(EGLDisplay display, EGLSurface surface)
.
Este método une el eglSwapBuffers()
de OpenGL ES, por lo que debes reemplazar todas las instancias de eglSwapBuffers()
de tu juego por SwappyGL_swap()
.
Funciones de utilidad
El siguiente método verifica si Android Frame Pacing está habilitado:
Es posible que una instancia de Android Frame Pacing no pueda inicializarse debido a alguno de los siguientes motivos:
- El dispositivo no cuenta con las funciones de EGL necesarias.
- El sistema estableció la propiedad
swappy.disable
.
En cualquiera de estas situaciones, SwappyGL_isEnabled()
muestra false
, y se recomienda que implementes una estrategia alternativa de ritmo de fotogramas.