适用于 OpenGL 的 Swappy

Swappy 的 OpenGL 部件。

摘要

函数

SwappyGL_destroy()
void
销毁资源并停止 Swappy 创建的所有线程。
SwappyGL_getFenceTimeoutNS()
uint64_t
获取栅栏超时值(以纳秒为单位)。
SwappyGL_getRefreshPeriodNanos()
uint64_t
获取刷新周期值(以纳秒为单位)。
SwappyGL_getSwapIntervalNS()
uint64_t
获取交换间隔值(以纳秒为单位)。
SwappyGL_getUseAffinity()
bool
SwappyGL_init(JNIEnv *env, jobject jactivity)
bool
初始化 Swappy,通过 JNI 从显示子系统获取所需的 Android 参数。
SwappyGL_init_internal(JNIEnv *env, jobject jactivity)
bool
SwappyGL_isEnabled()
bool
检查 Swappy 是否已成功初始化。
SwappyGL_setFenceTimeoutNS(uint64_t fence_timeout_ns)
void
为存在驱动程序故障的设备设置栅栏超时参数。
SwappyGL_setSwapIntervalNS(uint64_t swap_ns)
void
覆盖交换间隔。
SwappyGL_setUseAffinity(bool tf)
void
SwappyGL_setWindow(ANativeWindow *window)
bool
告诉 Swappy 调用 ANativeWindow_* API 时使用哪个 ANativeWindow。
SwappyGL_swap(EGLDisplay display, EGLSurface surface)
bool
以此替换对 eglSwapBuffers 的调用。

函数

SwappyGL_destroy

void SwappyGL_destroy()

销毁资源并停止 Swappy 创建的所有线程。

另请参阅SwappyGL_init

SwappyGL_getFenceTimeoutNS

uint64_t SwappyGL_getFenceTimeoutNS()

获取栅栏超时值(以纳秒为单位)。

SwappyGL_getRefreshPeriodNanos

uint64_t SwappyGL_getRefreshPeriodNanos()

获取刷新周期值(以纳秒为单位)。

SwappyGL_getSwapIntervalNS

uint64_t SwappyGL_getSwapIntervalNS()

获取交换间隔值(以纳秒为单位)。

SwappyGL_getUseAffinity

bool SwappyGL_getUseAffinity()

SwappyGL_init

bool SwappyGL_init(
  JNIEnv *env,
  jobject jactivity
)

初始化 Swappy,通过 JNI 从显示子系统获取所需的 Android 参数。

另请参阅SwappyGL_destroy

详细信息
参数
env
使用 Swappy 的 JNI 环境
jactivity
使用 Swappy 的 Activity
返回值
如果 Swappy 未能初始化则为 false。

SwappyGL_init_internal

bool SwappyGL_init_internal(
  JNIEnv *env,
  jobject jactivity
)

SwappyGL_isEnabled

bool SwappyGL_isEnabled()

检查 Swappy 是否已成功初始化。

详细信息
返回值
如果 swappy.disable 系统属性不是 false 或 Swappy 无法使用所需的 OpenGL 扩展,则为 false。

SwappyGL_setFenceTimeoutNS

void SwappyGL_setFenceTimeoutNS(
  uint64_t fence_timeout_ns
)

为存在驱动程序故障的设备设置栅栏超时参数。

其默认值为 50,000,000ns (50ms)。

SwappyGL_setSwapIntervalNS

void SwappyGL_setSwapIntervalNS(
  uint64_t swap_ns
)

覆盖交换间隔。

默认情况下,Swappy 会基于实际帧渲染时间调整交换间隔。

如果应用想要覆盖由 Swappy 计算的交换间隔,它可以调用此函数:

  • 这会暂时覆盖 Swappy 的帧计时,但除非调用 SwappyGL_setAutoSwapInterval(false),否则计时将动态更新,因此交换间隔可能会发生变化。
  • 这会设置运行的最小间隔。例如,SwappyGL_setSwapIntervalNS(SWAPPY_SWAP_30FPS) 不会允许 Swappy 更快速地交换,即使自动模式确定它可以这样。但是,如果自动模式处于开启状态,可能会变慢。

详细信息
参数
swap_ns
新的交换间隔值(以纳秒为单位)。

SwappyGL_setUseAffinity

void SwappyGL_setUseAffinity(
  bool tf
)

SwappyGL_setWindow

bool SwappyGL_setWindow(
  ANativeWindow *window
)

告诉 Swappy 调用 ANativeWindow_* API 时使用哪个 ANativeWindow。

详细信息
参数
window
用于创建 EGLSurface 的 ANativeWindow

SwappyGL_swap

bool SwappyGL_swap(
  EGLDisplay display,
  EGLSurface surface
)

以此替换对 eglSwapBuffers 的调用。

Swappy 将等待 GPU 处理上一帧的缓冲区,然后才实际调用 eglSwapBuffers。