Utilisez les fonctions suivantes pour utiliser Android Frame Pacing avec un moteur de rendu basé sur l'API OpenGL ES.
Initialiser et détruire
Utilisez les fonctions suivantes pour initialiser et détruire une instance d'Android Frame Pacing, respectivement :
En général, il est préférable d'appeler SwappyGL_init()
le plus tôt possible pendant la séquence de démarrage du moteur et d'appeler SwappyGL_destroy()
lorsque le jeu se ferme. Vous ne devriez pas avoir besoin d'appeler ces méthodes à un autre moment.
Configurer l'intervalle d'échange et la cadence d'actualisation
Utilisez les fonctions suivantes pour configurer une instance d'Android Frame Pacing :
void SwappyGL_setSwapIntervalNS(uint64_t swap_ns);
void SwappyGL_setFenceTimeoutNS(uint64_t fence_timeout_ns);
void SwappyGL_setUseAffinity(bool tf);
Lorsque vous appelez SwappyGL_setSwapIntervalNS()
, indiquez la durée pendant laquelle une image doit être présentée. Dans la plupart des cas, vous pouvez utiliser l'une des constantes suivantes : SWAPPY_SWAP_60FPS
, SWAPPY_SWAP_30FPS
ou SWAPPY_SWAP_20FPS
.
En général, vous devez appeler ces méthodes directement après un appel à SwappyGL_init()
. Cependant, vous devrez peut-être aussi appeler ces méthodes à d'autres moments pendant l'exécution de votre jeu.
Définir la fenêtre ANativeWindow
Swappy a besoin du handle de ANativeWindow
pour effectuer une opération spécifique sur ANativeWindow
, telle que l'appel de ANativeWindow_setFrameRate()
.
Appelez SwappyGL_setWindow()
lorsque votre surface d'affichage Android a changé et que vous avez un nouveau handle ANativeWindow
(voir l'exemple de Bouncyball).
Modes automatiques
Android Frame Pacing ajuste la durée d'échange et le mode du pipeline en fonction de la durée moyenne des frames précédents. Vous pouvez contrôler ce comportement à l'aide des fonctions suivantes :
void SwappyGL_setAutoSwapInterval(bool enabled);
void SwappyGL_setMaxAutoSwapIntervalNS(uint64_t max_swap_ns);
void SwappyGL_setAutoPipelineMode(bool enabled);
Effectuer un échange au niveau de l'image
Pour chaque rendu d'image, appelez bool SwappyGL_swap(EGLDisplay display, EGLSurface surface)
.
Cette méthode encapsule la méthode eglSwapBuffers()
à partir d'OpenGL ES. Vous devez donc remplacer toutes les instances de eglSwapBuffers()
dans votre jeu par SwappyGL_swap()
.
Fonctions utilitaires
La méthode suivante vérifie si Android Frame Pacing est activé :
Il est possible qu'une instance d'Android Frame Pacing ne puisse pas s'initialiser pour l'une des raisons suivantes :
- Les fonctions EGL nécessaires sont manquantes sur l'appareil.
- Le système a défini la propriété
swappy.disable
.
Dans les deux cas, SwappyGL_isEnabled()
renvoie false
. Il est donc préférable d'opter pour une autre stratégie de frame pacing.