22 个重大版本
0.23.0+213 | 2022 年 11 月 14 日 |
---|---|
0.22.0+204 | 2022 年 1 月 25 日 |
0.21.0+202 | 2021 年 12 月 11 日 |
0.20.0+190 | 2021 年 8 月 30 日 |
0.11.0+148 | 2020 年 7 月 21 日 |
#294 在 图形 API 中
332 每月下载量
在 9 个 Crates 中使用 (8 个直接使用)
6MB
142K SLoC
erupt
Vulkan API 绑定
请参阅 erupt
用户指南。
维护模式通知
不推荐使用 erupt 用于新项目,请使用 ash。正在进行重写 ash 的工作,使用 erupt 项目的想法,更新请参阅 https://github.com/ash-rs/ash/issues/344。erupt 的简单补丁仍然会被合并,但预期不会有大的更改。
功能
- 完全覆盖 Vulkan API
- 对所有扩展的第一类支持
- 高质量自动生成的函数包装器
- 一个辅助您使用此 crate 的 实用模块
VulkanResult
:Vulkan 结果的惯用包装器surface
:使用RawWindowHandle
创建SurfaceKHR
(从ash-window
调整)
- 生成代码分布到多个模块中
- 函数加载 (
EntryLoader
,InstanceLoader
,DeviceLoader
) - 单独的
Flags
和FlagBits
类型 - 每个结构体的
Builder
高级功能 - 支持类型安全的指针链
- 每个类型的
Default
和Debug
实现 - 已确认支持 Linux、Windows、macOS 和 Android
- 除了
utils
之外,自动生成一切内容
示例:实例创建
use erupt::{vk, EntryLoader, InstanceLoader};
let entry = EntryLoader::new()?;
let app_info = vk::ApplicationInfoBuilder::new()
.api_version(vk::API_VERSION_1_1);
let instance_info = vk::InstanceCreateInfoBuilder::new()
.application_info(&app_info);
let instance = InstanceLoader::new(&entry, &instance_info)?;
// ...
instance.destroy_instance(None);
更多示例
Cargo特性
surface
(默认启用):启用surface
模块,添加raw-window-handle
依赖loading
(默认启用):启用EntryLoader::new
函数,添加libloading
依赖bytemuck
:为一些选定的结构体实现Pod
(例如*IndirectCommand
等),添加bytemuck
依赖
常见问题解答
问:这个、ash和vulkano有什么区别?
答:Vulkano特别之处在于它提供了手写的Vulkan封装器,这意味着例如它有一个特殊的围绕Vulkan PhysicalDevice
的手写封装器。另一方面,ash和erupt都提供了Vulkan API绑定,但不暴露这种花哨的封装器,而是专注于拥有对原始 Vulkan API的良好绑定。
erupt的卖点在于它有更好的文档,对所有扩展的高层函数支持(这只有在您使用这些扩展时才有实际意义),完全生成以及一些小的改进。另一方面,ash有一个更大的现有社区。
问:版本号末尾的数字代表什么?
答:它代表erupt版本所针对的Vulkan头文件版本,仅用于信息。
生态系统
初始化
erupt-bootstrap
:Vulkan引导库,灵感来自vk-bootstrap
内存分配
gpu-alloc
:Rust原生,由wgpu
内部使用vk-alloc
:Rust原生vk-mem-erupt
:对C++ Vulkan内存分配器(VMA)库的绑定
最低支持的Rust版本(MSRV)
Rust 1.48或更高版本。
感谢
ash
帮助启发并制作了这个cratelibloading
提供符号加载ash-window
为surface
模块提供基础bitflags
提供完美的位标志宏- 火山社区 ❤️
- Rust社区 ❤️
许可
标志是Twemoji(许可)的火山表情符号。在它上面添加了“erupt”这个名字。
本项目采用zlib许可。