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.disablefestgelegt.
In beiden Fällen gibt SwappyGL_isEnabled() den Wert false zurück. Es empfiehlt sich, eine alternative Frame-Pacing-Strategie zu implementieren.