#gpu #pathfinder #vector-graphics #font #practical #rasterizer #path

servo/pathfinder_swf

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

#496图形 API

3,550 星 & 87 关注者

AGPL-3.0-or-later

30KB
652

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 绑定目前尚不完整;欢迎提交拉取请求!)

  • 支持基于 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 首先设计为简单和通用,而不是大量特定的快速路径。它由一系列模块化存储库组成,因此应用程序可以选择仅包含必要的组件,以最小化依赖性。

  • 可移植性至过去十年中制造的几乎所有 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 来构建所有存储库。Pathfinder 是一组模块化存储库,允许您选择库中需要的部分,省略其余部分。这些库在 crates.io 上可用,带有 pathfinder_ 前缀(例如 pathfinder_canvas),但您可能希望使用 main 分支以获取最新的功能和错误修复。

C

C语言绑定使用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项目相同的《行为准则》。(目前,作者将处理违规行为。)

构建状态

Build Status

作者

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

标志由Jay Vining设计。

许可

Pathfinder的许可条款与Rust本身相同。请参阅LICENSE-APACHELICENSE-MIT

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

依赖关系

~2MB
~45K SLoC