eglSwapInterval(0)会导致屏幕撕裂吗?

时间:2015-08-29 02:53:26

标签: egl

当我在这些文档(https://www.khronos.org/registry/egl/sdk/docs/man/html/eglSwapInterval.xhtmlhttps://www.opengl.org/wiki/Swap_Interval)中阅读eglSwapInterval()api时。 当我使用零值调用eglSwapInterval()时,eglSwapBuffers()调用将在不等待vblank的情况下进行交换和前缓冲。 这意味着缓冲区交换可以随时发生。 那么,这会导致屏幕撕裂吗?

在这种情况下,vsync脉冲期间是否也阻止了缓冲区交换?

1 个答案:

答案 0 :(得分:0)

是。零交换间隔指定您要立即交换,而不等待vsync。如果这是您的EGL实现实际执行的操作,则会导致撕裂。来自EGL spec

  

如果 interval 设置为0,则缓冲区交换不会同步到视频帧,并且只要当前上下文的所有渲染命令都未完成,就会发生交换。在存储之前,间隔被静默地钳制到最小和最大实现相关值;这些值分别由EGLConfig属性EGL_MIN_SWAP_INTERVALEGL_MAX_SWAP_INTERVAL定义。

正如规范所暗示的那样,你可能实际上并没有获得零交换间隔(如果你没有,你就不会被撕裂)。这取决于你的EGL实现是否支持零交换间隔(你可以查询配置以找出),以及底层窗口系统是否能够支持它。