This bounty has ended. Answers to this question are eligible for a +150 reputation bounty. Bounty grace period ends in 10 hours. Learn more。
Jason C想引起更多人对这个问题的注意。
我正在使用XWindow Drawable、Pixmap和XRender在屏幕上绘制一些东西。我可以看到,有时有闪烁。有办法等VBLANK吗?我已经搜了很多东西,感觉就像在森林里找一枚硬币。
不涉及OpenGL。它是Linux(Ubuntu)。
我可以使用(nano)sleep(),但需要知道何时该画画了。
Jason C想引起更多人对这个问题的注意。
我正在使用XWindow Drawable、Pixmap和XRender在屏幕上绘制一些东西。我可以看到,有时有闪烁。有办法等VBLANK吗?我已经搜了很多东西,感觉就像在森林里找一枚硬币。
不涉及OpenGL。它是Linux(Ubuntu)。
我可以使用(nano)sleep(),但需要知道何时该画画了。
最佳答案
我发现到目前为止最简单的解决方案是使用GLX,因为它具有良好的面向同步和双缓冲的高级接口。请注意GLX不是OpenGL,它是一个X扩展。您需要一个虚拟的OpenGL上下文,因为SwapBuffers(出于某种奇怪的原因)需要它,但这就是它。
如果出于任何原因希望在不使用GLX的情况下执行此操作,可以通过X double Buffer Extension(DBE)创建双缓冲区,并使用X Syncronization Extension手动同步到display。我自己没有这样做,但您应该能够找到一些您喜欢的东西,调用XSyncListSystemCounters(在正确初始化之后!):
XSyncListSystemCounters返回指向显示器支持的系统计数器数组的指针
不过,我对这条艰难的道路再也没有什么感觉了。祝你好运。
关于c++ - 如何在Xlib应用程序中等待VSYNC?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58675066/
10-09 13:10