diff --git a/src/main.rs b/src/main.rs index e4955bd..d4cfa1a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -73,17 +73,21 @@ fn main() { in uint index; in float altitude; + in uint biome; in uvec2 chunk; out vec2 v_tex_coords; + flat out uint v_biome; const uint TILE_SIZE = 4u; void main() { uint index_mod = index % 6u; uint index_div = index / 6u; + uint z = index_div / 250u; uint x = index_div % 250u; + if(index_mod == 0u) v_tex_coords = vec2(0, 0); else if(index_mod == 1u || index_mod == 4u) @@ -102,6 +106,7 @@ fn main() { x++; z++; } + v_biome = biome; x *= TILE_SIZE; z *= TILE_SIZE; @@ -116,10 +121,12 @@ fn main() { fragment: " #version 140 + // warning: that way maybe have a null normal flat in vec3 normal; in vec2 v_tex_coords; + flat in uint v_biome; + out vec4 f_color; - flat in uint biome; uniform sampler2D tex0, tex1, tex2, tex3, tex4, tex5, tex6, tex7, tex8, tex9, tex10, tex11, tex12, tex13, tex14, tex15, tex16, tex17, tex18; @@ -127,26 +134,67 @@ fn main() { void main() { float lum = max(dot(normalize(normal), normalize(LIGHT)), 0.0); + vec4 tex; - if(biome == 0u) f_color = (0.3 + 0.7 * lum, 1.0) * texture(tex0, v_tex_coords); - else if(biome == 1u) f_color = (0.3 + 0.7 * lum, 1.0) * texture(tex1, v_tex_coords); - else if(biome == 2u) f_color = (0.3 + 0.7 * lum, 1.0) * texture(tex2, v_tex_coords); - else if(biome == 3u) f_color = (0.3 + 0.7 * lum, 1.0) * texture(tex3, v_tex_coords); - else if(biome == 4u) f_color = (0.3 + 0.7 * lum, 1.0) * texture(tex4, v_tex_coords); - else if(biome == 5u) f_color = (0.3 + 0.7 * lum, 1.0) * texture(tex5, v_tex_coords); - else if(biome == 6u) f_color = (0.3 + 0.7 * lum, 1.0) * texture(tex6, v_tex_coords); - else if(biome == 7u) f_color = (0.3 + 0.7 * lum, 1.0) * texture(tex7, v_tex_coords); - else if(biome == 8u) f_color = (0.3 + 0.7 * lum, 1.0) * texture(tex8, v_tex_coords); - else if(biome == 9u) f_color = (0.3 + 0.7 * lum, 1.0) * texture(tex9, v_tex_coords); - else if(biome == 10u) f_color = (0.3 + 0.7 * lum, 1.0) * texture(tex10, v_tex_coords); - else if(biome == 11u) f_color = (0.3 + 0.7 * lum, 1.0) * texture(tex11, v_tex_coords); - else if(biome == 12u) f_color = (0.3 + 0.7 * lum, 1.0) * texture(tex12, v_tex_coords); - else if(biome == 13u) f_color = (0.3 + 0.7 * lum, 1.0) * texture(tex13, v_tex_coords); - else if(biome == 14u) f_color = (0.3 + 0.7 * lum, 1.0) * texture(tex14, v_tex_coords); - else if(biome == 15u) f_color = (0.3 + 0.7 * lum, 1.0) * texture(tex15, v_tex_coords); - else if(biome == 16u) f_color = (0.3 + 0.7 * lum, 1.0) * texture(tex16, v_tex_coords); - else if(biome == 17u) f_color = (0.3 + 0.7 * lum, 1.0) * texture(tex17, v_tex_coords); - else /*if(biome == 18u)*/ f_color = (0.3 + 0.7 * lum, 1.0) * texture(tex18, v_tex_coords); + switch (v_biome) { + case 0u: + tex = texture(tex0, v_tex_coords); + break; + case 1u: + tex = texture(tex1, v_tex_coords); + break; + case 2u: + tex = texture(tex2, v_tex_coords); + break; + case 3u: + tex = texture(tex3, v_tex_coords); + break; + case 4u: + tex = texture(tex4, v_tex_coords); + break; + case 5u: + tex = texture(tex5, v_tex_coords); + break; + case 6u: + tex = texture(tex6, v_tex_coords); + break; + case 7u: + tex = texture(tex7, v_tex_coords); + break; + case 8u: + tex = texture(tex8, v_tex_coords); + break; + case 9u: + tex = texture(tex9, v_tex_coords); + break; + case 10u: + tex = texture(tex10, v_tex_coords); + break; + case 11u: + tex = texture(tex11, v_tex_coords); + break; + case 12u: + tex = texture(tex12, v_tex_coords); + break; + case 13u: + tex = texture(tex13, v_tex_coords); + break; + case 14u: + tex = texture(tex14, v_tex_coords); + break; + case 15u: + tex = texture(tex15, v_tex_coords); + break; + case 16u: + tex = texture(tex16, v_tex_coords); + break; + case 17u: + tex = texture(tex17, v_tex_coords); + break; + default: // case 18u: + tex = texture(tex18, v_tex_coords); + } + f_color = (0.3 + 0.7 * lum, 1.0) * tex; } " }, diff --git a/src/support/camera.rs b/src/support/camera.rs index a06a0e4..3abdd90 100644 --- a/src/support/camera.rs +++ b/src/support/camera.rs @@ -18,7 +18,7 @@ impl CameraState { CameraState { aspect_ratio: 1_024.0 / 768.0, // The second coordinate is for the altitude. - position: (3_646.41, 10.3622, 13_113.7), + position: (3_646.41, 12.3622, 13_113.7), direction: (0.0, 0.0, -1.0), moving_up: false, moving_left: false,