56个版本 (32个破坏性)

0.34.1 2023年10月29日
0.33.0 2023年4月3日
0.32.3 2022年12月7日
0.32.1 2022年11月9日
0.2.0 2016年7月27日

#10 in 图形API

Download history 5669/week @ 2024-04-27 4423/week @ 2024-05-04 4691/week @ 2024-05-11 4241/week @ 2024-05-18 4484/week @ 2024-05-25 4298/week @ 2024-06-01 4078/week @ 2024-06-08 4482/week @ 2024-06-15 4205/week @ 2024-06-22 3278/week @ 2024-06-29 3637/week @ 2024-07-06 3910/week @ 2024-07-13 6159/week @ 2024-07-20 4963/week @ 2024-07-27 4607/week @ 2024-08-03 3687/week @ 2024-08-10

20,088 每月下载量
用于 94 个包(直接使用79个)

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月 高级Rust API封装Vulkan API。 类型安全的编译时着色器。在Rust代码中与glsl和spir-v着色器代码类型的透明互操作性。为着色器的Layout自动生成类型。
Wgpu 2019年5月 支持多后端的高级Rust API。 支持多个后端:Vulkan、Metal、DirectX、WebGPU以及其他。遵循WebGPU规范。提供异步/await 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的项目

我们最近开始收集这个列表,如果您能通过在README.md中提交PR(Pull Request)来帮助我们,我们将不胜感激。

项目名称 描述
Basalt 桌面应用程序的GUI框架
Ferret 兼容Doom的游戏引擎
Sandbox 2D像素物理模拟器
Egui Winit Vulkano 与Egui集成的Vulkano
VideowindoW 在底层使用Vulkano以启用异步视频流合成
Korangar 基于Vulkan的Ragnarok Online客户端

如果您通过将您的项目添加到这个列表来给我们反馈,我们将很高兴帮助您保持您的项目与Vulkano的最新更改同步。

提前感谢!

文档和资源

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

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

贡献

我们非常欢迎贡献!请随时提交PR,在问题部分打开问题和主题。

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

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

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

如果您的更改添加、删除或修改了一个特性或一个函数,请在PR描述中指定变更日志条目(不是直接在变更日志文件中)。它们将在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特有的(即使没有vulkano,您也不需要SDK来编写使用Vulkan的程序),但许多人并不知道这一点,并安装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 Build Tools。如果您已经使用此工具链,则它可能已经安装。
  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 Build Tools。如果您已经使用此工具链,则它可能已经安装。
  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-utils

在基于 arch 的系统上

sudo pacman -Sy base-devel git python cmake vulkan-devel --noconfirm

macOS 和 iOS 特定设置

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

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

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

许可

根据以下之一许可

贡献

除非您明确表示,否则您有意提交的任何贡献都应根据上述条款进行双许可,而不附加任何额外条款或条件。

依赖关系

~8–14MB
~206K SLoC