voodoo

Crates.iovoodoo
lib.rsvoodoo
version0.3.1
sourcesrc
created_at2017-09-17 16:37:55.542989
updated_at2018-03-12 00:26:02.321866
descriptionAn intuitive, idiomatic, unopinionated, zero-overhead Vulkan API
homepagehttps://github.com/cogciprocate/voodoo
repositoryhttps://github.com/cogciprocate/voodoo
max_upload_size
id32064
size1,841,918
Nick Sanders (c0gent)

documentation

https://docs.rs/voodoo

README

Voodoo - A high-performance Vulkan® API for Rust

Documentation | Change Log

Supported platforms

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:

hello_example_screenshot.jpg

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.”

Commit count: 133

cargo fmt