Verwenden Sie die folgenden Funktionen, um Android Frame Pacing mit einer Rendering-Engine zu verwenden, die auf der OpenGL ES API basiert.
Initialisieren und zerstören
Verwenden Sie die folgenden Funktionen, um eine Instanz von Android Frame Pacing zu initialisieren bzw. zu zerstören:
Im Allgemeinen sollten Sie SwappyGL_init()
so früh wie möglich während der Startsequenz der Engine aufrufen und SwappyGL_destroy()
, wenn das Spiel beendet wird. Sie sollten diese Methoden zu keinem anderen Zeitpunkt aufrufen müssen.
Swap-Intervall und Aktualisierungszeitraum konfigurieren
Verwenden Sie die folgenden Funktionen, um eine Instanz von Android Frame Pacing zu konfigurieren:
void SwappyGL_setSwapIntervalNS(uint64_t swap_ns);
void SwappyGL_setFenceTimeoutNS(uint64_t fence_timeout_ns);
void SwappyGL_setUseAffinity(bool tf);
Übergeben Sie beim Aufrufen von SwappyGL_setSwapIntervalNS()
die Dauer, für die ein Frame präsentiert werden soll. In den meisten Fällen können Sie eine der folgenden Konstanten verwenden: SWAPPY_SWAP_60FPS
, SWAPPY_SWAP_30FPS
oder SWAPPY_SWAP_20FPS
.
Im Allgemeinen sollten Sie diese Methoden direkt nach einem Aufruf von SwappyGL_init()
aufrufen. Möglicherweise müssen Sie diese Methoden jedoch auch zu anderen Zeiten während der Ausführung Ihres Spiels aufrufen.
ANativeWindow festlegen
Swappy benötigt den Handle von ANativeWindow
, um ANativeWindow
-spezifische Vorgänge auszuführen, z. B. ANativeWindow_setFrameRate()
aufzurufen.
Rufen Sie SwappyGL_setWindow()
auf, wenn sich die Android-Anzeigeoberfläche geändert hat und Sie ein neues ANativeWindow
-Handle haben (ein Beispiel finden Sie im Bouncyball-Beispiel).
Automatikmodi
Android Frame Pacing passt die Swap-Dauer und den Pipeline-Modus basierend auf der durchschnittlichen Dauer der vorherigen Frames an. Sie können dieses Verhalten mit den folgenden Funktionen steuern:
void SwappyGL_setAutoSwapInterval(bool enabled);
void SwappyGL_setMaxAutoSwapIntervalNS(uint64_t max_swap_ns);
void SwappyGL_setAutoPipelineMode(bool enabled);
Swap pro Frame durchführen
Rufen Sie während jedes Rendering-Frames bool SwappyGL_swap(EGLDisplay display, EGLSurface surface)
auf.
Diese Methode umschließt die eglSwapBuffers()
-Methode aus Open GL ES. Sie sollten daher alle Instanzen von eglSwapBuffers()
in Ihrem Spiel durch SwappyGL_swap()
ersetzen.
Hilfsfunktionen
Mit der folgenden Methode wird geprüft, ob Android Frame Pacing aktiviert ist:
Es ist möglich, dass eine Instanz von Android Frame Pacing aus einem der folgenden Gründe nicht initialisiert werden kann:
- Die erforderlichen EGL-Funktionen sind auf dem Gerät nicht vorhanden.
- Das System hat das Attribut
swappy.disable
festgelegt.
In beiden Fällen gibt SwappyGL_isEnabled()
den Wert false
zurück. Es empfiehlt sich, eine alternative Frame-Pacing-Strategie zu implementieren.