8 unstable releases (3 breaking)
Uses old Rust 2015
0.3.1 | Mar 12, 2018 |
---|---|
0.3.0 | Jan 24, 2018 |
0.2.1 | Oct 16, 2017 |
0.1.2 | Oct 14, 2017 |
0.0.1 | Sep 17, 2017 |
#763 in Graphics APIs
Used in 2 crates
(via voodoo_winit)
1.5MB
36K
SLoC
Voodoo - A high-performance Vulkan® API for Rust
Documentation | Change Log
Features:
- An intuitive and idiomatic interface
- Zero additional overhead
- No unnecessary allocations
- No intermediate structs or extra copying
- Builders compile to direct assignment
- Thread-safe allocation / destruction
- Safety escape hatches available everywhere
- A minimum of boilerplate
- Non-opinionated and nothing hidden
- Complete API coverage
Getting Started
Ensure that Vulkan drivers are installed for your device. Add the following to your project's Cargo.toml:
[dependencies]
voodoo = "0.3.1"
And add the following to your crate root (lib.rs or main.rs):
extern crate voodoo;
Example
Create an instance:
extern crate voodoo;
use voodoo::{Result as VdResult, Instance, ApplicationInfo, Loader};
use std::ffi::CString;
/// Initializes and returns a new loader and instance with all available
/// extension function pointers loaded.
fn init_instance() -> VdResult<Instance> {
let app_name = CString::new("Hello!")?;
let app_info = ApplicationInfo::builder()
.application_name(&app_name)
.application_version((1, 0, 0))
.api_version((1, 0, 0))
.build();
let loader = Loader::new()?;
Instance::builder()
.application_info(&app_info)
.enabled_extensions(&loader.enumerate_instance_extension_properties()?)
.build(loader)
}
fn main() {
let _instance = init_instance().unwrap();
}
See hello.rs
for a complete, working example adapted from
https://vulkan-tutorial.com/.
hello.rs
screenshot:
Status
- API coverage:
- Core: 100%
- Extensions: 70%
- Documentation: 30%
- Stability: 97%
Other Vulkan libraries in Rust
For a higher level, more opinionated, easier to use Vulkan API that does more for you see the Vulkano project.
Other low-ish level Rust libraries include dacite and ash. See vks for a direct ffi interface.
“Vulkan and the Vulkan logo are registered trademarks of the Khronos Group Inc.”
Dependencies
~3.5MB
~64K SLoC