Vulkano
Vulkano 是 Vulkan 图形 API 的 Rust 封装。 它遵循 Rust 的哲学,即只要你不使用 unsafe 代码,就不应该 能够触发任何未定义行为。对于 Vulkan 而言,这意味着非 unsafe 代码 始终应符合有效的 API 用法。
vulkano 做了什么?
- 提供围绕 Vulkan 的低层级 API。它不隐藏其操作,但提供了一些 便捷类型。
- 旨在防止所有无效的 API 用法,即使是最晦涩的用法。Vulkano 的目的不仅仅是让你绘制一个茶壶,而是覆盖 Vulkan 的所有可能用法并检测所有 可能的问题,以编写健壮的程序。无效的 API 用法通过 编译时检查和运行时检查来防止。
- 可以为你处理 GPU 端的同步(除非你选择自己处理),因为 Vulkan 的这一方面既难以处理又容易出错。提交之间的依赖关系 会自动检测,信号量会自动管理。该库的行为 可以通过 unsafe trait 实现进行自定义。
- 力求易于使用。没有人会使用一个要求你为每个操作 浏览数小时文档的库。
比较
与 Rust 生态系统中其他知名图形 API 的比较。
| 名称 | 开源时间 | API 级别 | 显著特性 |
|---|---|---|---|
| Vulkano | 2016 年 3 月 | 封装 Vulkan API 的高级 Rust API。 | 类型安全的编译时着色器。在 Rust 代码中与 glsl 和 spir-v 着色器代码类型透明互操作。为着色器 Layout 自动生成类型。 |
| Wgpu | 2019 年 5 月 | 具有多个后端的高级 Rust API。 | 支持多个后端:Vulkan、Metal、DirectX、WebGPU 及其他。遵循 WebGPU 规范。具有 async/await API。 |
| Miniquad | 2020 年 3 月 | 具有多个后端的高级极简 Rust API。 | 相对极简的 API,非常适合中小型图形项目。支持多个后端,包括浏览器目标。 |
| Sierra | 2021 年 3 月 | 针对 Vulkan/Metal API 的高级 Rust API。 | 通过宏系统在 Rust 代码中构建 Layouts、Descriptors 和着色器 Types。基于 Erupt 构建。支持 Ray Tracing Pipeline。 |
| Glium | 2014 年 10 月 | 封装 OpenGL 的高级 Rust API | 仅支持 OpenGL。 |
| Ash | 2016 年 8 月 | Vulkan 的低级 API。 | 不安全的 Vulkan API 绑定。 |
| Erupt | 2020 年 4 月 | Vulkan 的低级 API。 | 不安全的 Vulkan API 绑定。 |
请注意,截至当前日期,生态系统中已知的任何项目(包括 Vulkano) 均未达到稳定发布版本和最终设计目标,它们的 API 也会不时以破坏性方式 发生变化,并且可能存在 bug 和未完成的功能。
然而,上述大多数项目已经确立了明确的结构,所有 破坏性的功能变更在用户代码中很可能很容易修复,并且其中大多数 都得到维护。因此,我们建议在第三方代码中使用其中任何一个。 选择取决于最终项目的目标和需求,我们建议事先 检查它们的实际功能集和 API 能力。
文档和资源
为了入门,我们鼓励您使用以下资源:
- 本仓库中的 examples 文件夹。
- docs.rs - 完整的 Vulkano API 文档
- vulkano.rs 上的指南 - 从简单的计算 示例(约 50 行代码)开始,然后逐步过渡到渲染三角形和曼德博集合。 该指南目前略微过时。我们计划在未来对其进行更新,但它 是理解 Vulkano API 基础构建模块的良好起点。
- GitHub Issues - 提出话题、提问 或报告 bug。那里的新话题会由维护者和其他 社区用户定期关注。
- Gitter Chat - 另一个提问的地方。然而, 目前聊天室并未得到定期维护。建议为此目的使用 GitHub Issues。
贡献
非常欢迎贡献!请随时提交 pull request,或在 Issues 部分中提出问题或话题。
该项目最初由 Pierre Krieger(Tomaka) 开发,他确立了 Vulkano 的基础 设计目标和代码结构。在此期间,开发由 Vulkano 社区成员推动。
如果您的更改添加、删除或修改了 trait 或函数,请 在 Pull Request 描述中(而非直接在 changelog 文件中) 指定 changelog 条目。 它们将在 PR 合并后立即转移到 changelog 中。
每个 PR 必须通过测试才能合并到 master。
次要版本发布通常平均间隔 1 到 3 个月,具体取决于 master 中未发布和破坏性变更的增长情况
仓库结构
此仓库包含四个库:
vulkano是主库。vulkano-shaders提供用于编译 glsl 着色器的shader!宏。vulkano-taskgraph允许构建任务的依赖图,这些任务会自动同步,然后在 Vulkan 设备上执行。vulkano-util提供多种实用函数,以简化某些常见操作,例如创建设备和交换链。 一个用于渲染的窗口。
要运行测试,请在仓库根目录运行 cargo test --all。在此之前,请确保您的 Vulkan
驱动程序是最新的。
名人堂
我们很乐意提及一些为本项目做出重大贡献的成员:
- Pierre Krieger。初始开发者。Patreon 页面。
- Lucas Kent。维护者。Patreon 页面。
- Austin Johnson。维护者。Patreon 页面。
- Rua。一位活跃的开发者,为改进 Vulkano 并使其保持最新付出了大量努力。
- 您! 感谢您的帮助、贡献、改进、错误报告以及用户体验, 使该项目成为 Rust 中主要的 Rust 图形 API 库之一!
设置与故障排除
Vulkano 使用 glslc 进行着色器编译。
glslc 必须已安装并可在您的 PATH 上访问。它随
Vulkan SDK 一起捆绑,或者可以通过您的包管理器单独安装。
请注意,通常 vulkano 不要求你安装官方的 Vulkan SDK。这 并非 vulkano 特有的要求(即使没有 vulkano,编写使用 Vulkan 的程序也不需要 SDK),但许多人 对此并不知情,并误以为必须安装 SDK。然而,macOS、iOS 和 tvOS 平台需要更多的 Vulkan 配置, 因为 Vulkan 在这些平台上并非原生支持。详见下文。
这些要求可以通过您喜欢的包管理器安装,也可以通过项目网站上的安装程序安装。以下是一些设置方式的示例。
windows-msvc 特定设置
rustup default stable-x86_64-pc-windows-msvc- Install Build Tools for Visual Studio 2017. If you have already been using this toolchain then its probably already installed.
- Install msys2, following ALL of the instructions.
- Then in the msys2 terminal run:
pacman --noconfirm -Syu mingw-w64-x86_64-cmake mingw-w64-x86_64-python2 mingw-w64-x86_64-ninja - Add the msys2 mingw64 binary path to the PATH environment variable.
Windows-gnu 特定设置
windows-gnu 工具链不受支持,但你可以改为从 windows-msvc 交叉编译到 windows-gnu
步骤 1 和 2 是为了通过使用与 rust 相同的 mingw 来规避 https://github.com/rust-lang/rust/issues/49078。
- Download and extract https://s3-us-west-1.amazonaws.com/rust-lang-ci2/rust-ci-mirror/x86_64-6.3.0-release-posix-seh-rt_v5-rev2.7z
- Add the absolute path to mingw64\bin to your PATH environment variable. (This path needs to be before the msys2 path)
- Run the command:
rustup default stable-x86_64-pc-windows-msvc - Run the command:
rustup target install x86_64-pc-windows-gnu - Install Build Tools for Visual Studio 2017. If you have already been using this toolchain then it's probably already installed.
- Install msys2, following ALL of the instructions.
- Then in the msys2 terminal run:
pacman --noconfirm -Syu mingw64/mingw-w64-x86_64-pkg-config mingw-w64-x86_64-gcc mingw-w64-x86_64-cmake mingw-w64-x86_64-make mingw-w64-x86_64-python2 mingw-w64-x86_64-ninja - Add the msys2 mingw64 binary path to the PATH environment variable.
- Any cargo command that builds the project needs to include
--target x86_64-pc-windows-gnue.g. to run:cargo run --target x86_64-pc-windows-gnu
Linux 特定设置
使用您的包管理器安装所需的开发工具和 Vulkan 驱动程序
例如在 ubuntu 上:
sudo apt-get install build-essential git python cmake libvulkan-dev vulkan-tools
在基于 arch 的系统上
sudo pacman -Sy base-devel git python cmake vulkan-devel --noconfirm
macOS、iOS 和 tvOS 特定设置
Vulkan 未获得 macOS、iOS 和 tvOS 的原生支持。然而,存在 MoltenVK 一个基于 Apple 的 Metal API 之上的开源 Vulkan 实现。这使得 vulkano 能够在 macOS、iOS 和 tvOS 平台上构建和运行。
使用 MoltenVK 让 vulkano 运行起来的最简单方法是安装 Vulkan SDK for macOS。LunarG 网站上提供了安装说明。
在 iOS 和 tvOS 上,vulkano 直接链接到 MoltenVK 框架。除了安装它之外,无需做其他任何事情。请注意,macOS 的 Vulkan SDK 也附带了用于 iOS 和 tvOS 的框架。
License
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or https://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or https://opensource.org/licenses/MIT)
at your option.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you shall be dual licensed as above, without any additional terms or conditions.