diff --git a/src/main.rs b/src/main.rs index bfcd642..2be4de1 100644 --- a/src/main.rs +++ b/src/main.rs @@ -65,6 +65,51 @@ fn main() { glium::texture::SrgbTexture2d::new(&display, image).unwrap() }); + let mut uniform_sampler_2d_str: String = "".to_string(); + for i in 1..BIOMES_NUMBER { + uniform_sampler_2d_str += &format!(", tex{}", i); + } + + let mut switch_v_biome_str: String = "".to_string(); + for i in 0..BIOMES_NUMBER { + switch_v_biome_str += &format!( + " + case {}u: + f_color = texture(tex{}, v_tex_coords); + break; + ", + i, i + ); + } + switch_v_biome_str += &format!( + " + default: // case {}u: + f_color = texture(tex{}, v_tex_coords); + ", + BIOMES_NUMBER - 1, + BIOMES_NUMBER - 1 + ); + + let fragment = &format!( + " + #version 140 + + in vec2 v_tex_coords; + flat in uint v_biome; + + out vec4 f_color; + + uniform sampler2D tex0{}; + + void main() {{ + switch (v_biome) {{ + {} + }} + }} + ", + uniform_sampler_2d_str, switch_v_biome_str + ); + // the program let program = program!(&display, 140 => { @@ -119,77 +164,7 @@ fn main() { } ", - fragment: " - #version 140 - - in vec2 v_tex_coords; - flat in uint v_biome; - - out vec4 f_color; - - uniform sampler2D tex0, tex1, tex2, tex3, tex4, tex5, tex6, tex7, tex8, tex9, tex10, tex11, tex12, tex13, tex14, tex15, tex16, tex17, tex18; - - void main() { - switch (v_biome) { - case 0u: - f_color = texture(tex0, v_tex_coords); - break; - case 1u: - f_color = texture(tex1, v_tex_coords); - break; - case 2u: - f_color = texture(tex2, v_tex_coords); - break; - case 3u: - f_color = texture(tex3, v_tex_coords); - break; - case 4u: - f_color = texture(tex4, v_tex_coords); - break; - case 5u: - f_color = texture(tex5, v_tex_coords); - break; - case 6u: - f_color = texture(tex6, v_tex_coords); - break; - case 7u: - f_color = texture(tex7, v_tex_coords); - break; - case 8u: - f_color = texture(tex8, v_tex_coords); - break; - case 9u: - f_color = texture(tex9, v_tex_coords); - break; - case 10u: - f_color = texture(tex10, v_tex_coords); - break; - case 11u: - f_color = texture(tex11, v_tex_coords); - break; - case 12u: - f_color = texture(tex12, v_tex_coords); - break; - case 13u: - f_color = texture(tex13, v_tex_coords); - break; - case 14u: - f_color = texture(tex14, v_tex_coords); - break; - case 15u: - f_color = texture(tex15, v_tex_coords); - break; - case 16u: - f_color = texture(tex16, v_tex_coords); - break; - case 17u: - f_color = texture(tex17, v_tex_coords); - break; - default: // case 18u: - f_color = texture(tex18, v_tex_coords); - } - } - " + fragment: fragment, }, ) .unwrap();