如何在Xlib应用程序中等待VSYNC

How to wait for VSYNC in Xlib app?

本文关键字:等待 VSYNC 应用程序 Xlib      更新时间:2023-10-16

我正在使用XWindow Drawable, Pixmap和XRender在屏幕上绘制一些东西。我能看到有时会有闪光。有办法等待VBLANK吗?我已经在谷歌上搜索了很多次,感觉就像在森林里找硬币。

没有涉及OpenGL。它是Linux (Ubuntu)。我可以使用(nano)sleep(),但是需要知道什么时候开始绘制

我发现到目前为止最简单的解决方案是使用GLX,因为它具有面向同步和双缓冲的优秀高级接口。请注意GLX不是OpenGL,它是一个X扩展。你需要一个虚拟的OpenGL上下文作为SwapBuffers(出于一些奇怪的原因)的要求,但这就是它。

如果您出于任何原因想要在没有GLX的情况下这样做,您可以通过X双缓冲区扩展(DBE)创建双缓冲区,并使用X同步扩展手动同步显示。您可以通过调用XSyncListSystemCounters找到一些有用的东西,尽管它还需要通过test:

来确认。

XSyncListSystemCounters返回一个指针,该指针指向显示器支持的系统计数器数组。