aboutsummaryrefslogtreecommitdiff
path: root/game/src/Game/Model/unit_colours.gdshader
blob: dd0f5e2a9ae786e506e05eca119a50276dd043d4 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

shader_type spatial;

render_mode blend_mix, depth_draw_opaque, cull_disabled, diffuse_burley, specular_schlick_ggx;

//hold all the textures for the units that need this shader to mix in their
//nation colours (mostly generic infantry units)
uniform sampler2D texture_albedo[32] : source_color, filter_linear_mipmap, repeat_enable;
uniform sampler2D texture_nation_colors_mask[32] : source_color, filter_linear_mipmap, repeat_enable;

instance uniform vec3 colour_primary : source_color;
instance uniform vec3 colour_secondary : source_color;
instance uniform vec3 colour_tertiary : source_color;

//used to access the right textures since different units (with different textures)
//will use this same shader
instance uniform uint tex_index_specular;
instance uniform uint tex_index_diffuse;

void fragment() {
   vec2 base_uv = UV;
   vec4 albedo_tex = texture(texture_albedo[tex_index_diffuse], base_uv);
   vec4 nation_colours_tex = texture(texture_nation_colors_mask[tex_index_specular], base_uv);

   //set colours to either be white (1,1,1) or the nation colour based on the mask
   vec3 primary_col = mix(vec3(1.0, 1.0, 1.0), colour_primary, nation_colours_tex.g);
   vec3 secondary_col = mix(vec3(1.0, 1.0, 1.0), colour_secondary, nation_colours_tex.b);
   vec3 tertiary_col = mix(vec3(1.0, 1.0, 1.0), colour_tertiary, nation_colours_tex.r);

   ALBEDO = albedo_tex.rgb * primary_col * secondary_col * tertiary_col;
}