什么负责 Linux 上的字体渲染?



如果我的问题有点模糊,我很抱歉。 我试图了解在哪里寻找我的问题。 我有一个回归测试套件,可以捕获和比较屏幕。 似乎每当我们进行某种库升级时,回归测试都会失败。 我们的字体设置是相同的。 区别就像显卡升级(驱动程序(,窗口管理器升级或只是第三方库升级(例如Qt库(。 从人类视觉测试来看,字体看起来几乎相同,但如果我进行像素到像素的比较,就会发现快照是不同的。 有没有人知道字体是如何呈现的?

Linux 上的图形渲染是一团糟。虽然Linux和Windows一样古老,但Linux首先尝试复制旧的X11窗口系统。这是世界上最古老的GUI系统之一,它表明 - API非常可怕。结果,大量的库堆叠在 X11 之上,使其具有不同程度的兼容性。

更糟糕的是,X11不仅仅是一个单一的实现,还有竞争的 X11 实现。Linux主要使用XFree86,后来成为Xorg。由于这还不够令人困惑,最近的开发增加了许多 X11 的替代方案,它们支持与 X11 的向后兼容接口。X11 之上的一些 GUI 库知道这些新库,现在可以使用新接口。

所以,你基本上有一个非常脆弱的系统,任何具有良好编程模型的库的基础都不稳定。难怪更改任何部分都可能突然导致重新渲染,甚至可能选择全新的渲染路径。

Windows好一点,但它也很旧,并且有一些竞争的GUI库。它更好的原因可能是三重的:有一个单一的一方控制所有接口(Microsoft(,他们从一开始就意识到糟糕的X11设计(避免了初学者的错误(,Microsoft有更多的资源可以花。

但是,Linux和Windows都必须发展以支持Unicode及其带来的更大字体,24位颜色,高DPI屏幕,具有亚像素分辨率的LCD屏幕,加速GPU等。而且两者都很难转储旧接口。

最新更新