OpenGL 版 Swappy

Swappy 的 OpenGL 部分。

摘要

函数

SwappyGL_destroy()
void
销毁 Swappy 创建的资源并停止所有线程。
SwappyGL_getFenceTimeoutNS()
uint64_t
获取防护栏超时值(纳秒)。
SwappyGL_getRefreshPeriodNanos()
uint64_t
获取刷新周期值(纳秒)。
SwappyGL_getSupportedRefreshPeriodsNS(uint64_t *out_refreshrates, int allocated_entries)
int
获取此设备支持的刷新周期。
SwappyGL_getSwapIntervalNS()
uint64_t
获取交换间隔值(纳秒)。
SwappyGL_getUseAffinity()
bool
SwappyGL_init(JNIEnv *env, jobject jactivity)
bool
初始化 Swappy,通过 JNI 从显示子系统获取必需的 Android 参数。
SwappyGL_isEnabled()
bool
检查 Swappy 是否已成功初始化。
SwappyGL_setBufferStuffingFixWait(int32_t n_frames)
void
设置在应用缓冲区填充修复之前要等待的错误帧数。
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_getSupportedRefreshPeriodsNS

int SwappyGL_getSupportedRefreshPeriodsNS(
  uint64_t *out_refreshrates,
  int allocated_entries
)

获取此设备支持的刷新周期。

先调用一次并将 out_refreshrates 设置为 nullptr 以获取支持的刷新周期数,然后再调用一次,将该数字作为 allocated_entries 传递,并传递一个大小等于 allocated_entries 的数组,该数组将填充刷新周期。

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_isEnabled

bool SwappyGL_isEnabled()

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

详细信息
返回值
如果 swappy.disable 系统属性不为 false,或者必需的 OpenGL 扩展不适用于 Swappy,则返回 false

SwappyGL_setBufferStuffingFixWait

void SwappyGL_setBufferStuffingFixWait(
  int32_t n_frames
)

设置在应用缓冲区填充修复之前要等待的错误帧数。

设置为零以关闭此功能。默认值 = 0。

SwappyGL_setFenceTimeoutNS

void SwappyGL_setFenceTimeoutNS(
  uint64_t fence_timeout_ns
)

为驱动程序有缺陷的设备设置防护栏超时参数。

其默认值为 50,000,000 纳秒(50 毫秒)。

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。
返回值
成功时为 true,如果 Swappy 未初始化则为 false。

SwappyGL_swap

bool SwappyGL_swap(
  EGLDisplay display,
  EGLSurface surface
)

将对 eglSwapBuffers 的调用替换为本函数。

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

详细信息
返回值
成功时为 true,如果出现以下情况则为 false:1) Swappy 未初始化;或 2) eglSwapBuffers 未返回 EGL_TRUE。在后一种情况下,可以使用 eglGetError 获取错误代码。