Ajouter des fonctions de frame pacing

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 :

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 :

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.