6 个版本 (重大更新)

0.34.1 2023 年 10 月 29 日
0.34.0 2023 年 10 月 25 日
0.33.0 2023 年 4 月 3 日
0.32.0 2022 年 10 月 31 日
0.30.0 2022 年 7 月 20 日

#102图形 API

Download history 120/week @ 2024-03-11 110/week @ 2024-03-18 59/week @ 2024-03-25 162/week @ 2024-04-01 91/week @ 2024-04-08 92/week @ 2024-04-15 229/week @ 2024-04-22 97/week @ 2024-04-29 87/week @ 2024-05-06 104/week @ 2024-05-13 104/week @ 2024-05-20 147/week @ 2024-05-27 113/week @ 2024-06-03 86/week @ 2024-06-10 111/week @ 2024-06-17 125/week @ 2024-06-24

453 每月下载量
11 个 crates 中使用 (10 个直接使用)

MIT/Apache

4.5MB
90K SLoC

Vulkano

Build Status Discord Website/guide
vulkano crates.io vulkano-shaders crates.io vulkano-util crates.io vulkano-win crates.io
vulkano docs vulkano-shaders docs vulkano-util docs vulkano-win docs

Vulkano 是一个围绕 Vulkan 图形 API 的 Rust 包装器。它遵循 Rust 哲学,即只要不使用不安全代码,就不应该能够触发任何未定义的行为。在 Vulkan 的情况下,这意味着非不安全代码应始终符合有效的 API 使用。

Vulkano 做了什么?

  • 提供围绕 Vulkan 的低级 API。它并不隐藏它所做的工作,而是提供了一些舒适类型。
  • 计划防止所有无效的 API 使用,即使是那些最隐晦的。Vulkano 的目的不仅是要让你画出茶壶,还要覆盖 Vulkan 的所有可能用途,并检测所有可能的问题,以便编写健壮的程序。通过编译时检查和运行时检查,可以防止无效的 API 使用。
  • 可以为你处理 GPU 侧的同步(除非你选择自己处理),因为 Vulkan 的这个方面既令人讨厌又容易出错。自动检测提交之间的依赖关系,并自动管理信号量。通过不安全特质的实现,可以自定义库的行为。
  • 力求使用方便。没有人会使用一个要求你为每次操作都浏览文档数小时的库。

比较

与其他知名 Rust 生态系统中的图形 API 的比较。

名称 开源时间 API 级别 显著特性
Vulkano 2016 年 3 月 围绕 Vulkan API 的高级别 Rust API。 类型安全的编译时着色器。与 Rust 代码中的 glsl 和 spir-v 着色器代码类型的透明互操作性。自动生成着色器布局的类型。
Wgpu 2019 年 5 月 具有多个后端的高级别 Rust API。 支持多个后端:Vulkan、Metal、DirectX、WebGPU 和其他。遵循 WebGPU 规范。具有异步/等待 API。
Miniquad 2020 年 3 月 具有多个后端的高级别最小化 Rust API。 相对简约的API,非常适合小型到中型图形项目。支持多个后端,包括浏览器目标。
Sierra 2021年3月 针对Vulkan/Metal API的高层Rust API。 通过宏系统在Rust代码中构建布局、描述符和着色器类型。基于Erupt构建。支持光线追踪管线。
Glium 2014年10月 包装OpenGL的高层Rust API。 仅支持OpenGL。
Ash 2016年8月 Vulkan的低层API。 不安全的Vulkan API绑定。
Erupt 2020年4月 Vulkan的低层API。 不安全的Vulkan API绑定。

请注意,截至当前日期,生态系统中的已知项目(包括Vulkano)尚未达到稳定版本和最终设计目标,它们的API也在不断以可破坏的方式变化,也可能存在错误和不完整的特性。

然而,上述大多数项目已经建立了明确的结构,所有功能破坏性变更都可能在用户代码中直接修复,并且它们中的大多数都得到了维护。因此,我们建议在第三方代码中使用它们。选择取决于最终项目的目标和需求,我们建议在 beforehand 检查它们的实际功能集和API能力。

使用Vulkano的项目

我们最近才开始收集这份清单,如果您能通过向README.md提交PR(Pull Request)来帮助我们,将不胜感激。

项目名称 描述
Basalt 桌面应用程序的GUI框架
Ferret 兼容Doom的游戏引擎
Sandbox 2D像素物理模拟器
Egui Winit Vulkano Vulkano与Egui的集成
VideowindoW 在底层使用Vulkano来实现异步视频流合成
Korangar 基于Vulkan的Ragnarok Online客户端
Krnl 安全、便携、高性能的计算(GPGPU)内核。
Vera 用Rust编写的动画引擎。

如果您通过将您的项目添加到这份清单来提供反馈,我们将很乐意帮助您将您的项目与Vulkano的最新更改保持同步。

提前感谢!

文档和资源

要开始,我们鼓励您使用以下资源

  • 本存储库中的examples文件夹。
  • docs.rs - 完整的Vulkano API文档
  • vulkano.rs上的指南 - 从简单的计算示例(约50行代码)开始,然后逐步过渡到渲染三角形和Mandelbrot图。指南目前有些过时。我们计划在未来更新它,但它是了解Vulkano API基础构建块的好地方。
  • GitHub Issues - 提出主题、提问或报告错误。那里的新主题由维护者和其他社区用户定期关注。
  • Gitter 聊天 - 另一个提出问题的场所。然而,目前聊天并不定期维护。在这种情况下,最好使用GitHub Issues。

