aboutsummaryrefslogtreecommitdiff
path: root/game/src/Game/Model/unit_colours.gdshader
diff options
context:
space:
mode:
author hop311 <hop3114@gmail.com>2024-05-05 19:36:21 +0200
committer hop311 <hop3114@gmail.com>2024-05-07 23:06:38 +0200
commit2ac43ba7df3b2c3dc40c6b87c2bc57c4b02ffa42 (patch)
treef251adec091f704d889360a0eb32bd4ad018192d /game/src/Game/Model/unit_colours.gdshader
parentc29cc0dabe3e3c7d03280e74d2d10fc3cc479c7f (diff)
Add GDScript XAC and XSM loaders
Diffstat (limited to 'game/src/Game/Model/unit_colours.gdshader')
-rw-r--r--game/src/Game/Model/unit_colours.gdshader31
1 files changed, 31 insertions, 0 deletions
diff --git a/game/src/Game/Model/unit_colours.gdshader b/game/src/Game/Model/unit_colours.gdshader
new file mode 100644
index 0000000..dd0f5e2
--- /dev/null
+++ b/game/src/Game/Model/unit_colours.gdshader
@@ -0,0 +1,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;
+}