#pathfinder #metal

servo/pathfinder_metal

一个简单的跨平台 GPU 抽象库:Metal 后端

1 个不稳定版本

0.5.1 2021 年 5 月 23 日

3,550 个星标 & 87 个关注者

MIT/Apache

115KB
2.5K SLoC

Pathfinder 3

Logo

Pathfinder 3 是一个快速的、实用的基于 GPU 的位图化器,用于字体和矢量图形,它使用 OpenGL 3.0+、OpenGL ES 3.0+、WebGL 2 和 Metal。

请注意,Pathfinder 正在积极开发中,并在多个方面尚不完整。

快速入门

Pathfinder 包含一个实现 HTML 画布 API 部分功能的库。您可以使用它快速将矢量渲染添加到任何 Rust 或 C/C++ 应用程序中。该库可在 crates.io 上找到。有关用法示例,请参阅 examples/canvas_minimal

演示

演示应用程序的源代码可在 demo/native 中找到。只需运行

$ cd demo/native
$ cargo run --release

还有各种小型示例可供您快速入门。例如,您可以像这样运行 canvas_nanovg 示例

$ cd examples/canvas_nanovg
$ cargo run --release

功能

项目具有以下功能

  • Rust 和 C 绑定,便于将其嵌入到您自己的应用程序中,无论编程语言如何。请注意,C 绑定目前尚不完整;欢迎提交拉取请求!

  • 当可用时,基于 GPU 计算的渲染。Pathfinder 有两种渲染模式:基于计算的 D3D11 和基于硬件光栅化的 D3D9。(请注意,这些名称仅是引用硬件级别的便捷方式:项目尚未拥有适当的 Direct3D 后端。)在 D3D11 模式下,Pathfinder 使用计算着色器以实现 CPU 使用率的大幅降低和整体性能的提升,这比内置的 GPU 光栅化硬件可以提供的性能更好。

  • 如果需要,快速设置 CPU,充分利用并行性。如果使用 D3D9 后端,Pathfinder 使用 SIMD 和 Rayon 进行平铺步骤,以尽可能多地从 CPU 中获得并行性。(在 D3D11 后端,这些步骤是在 GPU 上完成的。)CPU 步骤可以与 GPU 管道化,以隐藏其延迟。

  • 快速GPU渲染,即使在小型像素尺寸下。即使在低端GPU上,Pathfinder通常也能匹配或超过最佳CPU光栅化器的性能。在大型尺寸下,这种差异尤为明显,Pathfinder经常实现多倍速度提升。

  • 高质量抗锯齿。Pathfinder可以基于每个像素计算精确的分数梯形面积覆盖率,实现最高质量的抗锯齿(相当于256xAA)。

  • 高级字体渲染。Pathfinder可以渲染带有轻微提示的字体,并在LCD屏幕上执行亚像素抗锯齿。它可以通过茎干变暗/字体膨胀的方式,类似于macOS和FreeType,使文本在小尺寸时更易于阅读。该库还支持伽玛校正。

  • 支持SVG。Pathfinder 3被设计成高效处理由许多重叠的矢量路径组成的工作负载,例如在复杂的SVG和PDF文件中常见的那种。它执行基于瓦片的遮挡剔除,这通常会导致与使用画家算法的典型软件渲染器相比有显著的性能提升。包含一个简单的加载器,它利用resvg库来渲染SVG的子集,因此可以轻松开始。

  • 3D功能。Pathfinder可以在不损失质量的情况下渲染3D环境中的字体和矢量路径。这适用于基于矢量图形的用户界面,例如VR中的界面。

  • 轻量级。Pathfinder首先考虑的是简洁性和通用性,而不是大量专门的快速路径。它由一系列模块化crate组成,因此应用程序可以选择仅必要的组件,以最小化依赖。

  • 可移植性到过去十年内制造的几乎所有GPU,包括集成和移动GPU。任何能够运行Direct3D 9/OpenGL 3.0/WebGL 2.0的GPU都应能够运行Pathfinder。目前,后端支持OpenGL、OpenGL ES、Metal和WebGL。

构建

Pathfinder可以从Rust或C/C++使用。请参阅下面的相应部分。

Rust

在顶层简单地运行cargo build --release来构建所有crate。Pathfinder是一系列模块化crate,允许您选择库的所需部分,并省略其余部分。库在crates.io上有pathfinder_前缀(例如pathfinder_canvas),但您可能希望使用main分支以获取最新功能和错误修复。

C

C绑定使用cargo-c。使用cargo install cargo-c安装cargo-c,然后使用以下命令

$ cargo cinstall --destdir=/tmp/pathfinder-destdir --manifest-path c/Cargo.toml
$ sudo cp -a /tmp/pathfinder-destdir/* /

生成的库可以通过pkg-config作为pathfinder使用。有关使用示例,请参阅以c_开头的examples/目录中的示例。

cargo-c有多种其他选项,如--prefix,这对于包装器可能很有用。

社区

#pathfinder:mozilla.org有一个可用的Matrix聊天室。如果您在Mozilla Matrix服务器上,您可以通过搜索Pathfinder来找到它。有关连接到Matrix网络的更多信息,请参阅wiki.mozilla.org页面

Pathfinder的整个社区,包括聊天室和GitHub项目,都应遵守与Rust项目相同的《行为准则》。(目前,作者将处理违规行为。)

构建状态

Build Status

作者

主要作者是 Patrick Walton (@pcwalton),Servo 开发社区也做出了贡献。

标志由 Jay Vining 设计。

许可证

Pathfinder 使用与 Rust 本身相同的许可证。请参阅 LICENSE-APACHELICENSE-MIT

Material Design 图标版权属于 Google Inc.,并使用 Apache 2.0 许可证。


lib.rs:

适用于 macOS 和 iOS 的设备抽象的 Metal 实现。

依赖项

~5MB
~50K SLoC