使用下列函式,即可針對以 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
Swappy 需要處理 ANativeWindow
的控制代碼,才能執行 ANativeWindow
的特定作業,例如呼叫 ANativeWindow_setFrameRate()
。在 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
,因此建議您執行替代影格使用速度的策略。