- 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
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;
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/.
To run the example, clone this repo
(git clone https://github.com/cogciprocate/voodoo.git
, cd voodoo
,
then cargo run --example hello --release
.
hello.rs
screenshot:
- API coverage:
- Core: 100%
- Extensions: 70%
- Documentation: 30%
- Stability: 97%
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.”