linux - 什么负责在Linux上进行字体渲染?
问题描述
如果我的问题有点含糊,我很抱歉。我试图了解在哪里寻找我的问题。我有一个回归测试套件,可以捕获和比较屏幕。似乎每当我们进行某种库升级时,回归测试都会失败。我们的字体设置是一样的。区别就像显卡升级(驱动程序)、窗口管理器升级或只是第三方库升级(例如 Qt 库)。从人类视觉测试来看,字体看起来几乎相同,但如果我进行逐像素比较,则会显示快照不同。有谁知道字体是如何呈现的?
解决方案
Linux 上的图形渲染是一团糟。虽然 Linux 与 Windows 一样古老,但 Linux 首先尝试复制旧的 X11 窗口系统。这是世界上最古老的 GUI 系统之一,它表明 - API 非常可怕。因此,在 X11 之上堆叠了大量的库,以使其能够工作,并具有不同程度的兼容性。
更糟糕的是,X11 不仅仅是一个单一的实现,还有相互竞争的 X11 实现。Linux 主要使用 XFree86,后来成为 Xorg。由于这还不够令人困惑,最近的发展为 X11 添加了许多替代品,它们支持 X11 的向后兼容接口。X11 之上的一些 GUI 库知道这些新库,并且现在可能使用新接口。
因此,您基本上拥有一个非常脆弱的系统,并且任何具有良好编程模型的库都具有摇摇欲坠的基础。难怪更改任何部分可能会突然导致重新渲染,甚至可能选择全新的渲染路径。
Windows 稍微好一点,但它也很旧并且有一些竞争的 GUI 库。它更好的原因可能是三方面的:有一个人控制着所有的界面(微软),他们从一开始就意识到了糟糕的 X11 设计(避免了初学者的错误),而且微软有更多的资源可以使用。
但是,Linux 和 Windows 都必须发展以支持 Unicode 及其带来的更大字体、24 位颜色、高 DPI 屏幕、具有亚像素分辨率的 LCD 屏幕、加速 GPU 等。而且两者都很难抛弃旧的接口。
推荐阅读
- arrays - 根据元素唯一性和其他条件删除 np 数组行
- r - R gt_table 调整行高
- elasticsearch - 如何为多节点设置弹性搜索快照存储库?
- ansible - 如何在 Ansible 中嵌套 with_filetree?
- swiftui - 在 Picker 标签中使用隐藏 ProgressView 时崩溃
- c# - 在悬停时应用光标样式后丢失以前的组合框项目样式
- reactjs - React:正确使用 useCallback 钩子?
- postgresql - 无法写入 postgres
- r - 当不存在的组合时
- haskell - Stephen Diehl 的“使用 Haskell 和 LLVM 实现 JIT 编译语言”在 MacOS 上安装失败