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()
|
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
|
// the program
|
||||||
let program = program!(&display,
|
let program = program!(&display,
|
||||||
140 => {
|
140 => {
|
||||||
@@ -119,77 +164,7 @@ fn main() {
|
|||||||
}
|
}
|
||||||
",
|
",
|
||||||
|
|
||||||
fragment: "
|
fragment: 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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
"
|
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|||||||
Reference in New Issue
Block a user