我正在使用 XWindow Drawable、Pixmap 和 XRender 在屏幕上绘制一些东西。我可以看到有时会有闪烁。有没有办法等待VBLANK?我已经用谷歌搜索了很多,感觉就像在森林里寻找硬币。
不涉及 OpenGL。它是Linux(Ubuntu)。我可以使用 (nano)sleep(),但需要知道何时开始绘制。
我发现迄今为止最简单的解决方案是使用 GLX,因为它具有出色的同步和双缓冲高级接口。请注意 GLX 不是 OpenGL,它是 X 扩展。您需要一个虚拟的 OpenGL 上下文,因为 SwapBuffers(出于某种奇怪的原因)需要它,但仅此而已。
如果您出于任何原因想要在不使用 GLX 的情况下执行此操作,您可以通过 X 双缓冲区扩展 (DBE) 创建双缓冲区并使用 X 同步扩展手动同步以显示。我自己没有这样做,但你应该能够找到你喜欢调用 XSyncListSystemCounters 的东西(在正确初始化之后!):
XSyncListSystemCounters 返回指向显示器支持的系统计数器数组的指针
不过,我自己找不到更多关于艰难道路的信息。祝你好运。