Use as funções abaixo para usar a biblioteca Android Frame Pacing com um mecanismo de renderização baseado na API OpenGL ES.
Inicializar e destruir
Use as funções abaixo para inicializar e destruir uma instância da Android Frame Pacing, respectivamente:
Em geral, chame SwappyGL_init() o quanto antes durante a
sequência de inicialização do mecanismo e chame SwappyGL_destroy() quando o jogo
for encerrado. Não é necessário chamar esses métodos em nenhum outro momento.
Configurar intervalo de troca e período de atualização
Use as funções abaixo para configurar uma instância da Android Frame Pacing:
void SwappyGL_setSwapIntervalNS(uint64_t swap_ns);void SwappyGL_setFenceTimeoutNS(uint64_t fence_timeout_ns);void SwappyGL_setUseAffinity(bool tf);
Ao chamar SwappyGL_setSwapIntervalNS(), transmita a duração da apresentação
do frame. Na maioria dos casos, é possível usar uma das seguintes constantes:
SWAPPY_SWAP_60FPS, SWAPPY_SWAP_30FPS ou SWAPPY_SWAP_20FPS.
Em geral, chame esses métodos diretamente após uma chamada para
SwappyGL_init(). No entanto, pode ser necessário chamar esses métodos em outros
momentos durante a execução do jogo.
Como configurar ANativeWindow
O Swappy precisa do handle de ANativeWindow para executar
uma operação específica de ANativeWindow, como chamar
ANativeWindow_setFrameRate().
Chame
SwappyGL_setWindow()
quando a superfície de exibição do Android mudar e você tiver um novo
identificador ANativeWindow. Consulte o exemplo do Bouncyball para um exemplo.
Modos automáticos
A Android Frame Pacing ajusta a duração da troca e o modo do pipeline com base na duração média dos frames anteriores. É possível controlar esse comportamento com as seguintes funções:
void SwappyGL_setAutoSwapInterval(bool enabled);void SwappyGL_setMaxAutoSwapIntervalNS(uint64_t max_swap_ns);void SwappyGL_setAutoPipelineMode(bool enabled);
Realizar troca por frame
Durante cada frame de renderização, chame
bool SwappyGL_swap(EGLDisplay display, EGLSurface surface).
Esse método envolve o método eglSwapBuffers() do Open GL ES, portanto, é necessário
substituir todas as instâncias de eglSwapBuffers() no jogo por SwappyGL_swap().
Funções utilitárias
O método abaixo verifica se a Android Frame Pacing está ativada:
É possível que uma instância da Android Frame Pacing não consiga ser inicializada por um destes motivos:
- As funções EGL necessárias estão ausentes no dispositivo.
- O sistema definiu a propriedade
swappy.disable.
Em qualquer uma dessas situações, SwappyGL_isEnabled() retorna false, e é
melhor implementar uma estratégia de ritmo de frame alternativo.