使用以下函数将Android帧速率与基于OpenGL ES API的渲染引擎一起使用。
初始化和销毁
使用以下函数分别初始化和销毁Android帧速率实例
一般来说,您应该在引擎启动序列的早期尽可能早地调用SwappyGL_init()
,并在游戏退出时调用SwappyGL_destroy()
。您不需要在任何其他时间调用这些方法。
配置交换间隔和刷新周期
使用以下函数配置Android帧速率实例
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帧速率根据先前帧的平均持续时间调整交换持续时间和管道模式。您可以使用以下函数控制此行为
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帧速率是否已启用
Android帧速率实例可能无法自行初始化,原因如下:
- 设备上缺少必要的EGL函数。
- 系统已设置
swappy.disable
属性。
在这两种情况下,SwappyGL_isEnabled()
返回false
,最好实现替代的帧速率策略。