【问题标题】:How to wait for VSYNC in Xlib app?如何在 Xlib 应用程序中等待 VSYNC?
【发布时间】:2015-07-28 10:47:49
【问题描述】:

我正在使用 XWindow Drawable、Pixmap 和 XRender 在屏幕上绘制一些东西。我可以看到有时会有闪烁。有没有办法等待VBLANK?我已经在 Google 上搜索了很多,感觉就像在森林里寻找硬币。

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

【问题讨论】:

  • 您解决了这个问题吗? (很难找到 X 相关技术的文档……)

标签: c++ linux x11 xlib vsync


【解决方案1】:

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

如果您出于任何原因想要在不使用 GLX 的情况下执行此操作,您可以通过 X 双缓冲区扩展 (DBE) 创建双缓冲区并使用 X 同步扩展手动同步以显示。我自己没有这样做,但你应该能够找到你喜欢调用 XSyncListSystemCounters 的东西(在正确初始化之后!):

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

不过,我自己也找不到更多关于艰难道路的信息。祝你好运。

【讨论】:

  • 所以我能够找到一些有关 XSyncListSystemCounters here 的文档。从那我可以破解一个test program,它列出了系统计数器并显示了它们的频率。不幸的是,至少在我的系统上,没有 vsync 计数器。只是一堆毫秒计时器。 :( YMMV
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-24
  • 1970-01-01
  • 1970-01-01
  • 2016-01-30
  • 1970-01-01
相关资源
最近更新 更多