我正在使用 XWindow Drawable、Pixmap 和 XRender 在屏幕上绘制东西。有时会出现闪烁。有没有一种方法可以等待 VBLANK?我已经在 Google 上搜索了很多次,感觉像在森林中寻找硬币。
这里没有涉及到 OpenGL。它是 Linux (Ubuntu)。 我可以使用 (nano)sleep(),但需要知道何时绘制时间已经到来。
我发现最简单的解决方案是使用GLX,因为它具有出色的高级接口,可以实现同步和双缓冲。请注意,GLX不是OpenGL,它是一个X扩展。你需要一个虚拟的OpenGL上下文,因为SwapBuffers(由于某种奇怪的原因)要求这样做,但仅此而已。
如果由于任何原因你不想使用GLX,你可以通过创建X双缓冲扩展(DBE)来创建双缓冲,并使用X同步扩展手动向显示器同步。你可以尝试调用XSyncListSystemCounters来查找一些有用的东西,尽管这还没有经过测试:
XSyncListSystemCounters返回一个指向显示器支持的系统计数器数组的指针。