You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
1.8 KiB
50 lines
1.8 KiB
use std::process::Command;
|
|
use std::path::Path;
|
|
use std::ffi::OsStr;
|
|
use std::fs::File;
|
|
use std::io::Write;
|
|
use std::io::prelude::*;
|
|
|
|
fn main() -> std::io::Result<()> {
|
|
println!("building shaders...");
|
|
//shaders path
|
|
let shaders = Path::new("./src/shaders");
|
|
//shader target path
|
|
let out = Command::new("mkdir")
|
|
.arg("target/shaders/")
|
|
.output();
|
|
|
|
let shader_target = Path::new("./target/shaders/");
|
|
//compile all glsl shaders
|
|
for entry in shaders.read_dir().expect("reading shader directory failed") {
|
|
if let Ok(entry) = entry {
|
|
let shader_path = entry.path();
|
|
println!("compiling shader: {:?}", shader_path);
|
|
let shader_path_string: String = "./target/shaders/".to_string() + shader_path.file_name().unwrap().to_str().unwrap() + ".spv";
|
|
let shader_file: &OsStr = OsStr::new::<str>(shader_path_string.as_str());
|
|
let out = Command::new("glslc")
|
|
.arg("-c")
|
|
.arg(shader_path)
|
|
.arg("-o")
|
|
.arg(shader_file)
|
|
.output();
|
|
}
|
|
}
|
|
//include all compiled shaders in shaders.rs file in src dir
|
|
let mut txt: String = String::new();
|
|
for entry in shader_target.read_dir().expect("reading compiled shader target directory failed") {
|
|
if let Ok(entry) = entry {
|
|
let bin_path = entry.path();
|
|
let bin_path_string = bin_path.file_name().unwrap().to_str().unwrap().to_string();
|
|
txt += &("const ".to_owned() +
|
|
&bin_path_string.replace(".spv", "").replace(".", "_").to_uppercase() +
|
|
" = include_bytes!(\"../target/shaders/" +
|
|
&bin_path_string +
|
|
"\");\n");
|
|
}
|
|
}
|
|
let mut file = File::create("./src/shaders.rs")?;
|
|
file.write_all(txt.as_bytes())?;
|
|
Ok(())
|
|
}
|