Mit den folgenden Funktionen können Sie Android Frame Pacing mit einem Rendering-Modul verwenden, das auf der OpenGL ES API basiert.
Initialisieren und vernichten
Verwenden Sie die folgenden Funktionen, um eine Instanz der Android-Frame-Taktung zu initialisieren und zu löschen:
Im Allgemeinen sollten Sie SwappyGL_init()
so früh wie möglich während der Startsequenz der Suchmaschine und SwappyGL_destroy()
beim Beenden des Spiels aufrufen. Sie sollten diese Methoden zu keinem anderen Zeitpunkt aufrufen müssen.
Auslagerungsintervall und Aktualisierungszeitraum konfigurieren
Verwenden Sie die folgenden Funktionen, um eine Android Frame Pacing-Instanz zu konfigurieren:
void SwappyGL_setSwapIntervalNS(uint64_t swap_ns);
void SwappyGL_setFenceTimeoutNS(uint64_t fence_timeout_ns);
void SwappyGL_setUseAffinity(bool tf);
Wenn Sie SwappyGL_setSwapIntervalNS()
aufrufen, übergeben Sie die Dauer, während der 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 dem 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 ANativeWindow
, um ANativeWindow
-spezifische Vorgänge wie das Aufrufen von ANativeWindow_setFrameRate()
auszuführen.
Rufe SwappyGL_setWindow()
auf, wenn sich deine Android-Anzeigeoberfläche geändert hat und du einen neuen ANativeWindow
-Alias hast. Ein Beispiel findest du im Bouncyball-Beispiel.
Automatische Modi
Die Android Frame Pacing passt die Auslagerungsdauer und den Pipelinemodus basierend auf der durchschnittlichen Dauer vorheriger 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);
Austausch pro Frame durchführen
Rufen Sie in jedem Rendering-Frame bool SwappyGL_swap(EGLDisplay display, EGLSurface surface)
auf.
Diese Methode umschließt die Methode eglSwapBuffers()
von Open GL ES. Sie sollten daher alle Instanzen von eglSwapBuffers()
in Ihrem Spiel durch SwappyGL_swap()
ersetzen.
Dienstfunktionen
Mit der folgenden Methode wird geprüft, ob die Android Frame Pacing aktiviert ist:
Es kann sein, dass eine Instanz von Android Frame Pacing sich aus einem der folgenden Gründe nicht selbst initialisieren kann:
- Auf dem Gerät fehlen die erforderlichen EGL-Funktionen.
- Das System hat die Eigenschaft
swappy.disable
festgelegt.
In beiden Fällen gibt SwappyGL_isEnabled()
false
zurück. Es empfiehlt sich daher, eine alternative Frame-Pacing-Strategie zu implementieren.