extern crate shaderc;
use shaderc::Compiler;
use shaderc::ShaderKind;
use std::env;
use std::fs;
use std::path::MAIN_SEPARATOR;
fn main() {
build_shaders();
}
fn build_shaders() {
let mut compiler = Compiler::new().unwrap();
let out_dir = env::var("OUT_DIR").unwrap();
build_shader(
&mut compiler,
&format!("{}/shader.vert.spirv", out_dir),
&pt("src/shaders/shader.vert"),
ShaderKind::Vertex,
);
build_shader(
&mut compiler,
&format!("{}/shader.frag.spirv", out_dir),
&pt("src/shaders/shader.frag"),
ShaderKind::Fragment,
);
}
fn build_shader(compiler: &mut Compiler, out_path: &str, path: &str, kind: ShaderKind) {
println!("cargo:rerun-if-changed={}", path);
let src = fs::read_to_string(path).unwrap();
let name = path.rsplit(MAIN_SEPARATOR).next().unwrap_or(path);
let spirv = compiler
.compile_into_spirv(&src, kind, name, "main", None)
.unwrap();
let data = spirv.as_binary_u8();
fs::write(out_path, &data).unwrap();
}
fn pt(s: &str) -> String {
s.replace("/", &format!("{}", MAIN_SEPARATOR))
}