22 个版本

0.7.0 2021 年 6 月 28 日
0.6.1 2021 年 5 月 10 日
0.6.0 2021 年 3 月 7 日
0.5.3 2020 年 12 月 27 日
0.1.1 2016 年 6 月 29 日

#473 in 图形 API

Download history 813/week @ 2024-03-13 845/week @ 2024-03-20 773/week @ 2024-03-27 795/week @ 2024-04-03 634/week @ 2024-04-10 768/week @ 2024-04-17 894/week @ 2024-04-24 694/week @ 2024-05-01 655/week @ 2024-05-08 692/week @ 2024-05-15 702/week @ 2024-05-22 817/week @ 2024-05-29 579/week @ 2024-06-05 533/week @ 2024-06-12 649/week @ 2024-06-19 566/week @ 2024-06-26

2,433 每月下载量
用于 51 工具包(直接使用 8 个)

MIT/Apache

200KB
4K 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 着色器代码类型透明互操作。自动生成着色器布局的类型。
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的项目

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

项目名称 描述
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行代码)开始,然后逐步进行三角形和曼德布罗特的渲染。该指南目前有些过时。我们计划在未来更新它,但它是理解Vulkano API基础构建块的好起点。
  • GitHub 问题 - 提出一个主题,提出问题或报告错误。那里的新主题定期由维护者和其他社区用户关注。
  • Gitter 聊天 - 另一个提出问题的场所。然而,聊天目前没有得到定期维护。在此目的上,最好使用GitHub问题。

贡献

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

该项目最初由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提供了一系列实用函数,以简化某些常见操作,如设备创建和交换链创建。
  • 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. 需要包含 --target x86_64-pc-windows-gnu 的任何 cargo 命令来构建项目,例如:运行 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 特定设置

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

使用 MoltenVK 将 vulkano 启动和运行的最简单方法是安装 macOS 的 Vulkan SDK。LunarG 网站上有 安装说明

在 iOS 上,vulkano 直接链接到 MoltenVK 框架。除了安装它之外,没有其他要做的。请注意,macOS 的 Vulkan SDK 还包含 iOS 框架。

许可证

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

贡献

除非您明确说明,否则您有意提交以包含在您的工作中的任何贡献将根据上述条款双许可,没有任何额外的条款或条件。

无运行时依赖