• 1162阅读
  • 6回复

[提问]Linux 平台的 QT 程序在 X11 Intel modesetting 环境下屏幕撕裂,如何解决? [复制链接]

上一主题 下一主题
离线offline
 

只看楼主 倒序阅读 楼主  发表于: 2022-11-19


  我的 Linux 使用 X11 图形系统, Intel 核芯显卡。所有的 QT4 和 QT5 程序都会出现屏幕撕裂现象,严重影响使用。但假如不使用 Xorg 的 modesetting 驱动,而是采用陈旧的 intel DDX 驱动,就不会出现撕裂。然而 intel DDX 驱动已经处于废弃状态, Mesa 基础等软件都不再关心该驱动。如果硬要使用 intel DDX 驱动,那么用不了 GPU 加速。

  可以参考这里:

https://wiki.archlinux.org/title/intel_graphics#Installation

Note: Some (Debian & Ubuntu, Fedora, KDE) recommend not installing the xf86-video-intel driver, and instead falling back on the modesetting driver for Gen4 and newer GPUs (GMA 3000 from 2006 and newer). See [1], [2], Xorg#Installation, and modesetting(4). However, the modesetting driver can cause problems such as screen tearing and mouse jittering on XFCE, artifacts when switching virtual desktops in Chromium, and vsync jitter/video stutter in mpv.


屏幕撕裂问题非常普遍,对于 QT 程序,有无特定的解决办法?





离线20091001753

只看该作者 1楼 发表于: 2022-11-19
试试 Qt 6 ?
(づ ̄ 3 ̄)づ
离线offline

只看该作者 2楼 发表于: 2022-11-19
回 20091001753 的帖子
20091001753:试试 Qt 6 ? (2022-11-19 13:08) 

谢谢回复,暂时没有升级到 QT6 的计划。并且我觉得既然 QT4, QT5 都有问题,那么 QT6 也无法幸免。

因为这是底层机制的问题,刚好 QT 触发了这个问题。
离线fsu0413

只看该作者 3楼 发表于: 2022-11-20
如果确定是驱动程序的问题,如果:
* 环境是定制的,去找硬件厂商寻求技术支持
* 环境不是定制的,那么这个问题就是范围外的了,就算有解决方法也不是咱们需要提出的
离线offline

只看该作者 4楼 发表于: 2022-11-21
回 fsu0413 的帖子
fsu0413:如果确定是驱动程序的问题,如果:
* 环境是定制的,去找硬件厂商寻求技术支持
* 环境不是定制的,那么这个问题就是范围外的了,就算有解决方法也不是咱们需要提出的 (2022-11-20 09:06) 

Intel 显卡的 X11 modesetting 驱动容易出现屏幕撕裂问题,这已经是许多用户都遇到过的现象。似乎暂时没办法从驱动层解决,因此只能想办法让应用程序不要触发到这个问题。比如 Linux 下的 GTK 程序就不会出现屏幕撕裂,火狐 Firefox 浏览器也容易出现屏幕撕裂,但可以通过修改火狐的配置选项避免。

不知道 QT 是否可以修改某些配置文件或者环境变量避免这个问题,我觉得应该不是只有我才遇到过这种现象。


离线fsu0413

只看该作者 5楼 发表于: 2022-11-23
回 offline 的帖子
offline:
火狐 Firefox 浏览器也容易出现屏幕撕裂,但可以通过修改火狐的配置选项避免。
.......


火狐的配置选项应该就是“启用硬件加速”吧。。。那个就是GPU渲染,关了就不用GPU渲染了
所以现在看来解决方案还是不用GPU。。。。
离线offline

只看该作者 6楼 发表于: 2022-11-23
回 fsu0413 的帖子
fsu0413:火狐的配置选项应该就是“启用硬件加速”吧。。。那个就是GPU渲染,关了就不用GPU渲染了
所以现在看来解决方案还是不用GPU。。。。
 (2022-11-23 08:36) 

现在找到原因了,是因为我用的不是那种标准桌面系统,而是简单的窗口管理器。简单的窗口管理器不带 Compositor 功能,偏偏 QT 需要该功能。装上 Compositor 就好了,一切正常了。

谢谢您的帮助!
快速回复
限100 字节
 
上一个 下一个