从非GUI应用程序捕获屏幕之前,等待vsync

时间:2019-11-02 20:35:18

标签: linux qt qt5 x11 vsync

我有一个运行在Linux(带有twm的Ubuntu)上的Qt5(次要版本不同)应用程序,该应用程序使用QScreen::grabWindow(0)(基本上)将屏幕捕获为视频。

该屏幕上运行的应用程序(信息亭式全屏单应用程序设置)目前存在图形错误,无法立即修复,因为它似乎正在将内容渲染到屏幕上。 GL是无意中的前缓冲区,或者不使用双缓冲区(或其他东西;但这是我的工作原理)。结果,随机定时的屏幕捕获经常捕获部分绘制的用户界面。在此监视器上,用肉眼看不到这些视觉伪影是真的。至少我个人看不到任何闪烁。

由于该应用程序的行为,我确实知道UI在垂直刷新开始之前就已完全绘制。

因此,作为一种解决方法,我想尝试将屏幕抓取的时间设置为垂直刷新间隔。

请注意,我的屏幕抓取应用程序与我刚才描述的越野车应用程序不同相同,它是一个独立的后台进程,没有自己的GUI。

为此:是否有使用Qt或本机Xlib调用的方法来暂停并等待直到垂直刷新开始?

我知道这可能不是成功的解决方法,但是如果可以的话,我想尝试一下。我当前的解决方法是涉及一些相当复杂的帧过滤,以尝试检测和消除此特定应用程序中的UI闪烁,但是出于各种原因,我想放弃这种方法。

我发现的有关同步到刷新间隔的所有信息均假定您是从已经在屏幕上绘制的应用程序执行的,因此您可以依靠GL缓冲区交换等进行计时。不幸的是,我的应用程序没有GUI,也没有任何窗口或图形资源。

0 个答案:

没有答案