Define dynamically the fragment shader
This commit is contained in:
+46
-71
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user