贡献

非常欢迎贡献!请随时提交PR,在Issues部分提出问题和主题。

该项目最初由Pierre Krieger(Tomaka)开发,他确立了Vulkano的基本设计目标和代码结构。在此期间,开发由Vulkano社区成员驱动。

新的拉取请求通常会在每周结束时安排进行审查。 已在审查中的旧PR具有比新PR更高的优先级。我们正在努力尽快推进开发,但审查过程有时需要时间,请耐心等待,因为维护者需要时间来仔细检查一切。

如果需要紧急提升某些内容,请在PR或Issue的评论中ping当前的Vulkano维护者(@Eliah-Lakhin)。

如果您对特性和函数进行了添加、删除或修改,请指定变更日志条目 在拉取请求描述中(不要直接在变更日志文件中)。它们将在PR合并后立即转移到变更日志中。

每个PR都必须通过测试,才能被合并到master

次要版本通常在1到3个月之间发布,具体取决于master中未发布和破坏性变更的增长。

仓库结构

此仓库包含四个库

  • vulkano是主要的。
  • vulkano-shaders提供了用于编译glsl着色器的shader!宏。
  • vulkano-util提供了一系列实用函数,用于简化某些常见操作,例如创建设备和swapchain。
  • vulkano-win提供了vulkano和winit库之间的安全链接,可以创建渲染窗口。

要运行测试,请在仓库根目录中运行cargo test --all。在这样做之前,请确保您的Vulkan驱动程序是最新的。

名人堂

我们很高兴能提及一些对项目做出重大贡献的成员

  • Pierre Krieger。初始开发者。Patreon页面
  • Lucas Kent。维护者。Patreon页面
  • Austin Johnson。维护者。Patreon页面
  • Rua。一名活跃的开发者,他投入了大量精力改进Vulkano,并不断保持其更新。
  • 您!感谢您的帮助、贡献、改进、错误报告和用户体验,使这个项目成为Rust图形API库的主要之一!

设置和故障排除

Vulkano使用shaderc-rs进行着色器编译。请参考shaderc-rs文档,以提供预构建的libshaderc,以加快构建时间。

请注意,通常vulkano 不需要 您安装官方Vulkan SDK。这并不是vulkano特有的(您不需要SDK来编写使用Vulkan的程序,即使没有vulkano),但许多人并不知道这一点,并安装SDK以为它是必需的。然而,macOS和iOS平台需要对Vulkan进行一些额外的设置,因为它们没有原生支持。以下有更多详细信息。

除非您提供libshaderc,否则要使用shaderc-sys crate构建libshaderc,必须在PATH上安装并可用以下工具

  • CMake
  • Ninja是可选的,除非使用MSVC构建。它可能会加快libshaderc的构建时间。
  • Python(与Python 2.x和3.x兼容,在Windows上,可执行文件必须命名为python.exe

这些要求可以使用您喜欢的包管理器或项目网站上的安装程序进行安装。以下是一些设置方法的示例。

windows-msvc特定设置

  1. rustupdefault stable-x86_64-pc-windows-msvc
  2. 安装 Visual Studio 2017 构建工具。如果您已经使用此工具链,则它可能已经安装。
  3. 安装 msys2,遵循所有说明。
  4. 然后在 msys2 终端运行: pacman --noconfirm -Syu mingw-w64-x86_64-cmake mingw-w64-x86_64-python2 mingw-w64-x86_64-ninja
  5. 将 msys2 mingw64 二进制路径添加到 PATH 环境变量。

Windows-gnu 特定设置

目前不支持 windows-gnu 工具链,但您可以从 windows-msvc 进行交叉编译到 windows-gnu。

步骤 1 和 2 是通过使用与 rust 相同的 mingw 来解决 https://github.com/rust-lang/rust/issues/49078 的问题。

  1. 下载并解压 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
  2. 将 mingw64\bin 的绝对路径添加到您的 PATH 环境变量中。(此路径需要位于 msys2 路径之前)
  3. 运行以下命令: rustup default stable-x86_64-pc-windows-msvc
  4. 运行以下命令: rustup target install x86_64-pc-windows-gnu
  5. 安装 Visual Studio 2017 构建工具。如果您已经使用此工具链,则它可能已经安装。
  6. 安装 msys2,遵循所有说明。
  7. 然后在 msys2 终端运行: 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
  8. 将 msys2 mingw64 二进制路径添加到 PATH 环境变量。
  9. 任何需要构建项目的 cargo 命令都需要包含 --target x86_64-pc-windows-gnu,例如运行: 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 特定设置

macOS 和 iOS 不原生支持 Vulkan。然而,存在一个开源 Vulkan 实现项目 MoltenVK,它是基于 Apple 的 Metal API 的。这允许 vulkano 在 macOS 和 iOS 平台上构建和运行。

要使用 MoltenVK 将 vulkano 设置好,最简单的方法是安装 macOS 的 Vulkan SDK。LunarG 网站上有 安装说明

在 iOS 上,vulkano 直接链接到 MoltenVK 框架。除了安装它之外,无需执行其他操作。请注意,macOS 的 Vulkan SDK 也附带 iOS 框架。

许可协议

根据您的要求,许可协议为以下之一

任选其一。

贡献

除非您明确说明,否则您有意提交以包含在作品中的任何贡献都将根据上述许可协议进行双许可,而不附加任何额外的条款或条件。

依赖关系

~9–21MB
~338K SLoC