2 个版本
0.5.4 | 2024 年 7 月 22 日 |
---|---|
0.5.1 | 2021 年 5 月 23 日 |
3,550 个星标 & 87 个关注者
445KB
11K SLoC
Pathfinder 3
Pathfinder 3 是一个基于 OpenGL 3.0+、OpenGL ES 3.0+、WebGL 2 和 Metal 的快速、实用的字体和矢量图形光栅化器。
请注意,Pathfinder 正在积极开发中,在各个领域尚不完整。
快速入门
Pathfinder 包含一个实现了 HTML canvas 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
使用。有关使用示例,请参阅examples/
目录中从c_
开始的示例。
cargo-c
有许多其他选项,如--prefix
,这可能对打包者很有用。
社区
在 #pathfinder:mozilla.org
可以找到一个 Matrix 聊天室。如果您在 Mozilla Matrix 服务器上,可以通过搜索“Pathfinder”来找到它。有关连接到 Matrix 网络的更多信息,请参阅 此 wiki.mozilla.org
页面。
Pathfinder 整个社区,包括聊天室和 GitHub 项目,都应遵守 Rust 项目本身遵循的同一行为准则。(目前,作者将处理违规行为。)
构建状态
作者
主要作者是 Patrick Walton (@pcwalton),Servo 开发社区也做出了贡献。
标志由 Jay Vining 设计。
许可
Pathfinder 的许可条款与 Rust 本身相同。请参阅 LICENSE-APACHE
和 LICENSE-MIT
。
Material Design 图标版权所有 Google Inc.,并使用 Apache 2.0 许可证。
lib.rs
:
一个最小的 SIMD 抽象,可以在 Pathfinder 之外使用。
没有运行时依赖
~10KB