Skip to content

Latest commit

 

History

History
106 lines (77 loc) · 3.12 KB

README.md

File metadata and controls

106 lines (77 loc) · 3.12 KB

Voodoo - A high-performance Vulkan® API for Rust

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

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:

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