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许可。