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.