OpenGL ES API를 기반으로 한 렌더링 엔진에서 Android Frame Pacing을 사용하려면 다음 함수를 사용합니다.
초기화 및 소멸
Android Frame Pacing 인스턴스를 초기화 및 소멸하려면 각각 다음 함수를 사용합니다.
일반적으로 엔진 시작 시퀀스 중에는 최대한 빨리 SwappyGL_init()
를 호출해야 하며 게임 종료 시에는 SwappyGL_destroy()
를 호출해야 합니다. 다른 때에는 이러한 메서드를 호출할 필요가 없습니다.
스왑 간격 및 새로고침 기간 구성
Android Frame Pacing 인스턴스를 구성하려면 다음 함수를 사용합니다.
void SwappyGL_setSwapIntervalNS(uint64_t swap_ns);
void SwappyGL_setFenceTimeoutNS(uint64_t fence_timeout_ns);
void SwappyGL_setUseAffinity(bool tf);
SwappyGL_setSwapIntervalNS()
호출 시 프레임이 표시되어야 하는 기간을 전달합니다. 대부분의 경우 SWAPPY_SWAP_60FPS
, SWAPPY_SWAP_30FPS
또는 SWAPPY_SWAP_20FPS
상수 중 하나를 사용할 수 있습니다.
일반적으로 SwappyGL_init()
를 호출한 직후에 이러한 메서드를 호출해야 합니다. 그러나 게임을 실행하는 동안 다른 시점에 이러한 메서드를 호출해야 할 수도 있습니다.
ANativeWindow 설정
ANativeWindow_setFrameRate()
호출과 같은 ANativeWindow
관련 작업을 실행하기 위해서는 Swappy에 ANativeWindow
핸들이 필요합니다.
Android 디스플레이 노출 영역이 변경되고 새로운 ANativeWindow
핸들이 있는 경우 SwappyGL_setWindow()
를 호출합니다(예를 보려면 Bouncyball 샘플 참고).
자동 모드
Android Frame Pacing은 이전 프레임의 평균 기간을 기반으로 스왑 기간 및 파이프라인 모드를 조정합니다. 다음 함수를 사용하여 이 동작을 제어할 수 있습니다.
void SwappyGL_setAutoSwapInterval(bool enabled);
void SwappyGL_setMaxAutoSwapIntervalNS(uint64_t max_swap_ns);
void SwappyGL_setAutoPipelineMode(bool enabled);
프레임당 스왑 실행
각 렌더링 프레임 중에 bool SwappyGL_swap(EGLDisplay display, EGLSurface surface)
을 호출합니다.
이 메서드는 Open GL ES의 eglSwapBuffers()
메서드를 래핑하므로 게임의 모든 eglSwapBuffers()
인스턴스를 SwappyGL_swap()
으로 대체해야 합니다.
유틸리티 함수
다음 메서드는 Android Frame Pacing이 사용 설정되었는지 확인합니다.
다음과 같은 이유로 Android Frame Pacing 인스턴스가 자체적으로 초기화되지 않을 수 있습니다.
- 기기에 필요한 EGL 함수가 없습니다.
- 시스템에서
swappy.disable
속성을 설정했습니다.
이러한 상황 중 하나에서 SwappyGL_isEnabled()
는 false
를 반환하므로 대체 프레임 속도 전략을 구현하는 것이 가장 좋습니다.