#矢量图形 #OpenGL #Metal #GPU #字体 #Pathfinder #WebGL

pathfinder_metal

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

2个版本

0.5.1 2020年4月17日
0.5.0 2020年4月17日

#1045 in 图形API

每月28次下载

MIT/Apache

2MB
16K SLoC

Rust 14K SLoC // 0.0% comments Metal Shading Language 1K SLoC // 0.0% comments GLSL 571 SLoC // 0.0% comments

Pathfinder 3

Logo

Pathfinder 3是一个快速、实用的基于GPU的字体和矢量图形光栅化器,使用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使用。有关使用示例,请参阅以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实现。

依赖项

~15MB
~83K SLoC