Aby używać funkcji Android Frame Pacing z silnikiem renderowania opartym na interfejsie OpenGL ES API, użyj tych funkcji.
Inicjowanie i usuwanie
Aby zainicjować i zakończyć działanie instancji Android Frame Pacing, użyj odpowiednio tych funkcji:
Ogólnie rzecz biorąc, wywołuj funkcję SwappyGL_init()
jak najwcześniej w sekwencji uruchamiania silnika, a funkcję SwappyGL_destroy()
– gdy gra jest zamykana. Nie musisz wywoływać tych metod w innych sytuacjach.
Konfigurowanie interwału zamiany i okresu 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);
Podczas wywoływania funkcji SwappyGL_setSwapIntervalNS()
przekaż czas, przez jaki klatka
ma być wyświetlana. W większości przypadków możesz użyć 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ływanie tych metod również w innych momentach podczas działania gry.
Ustawianie ANativeWindow
Swappy potrzebuje uchwytu ANativeWindow
, aby wykonać operację
ANativeWindow
, np. wywołać funkcję
ANativeWindow_setFrameRate()
.
Wywołaj funkcję Call
SwappyGL_setWindow()
gdy zmieni się powierzchnia wyświetlania na Androidzie i masz nowy uchwyt ANativeWindow
(przykład znajdziesz w próbce Bouncyball).
Tryby automatyczne
Funkcja synchronizacji klatek na Androidzie dostosowuje czas wymiany 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);
Wykonywanie zamiany klatek
W każdej klatce renderowania wywołaj funkcję
bool SwappyGL_swap(EGLDisplay display, EGLSurface surface)
.
Ta metoda opakowuje metodę eglSwapBuffers()
z Open GL ES, więc w grze należy zastąpić wszystkie wystąpienia eglSwapBuffers()
metodą SwappyGL_swap()
.
Funkcje narzędziowe
Poniższa metoda sprawdza, czy funkcja Android Frame Pacing jest włączona:
Instancja Android Frame Pacing może nie być w stanie się zainicjować z tych powodów:
- Na urządzeniu nie ma niezbędnych funkcji EGL.
- System ustawił właściwość
swappy.disable
.
W obu tych sytuacjach funkcja SwappyGL_isEnabled()
zwraca wartość false
i warto wdrożyć alternatywną strategię synchronizacji klatek.