2个不稳定版本
0.5.0 | 2021年5月23日 |
---|---|
0.1.0 | 2019年6月8日 |
3,550 星级 & 87 关注者
40KB
808 行
Pathfinder 3
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首先设计为简单和通用,而不是大量的专用快速路径。它由一系列模块化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,允许您选择库中所需的仅部分,省略其他部分。这些库可以在带有pathfinder_
前缀的crates.io
上找到(例如,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
。如果您在Mozilla矩阵服务器上,可以搜索Pathfinder来找到它。有关连接到矩阵网络的更多信息,请参阅这个 wiki.mozilla.org
页面。
Pathfinder社区(包括聊天室和GitHub项目)应遵守与Rust项目相同的《行为准则》。(目前,作者将处理违规行为。)
构建状态
作者
主要作者是Patrick Walton (@pcwalton),还有Servo开发社区的贡献。
标志由Jay Vining设计。
许可
Pathfinder的许可条款与Rust本身相同。请参阅LICENSE-APACHE
和LICENSE-MIT
。
材质设计图标版权属于Google Inc.,并许可在Apache 2.0许可下。
lib.rs
:
一个用于调试的最小即时模式UI。
这可以作为您自己的应用程序中的一种超轻量级的替代品,替代dear imgui、Conrod等。
依赖项
~1.6–2.5MB
~48K SLoC