Define dynamically the fragment shader

This commit is contained in:
2022-10-23 03:32:15 +02:00
parent f81a31c821
commit 0694b1ef92
+46 -71
View File
@@ -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();