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

时间:2015-05-16 15:46:41

标签: x11 xlib vsync

我使用XWindow Drawable,Pixmap和XRender在屏幕上绘图。我可以看到有时闪烁。有没有办法等待VBLANK?我已经google了很多,感觉就像在森林里寻找一枚硬币。

没有涉及OpenGL。它是Linux(Ubuntu)。 我可以使用(纳米)睡眠(),但需要知道什么时候绘制的时间已经到了。

1 个答案:

答案 0 :(得分:3)

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

如果您因任何原因不想使用GLX,可以通过X Double Buffer Extension(DBE)创建双缓冲区并使用X Syncronization Extension手动同步到显示来实现。我自己没有这样做,但你应该能够找到你喜欢的东西,调用XSyncListSystemCounters(经过适当的初始化!):

  

XSyncListSystemCounters返回指向显示器支持的系统计数器数组的指针

虽然不能找到更多关于艰难的方法。祝你好运。