dxplr 0.0.11

Rust wrapper around D3D12 and DXGI
Documentation
#[cfg(feature = "d3dcompiler")]
use dxplr::d3d;
#[cfg(feature = "d3dcompiler")]
use std::fs::File;
#[cfg(feature = "d3dcompiler")]
use std::io::{BufReader, Read};
#[cfg(feature = "d3dcompiler")]
use std::path::Path;

#[cfg(feature = "d3dcompiler")]
struct Include<'a> {
    current_dir: &'a Path,
}
#[cfg(feature = "d3dcompiler")]
impl<'a> Include<'a> {
    fn new(current_dir: &'a Path) -> Self {
        Self { current_dir }
    }
}
#[cfg(feature = "d3dcompiler")]
impl<'a> d3d::IInclude for Include<'a> {
    fn open(
        &self,
        include_type: d3d::IncludeType,
        filename: &str,
        _parent_data: Option<*const std::ffi::c_void>,
        data: &mut Vec<u8>,
    ) -> std::io::Result<()> {
        let file = match include_type {
            d3d::IncludeType::Local => File::open(self.current_dir.join(filename)).unwrap(),
            d3d::IncludeType::System => {
                let dir = Path::new("tests/hlsl");
                File::open(dir.join(filename)).unwrap()
            }
        };
        let mut reader = BufReader::new(file);
        reader.read_to_end(data).unwrap();
        Ok(())
    }
}

#[cfg(feature = "d3dcompiler")]
#[test]
fn d3dcompile_custom_include() {
    let file = File::open("tests/hlsl/simple.hlsl").unwrap();
    let mut reader = BufReader::new(file);
    let mut data = Vec::new();
    reader.read_to_end(&mut data).unwrap();
    let include = Include::new(Path::new("tests/hlsl"));
    let res = d3d::compile(
        &data,
        Some("simple.hlsl"),
        None,
        Some(Box::new(include)),
        "vs_main",
        "vs_5_0",
        Some(d3d::CompileFlags::Debug),
        None,
    );
    if let Err(e) = res {
        panic!("d3d::compile error = {}", e);
    }
}