52 个版本 (33 个重大更改)

0.34.0 2023 年 10 月 25 日
0.33.0 2023 年 4 月 3 日
0.32.0 2022 年 10 月 31 日
0.30.0 2022 年 7 月 20 日
0.2.0 2016 年 7 月 27 日

#242 in 图形 API

Download history 496/week @ 2024-04-08 846/week @ 2024-04-15 1085/week @ 2024-04-22 768/week @ 2024-04-29 609/week @ 2024-05-06 671/week @ 2024-05-13 654/week @ 2024-05-20 831/week @ 2024-05-27 871/week @ 2024-06-03 427/week @ 2024-06-10 680/week @ 2024-06-17 740/week @ 2024-06-24 80/week @ 2024-07-01 224/week @ 2024-07-08 630/week @ 2024-07-15 465/week @ 2024-07-22

1,495 每月下载量
43 个工具箱中使用 (35 个直接使用)

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 使用。

vlkano 做了什么?

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

比较

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

名称 开源时间 API 级别 显著功能
Vulkano 2016 年 3 月 高层次的 Rust API 包装 Vulkan API。 类型安全的编译时着色器。与 Rust 代码中的 glsl 和 spir-v 着色器代码类型透明交互。自动生成着色器 Layout 的类型。
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也时常以可破坏的方式发生变化,也可能存在错误和未完成的功能。

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

使用Vulkano的项目

我们最近才开始收集这个列表,如果您能通过贡献(提交一个PR)来帮助我们,将不胜感激,请参考README.md

项目名称 描述
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 Chat - 另一个提问的地方。然而,聊天目前没有定期维护。最好使用GitHub Issues进行此类目的。

贡献

欢迎贡献!请随意提交拉取请求,在Issues部分提出问题或主题。

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

新的Pull Requests通常安排在本周结束前进行审查。正在审查的较旧的PR比新的PR具有优先权。我们正在努力尽快推动开发,但审查过程有时需要时间,请耐心等待,维护者需要时间来正确检查一切。

如果需要紧急推广某事,请在PR或Issue的评论中ping当前Vulkano维护者(@Eliah-Lakhin)。

如果您的更改增加了、删除了或修改了特性和函数,请在Pull Request描述中指定变更日志条目(直接在变更日志文件中)。它们将在PR合并后立即转移到变更日志中。

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

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

仓库结构

该仓库包含四个库

  • vulkano是主要的一个。
  • vulkano-shaders提供了用于编译glsl着色器的shader!宏。
  • vulkano-util提供了一系列实用函数,以简化某些常见操作,如设备和交换链创建。
  • 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. rustup默认稳定版 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特定设置

使用您的包管理器安装所需的dev-tools和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特定设置

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

通过MoltenVK使vulkano易于运行的最简单方法是安装macOS的Vulkan SDK。在LunarG网站上提供了安装说明

在iOS上,vulkano直接链接到MoltenVK框架。除了安装它之外,无需做任何事情。请注意,macOS的Vulkan SDK还包含iOS框架。

许可证

根据您的选择,许可以下任一项

贡献

除非您明确声明,否则您有意提交以包含在作品中的任何贡献,将按上述方式双许可,没有任何附加条款或条件。


lib.rs:

Cargo 功能

功能 描述
raw_window_handle 包括对 raw_window_handle 库的支持。默认启用。
winit 包括对 winit 库的支持。默认启用。

依赖项

~9–24MB
~338K SLoC