Użyj tych funkcji, aby używać Android Frame Pacing z silnikiem renderowania opartym na interfejsie OpenGL ES API.
Inicjowanie i niszczenie
Aby odpowiednio zainicjować i zniszczyć instancję AndroidFrame Pacing, użyj tych funkcji:
Ogólnie polecenie SwappyGL_init()
powinno się wywoływać jak najwcześniej podczas sekwencji uruchamiania silnika i wywoływać SwappyGL_destroy()
przy zamykaniu gry. Nie powinno być potrzeby wywoływać tych metod w innym momencie.
Skonfiguruj interwał wymiany i okres odświeżania
Aby skonfigurować instancję Android Frame Pacing, użyj tych funkcji:
void SwappyGL_setSwapIntervalNS(uint64_t swap_ns);
void SwappyGL_setFenceTimeoutNS(uint64_t fence_timeout_ns);
void SwappyGL_setUseAffinity(bool tf);
Wywołując metodę SwappyGL_setSwapIntervalNS()
, podaj czas, przez jaki klatka ma być wyświetlana. W większości przypadków możesz używać jednej z tych stałych: SWAPPY_SWAP_60FPS
, SWAPPY_SWAP_30FPS
lub SWAPPY_SWAP_20FPS
.
Ogólnie rzecz biorąc, te metody należy wywoływać bezpośrednio po wywołaniu funkcji SwappyGL_init()
. Może być jednak konieczne wywołanie tych metod w innych momentach podczas uruchamiania gry.
Ustawianie interfejsu ANativeWindow
Funkcja Zamień, potrzebuje uchwytu ANativeWindow
, aby wykonywać działania charakterystyczne dla ANativeWindow
, np. wywoływać metodę ANativeWindow_setFrameRate()
.
Wywołaj metodę SwappyGL_setWindow()
, gdy powierzchnia wyświetlacza w Androidzie ulegnie zmianie i będziesz mieć nowy nick ANativeWindow
(przykład znajdziesz w przykładzie z piłką do gry w bouncyball).
Tryby automatyczne
Android Frame Pacing dostosowuje czas trwania zamiany i tryb potoku na podstawie średniego czasu trwania poprzednich klatek. Możesz kontrolować to zachowanie za pomocą tych funkcji:
void SwappyGL_setAutoSwapInterval(bool enabled);
void SwappyGL_setMaxAutoSwapIntervalNS(uint64_t max_swap_ns);
void SwappyGL_setAutoPipelineMode(bool enabled);
Zamiana klatek
Podczas każdej ramki renderowania wywołaj metodę bool SwappyGL_swap(EGLDisplay display, EGLSurface surface)
.
Ta metoda pakuje metodę eglSwapBuffers()
z Open GL ES, dlatego należy zastąpić wszystkie wystąpienia eglSwapBuffers()
w grze obiektem SwappyGL_swap()
.
Funkcje użytkowe
Ta metoda pozwala sprawdzić, czy funkcja Android Frame Pacing jest włączona:
Instancja Android Frame Pacing może nie zainicjować się samodzielnie z tych powodów:
- Na urządzeniu brakuje niezbędnych funkcji EGL.
- System ustawił właściwość
swappy.disable
.
W każdej z tych sytuacji SwappyGL_isEnabled()
zwraca wartość false
i zaleca się wdrożenie alternatywnej strategii tempa klatek.