2 个不稳定版本
0.34.0 | 2023 年 10 月 25 日 |
---|---|
0.33.0 | 2023 年 4 月 3 日 |
在 图形 API 中排名第 894
每月下载量 3,119
在 3 crate 中使用
21KB
391 代码行
Vulkano
Vulkano 是围绕 Vulkan 图形 API 的 Rust 包装器。它遵循 Rust 哲学,即只要不使用 unsafe 代码,就不应该能够触发任何未定义的行为。在 Vulkan 的情况下,这意味着非 unsafe 代码应始终符合有效 API 使用。
vlkano 能做什么?
- 提供了一组类似低级 API 的 Vulkan API。它不会隐藏其行为,但提供了一些舒适类型。
- 计划防止所有无效的 API 使用,即使是那些最隐晦的。Vulkano 的目的不仅仅是让您画一个茶壶,而是要涵盖 Vulkan 的所有可能用途并检测所有可能的问题,以便编写健壮的程序。通过编译时检查和运行时检查来防止无效的 API 使用。
- 可以为您处理 GPU 侧的同步(除非您选择自己处理),因为 Vulkan 的这一方面既令人烦恼又容易出错。会自动检测提交之间的依赖关系,并自动管理信号量。通过 unsafe trait 实现可以自定义库的行为。
- 尽可能方便使用。没有人会使用一个需要您为每个操作都查阅数小时文档的库。
比较
与其他 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的项目
我们最近才开始收集这个列表,如果您能通过向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 Chat - 另一个提出问题的地方。然而,目前聊天没有得到定期维护。在此目的上,更好的选择是使用GitHub Issues。
贡献
欢迎贡献!请随时提交PR,在Issues部分打开问题或主题。
该项目最初由Pierre Krieger(Tomaka)开发,他建立了Vulkano的基础设计目标和代码结构。在此期间,开发由Vulkano社区成员推动。
新的PR通常安排在每周结束前进行审查。已审查的较旧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特定设置
rustupdefault stable-x86_64-pc-windows-msvc
- 安装Visual Studio 2017构建工具。如果你已经使用此工具链,则它可能已经安装。
- 安装 msys2,按照所有指示进行。
- 然后在msys2终端运行:
pacman --noconfirm -Syu mingw-w64-x86_64-cmake mingw-w64-x86_64-python2 mingw-w64-x86_64-ninja
- 将msys2 mingw64的二进制路径添加到PATH环境变量中。
Windows-gnu特定设置
windows-gnu工具链不受支持,但您可以从windows-msvc交叉编译到windows-gnu。
步骤1和2是为了通过使用与rust相同的mingw来解决 https://github.com/rust-lang/rust/issues/49078。
- 下载并解压 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
- 将mingw64\bin的绝对路径添加到您的PATH环境变量中。(此路径需要在msys2路径之前)
- 运行以下命令:
rustup default stable-x86_64-pc-windows-msvc
- 运行以下命令:
rustup target install x86_64-pc-windows-gnu
- 安装 Visual Studio 2017构建工具。如果您已经使用此工具链,则它可能已经安装。
- 安装 msys2,按照所有指示进行。
- 然后在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
- 将msys2 mingw64的二进制路径添加到PATH环境变量中。
- 任何需要构建项目的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特定设置
macOS和iOS原生不支持Vulkan。但是,存在 MoltenVK,它是一个基于Apple Metal API的开源Vulkan实现。这使得vulkano可以在macOS和iOS平台上构建和运行。
获取MoltenVK并运行vulkano的最简单方法是安装 macOS的Vulkan SDK。在LunarG网站上提供了安装说明。
在iOS上,vulkano直接链接到MoltenVK框架。除了安装它之外,无需执行其他操作。请注意,macOS的Vulkan SDK还包含iOS框架。
许可证
根据您的选择,受以下任一项许可证的许可
- Apache License,版本2.0(LICENSE-APACHE 或 https://www.apache.org/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT 或 https://opensource.org/licenses/MIT)
。
贡献
除非您明确声明,否则您有意提交以包含在您的工作中的任何贡献都将根据上述方式双重许可,没有任何额外条款或条件。
lib.rs
:
为vulkano
提供的宏。
依赖关系
~3.5MB
~74K SLoC