diff --git a/swgl/build.rs b/swgl/build.rs index ec5662fec0..82050e6e6c 100644 --- a/swgl/build.rs +++ b/swgl/build.rs @@ -8,14 +8,15 @@ extern crate glsl_to_cxx; use std::collections::HashSet; use std::fmt::Write; -fn write_load_shader(shaders: &[&str]) { +fn write_load_shader(shader_keys: &[&str]) { + let shaders: Vec<_> = shader_keys.iter().map(|s| s.replace(':', "_")).collect(); let mut load_shader = String::new(); - for s in shaders { + for s in &shaders { let _ = write!(load_shader, "#include \"{}.h\"\n", s); } load_shader.push_str("ProgramLoader load_shader(const char* name) {\n"); - for s in shaders { - let _ = write!(load_shader, " if (!strcmp(name, \"{}\")) {{ return {}_program::loader; }}\n", s, s); + for s in &shaders { + let _ = write!(load_shader, " if (!strcmp(name, \"{0}\")) {{ return {0}_program::loader; }}\n", s); } load_shader.push_str(" return nullptr;\n}\n"); std::fs::write(std::env::var("OUT_DIR").unwrap() + "/load_shader.h", load_shader).unwrap(); @@ -42,23 +43,21 @@ fn process_imports(shader_dir: &str, shader: &str, included: &mut HashSet( // GLSL requires that the version number comes first. output(gl_version_string); - let mut features_key = String::new(); + // Insert the shader name to make debugging easier. + let mut name_string = format!("// shader: {}", base_filename); for feat in features.lines() { const PREFIX: &'static str = "#define WR_FEATURE_"; if let Some(i) = feat.find(PREFIX) { if i + PREFIX.len() < feat.len() { - if !features_key.is_empty() { - features_key.push_str("_"); - } - features_key.push_str(&feat[i + PREFIX.len() ..]); + name_string.push('_'); + name_string.push_str(&feat[i + PREFIX.len() ..]); } } } - - // Insert the shader name to make debugging easier. - let name_string = format!("// shader: {} {}\n", base_filename, features_key); + name_string.push('\n'); output(&name_string); // Define a constant depending on whether we are compiling VS or FS.