添加帧同步函数

借助以下函数将 Android Frame Pacing 与基于 OpenGL ES API 的渲染引擎结合使用。

初始化和销毁

使用以下函数分别初始化和销毁 Android Frame Pacing 的实例:

一般而言,应在引擎启动序列期间尽早调用 SwappyGL_init(),并且应在游戏退出时调用 SwappyGL_destroy()。在其他任何时间,均无需调用这些方法。

配置交换间隔和刷新周期

使用以下函数配置 Android Frame Pacing 的实例:

调用 SwappyGL_setSwapIntervalNS() 时,传入帧应呈现的时长。在大多数情况下,您可以使用以下常量之一:SWAPPY_SWAP_60FPSSWAPPY_SWAP_30FPSSWAPPY_SWAP_20FPS

一般而言,您应在调用 SwappyGL_init() 后直接调用这些方法。但是,您可能还需要在游戏执行的其他时间调用这些方法。

设置 ANativeWindow

Swappy 需要 ANativeWindow 的句柄才能执行特定于 ANativeWindow 的操作,例如调用 ANativeWindow_setFrameRate()。如果您的 Android 显示 Surface 发生变化,并且您有新的 ANativeWindow 句柄,请调用 SwappyGL_setWindow()(请参阅 Bouncyball 示例)。

自动模式

Android Frame Pacing 会基于先前帧的平均时长调整交换时长和流水线模式。您可以使用以下函数控制此行为:

执行每帧交换

在每个渲染帧中,调用 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,您最好实施一个其他帧同步策略。