#矢量图形 #GPU #字体 #字体渲染 #Pathfinder #光栅化器 #实用

servo/pathfinder_lottie

一个快速、实用的字体和矢量图形GPU光栅化器

1个不稳定版本

0.1.0 2019年6月1日

917 in 图形API

3,550 stars & 87 watchers

9KB
284

Pathfinder 3

Logo

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

请注意,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绑定目前不够完整;欢迎提交pull requests!)

  • 在支持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-c安装,使用cargo install cargo-c,然后使用以下命令:

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

生成的库可以通过 pkg-configpathfinder 的方式使用。使用示例请参阅 examples/ 目录下以 c_ 开头的示例。

cargo-c 提供了多种其他选项,例如 --prefix,这可能对打包者很有用。

社区

Matrix 聊天室可在 #pathfinder:mozilla.org 找到。如果您在 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:

对 Lottie 的实验性支持。这非常不完整。

依赖项

~0.7–1.6MB
~35K SLoC