十多年来,我使用了许多 Linux 变体(主要是 Debian 衍生版本)。我还没有看到令人满意地解决的一个问题是水平撕裂问题,或者说垂直同步没有得到正确实施。
我这么说是因为我在 4 台不同的计算机上使用了 5 个不同的发行版,并配有各种显示器和 Nvidia/AMD/ATI/Intel 显卡;每次,即使是轻微的运动,也会出现视频撕裂的问题。
这是一个大问题,特别是因为即使是 Windows XP 在现代硬件上也不存在这些问题。如果有人打算使用 Linux 来做任何事,为什么他们会希望在做任何非 CLI 的事情时不断出现缺陷呢?
我猜想要么很少有开发人员知道这个问题,要么足够关心解决它。我已经尝试了几乎所有的合成器,通常他们能做的最好的事情就是最小化问题,而不是消除它。难道不应该像与显示器的刷新率同步那么简单吗? OSS 社区中是否存在某种政治因素阻止任何人提交修复此问题的代码?
过去,每当我就这个问题寻求帮助时,它要么被视为一种边缘情况(我发现很难相信它会被考虑到我重复这个问题的次数),要么我得到了潜在的解决方案至多减少撕裂。
答案1
这都是由于 X 服务器已经过时,不适合当今的图形硬件,并且基本上所有直接视频卡通信都是作为古老臃肿核心的扩展(“补丁”)来完成的。 X 服务器不提供用户渲染窗口和显示窗口的屏幕之间的内置同步方法,因此内容会在渲染过程中发生变化。这是 X 服务器的众所周知的问题之一(它有许多服务器功能的完整模型并且已经过时 - 子窗口中的事件处理、有关窗口的元数据、用于直接绘制的图形基元...)。小部件工具包大多想掩盖这一切,但撕裂仍然是一个问题,因为没有机制来处理这个问题。当您有多张卡需要不同的驱动程序时,就会出现其他问题,而且最重要的是,opengl 库对 xlib 具有硬连线依赖关系,因此您无法在不通过 X 的情况下真正独立使用它。
Wayland 不太热情地试图取代 X,但它的核心支持迂腐的垂直同步同步,并宣称每个帧都完全完美。
如果您快速谷歌“wayland 视频撕裂”,您会找到有关所有内容的更多信息。
答案2
答案3
屏幕撕裂的出现主要有两个原因:驱动程序尚不存在,以及与某些窗口管理器缺乏垂直同步。
至于驱动程序,免费和专有驱动程序都支持自由撕裂合成(nvidia 和 amd 均支持)。请注意,例如在催化剂(fglrx
)中启用无撕裂桌面可能会导致丢帧和滞后,因此通常默认情况下禁用它。对于开放驱动程序,默认情况下应启用垂直同步。因此,屏幕撕裂问题可以通过尝试不同的驱动程序并配置它们来解决。
至于窗口管理器,众所周知,Openbox、Awesome 和其他轻量级 wms 不支持撕裂。 XFCE(具体来说是 xfwm)已在最近的版本中修复了该问题,4.11/12 现在具有 Vsync。主要桌面环境也没有撕裂问题,包括 GNOME、KDE、Unity 和 Cinnamon。
如果您仍然遇到屏幕撕裂的情况,您可以选择尝试其他合成管理器,例如 Compton 或 Kwin。 Kwin 是 KDE 的窗口管理器,我有在 XFCE 中使用 kwin 的经验,当它不支持 vsync 时,它工作得非常好。
所以这里的解决方案是实验,在 driver/wm 的一种组合中被破坏的东西可以在另一种组合中工作。我相信情况很快就会改善,因为开源驱动程序变得更加先进,并且切换到 wayland 可能会解决 Xorg 的老问题。
答案4
解决方案在这里:Linux Mint 17.3 MATE 现在附带 Compton。
只需转到Desktop Settings
-> Windows
->Window Manager
并选择Metacity + Compton
。就是这样。
我有 AMD 显卡,它可以开箱即用,适用于开源驱动程序。
对于专有的 AMD 驱动程序,当 HTML5 视频最大化至全屏时,您可能会看到蓝色充满整个屏幕。要解决此问题,请创建chmod +x
以下脚本:
#!/bin/bash
killall compton 2> /dev/null
compton -b --unredir-if-possible
每当您重新启动系统时都运行它,但不要尝试将其添加到Startup Applications
- 它可能会由于某种原因而中断启动。