Dodawanie funkcji tempa klatek

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:

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:

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.