techkaczynski.dev / code

summaryrefslogtreecommitdiff
path: root/res/sdr
diff options
context:
space:
mode:
Diffstat (limited to 'res/sdr')
-rw-r--r--res/sdr/mdl_foliage.vs43
-rw-r--r--res/sdr/mdl_two_sided_cutoff.fs51
-rw-r--r--res/sdr/mdl_vtx_lit.vs47
-rw-r--r--res/sdr/mdl_vtx_lit_cutoff.fs25
4 files changed, 133 insertions, 33 deletions
diff --git a/res/sdr/mdl_foliage.vs b/res/sdr/mdl_foliage.vs
new file mode 100644
index 0000000..db9d7b6
--- /dev/null
+++ b/res/sdr/mdl_foliage.vs
@@ -0,0 +1,43 @@
+#version 330
+
+in vec3 vertexPosition;
+in vec2 vertexTexCoord;
+in vec3 vertexNormal;
+in vec4 vertexColor;
+
+uniform mat4 mvp;
+uniform mat4 matNormal;
+
+uniform vec3 sun_direction;
+uniform vec3 sun_colour;
+uniform float sun_intensity;
+
+uniform vec3 moon_direction;
+uniform vec3 moon_colour;
+uniform float moon_intensity;
+
+uniform vec3 ambient_colour;
+uniform float ambient_intensity;
+
+uniform vec2 uv_tiling;
+uniform vec2 uv_offset;
+
+out vec2 frag_texcoord;
+out vec4 frag_colour;
+out vec3 frag_lighting;
+
+void main() {
+ vec3 world_normal = normalize((matNormal * vec4(vertexNormal, 0.0)).xyz);
+ float sun_diffuse = abs(dot(world_normal, sun_direction));
+ float moon_diffuse = abs(dot(world_normal, moon_direction));
+
+ vec3 ambient_light = ambient_colour * ambient_intensity;
+ vec3 sun_light = sun_colour * sun_intensity * sun_diffuse;
+ vec3 moon_light = moon_colour * moon_intensity * moon_diffuse;
+
+ frag_lighting = ambient_light + sun_light + moon_light;
+ frag_texcoord = vertexTexCoord * uv_tiling + uv_offset;
+ frag_colour = vertexColor;
+
+ gl_Position = mvp * vec4(vertexPosition, 1.0);
+}
diff --git a/res/sdr/mdl_two_sided_cutoff.fs b/res/sdr/mdl_two_sided_cutoff.fs
new file mode 100644
index 0000000..c4ac07e
--- /dev/null
+++ b/res/sdr/mdl_two_sided_cutoff.fs
@@ -0,0 +1,51 @@
+#version 330
+
+uniform sampler2D texture0;
+uniform vec4 colDiffuse;
+
+uniform vec3 sun_direction;
+uniform vec3 sun_colour;
+uniform float sun_intensity;
+
+uniform vec3 moon_direction;
+uniform vec3 moon_colour;
+uniform float moon_intensity;
+
+uniform vec3 ambient_colour;
+uniform float ambient_intensity;
+
+in vec2 frag_texcoord;
+in vec4 frag_colour;
+in vec3 frag_normal;
+
+out vec4 finalColor;
+
+void main() {
+ vec4 texel = texture(texture0, frag_texcoord) * frag_colour;
+
+ if (texel.a < 0.5) {
+ discard;
+ }
+
+ texel.rgb += colDiffuse.rgb;
+
+ vec3 normal = normalize(frag_normal);
+
+ if (!gl_FrontFacing) {
+ normal = -normal;
+ }
+
+ float sun_diffuse = max(dot(normal, sun_direction), 0.0);
+ float moon_diffuse = max(dot(normal, moon_direction), 0.0);
+
+ vec3 ambient_light = ambient_colour * ambient_intensity;
+ vec3 sun_light = sun_colour * sun_intensity * sun_diffuse;
+ vec3 moon_light = moon_colour * moon_intensity * moon_diffuse;
+
+ vec3 lighting = max(
+ ambient_light + sun_light + moon_light,
+ vec3(0.0)
+ );
+
+ finalColor = vec4(texel.rgb * lighting, 1.0);
+}
diff --git a/res/sdr/mdl_vtx_lit.vs b/res/sdr/mdl_vtx_lit.vs
index c69cb3d..d9b2bce 100644
--- a/res/sdr/mdl_vtx_lit.vs
+++ b/res/sdr/mdl_vtx_lit.vs
@@ -19,46 +19,27 @@ uniform float moon_intensity;
uniform vec3 ambient_colour;
uniform float ambient_intensity;
+uniform vec2 uv_tiling;
+uniform vec2 uv_offset;
+
out vec2 frag_texcoord;
out vec4 frag_colour;
out vec3 frag_lighting;
+out vec3 frag_normal;
-void
-main() {
- vec3 world_normal = normalize(
- (matNormal * vec4(vertexNormal, 0.0)).xyz
- );
-
- float sun_diffuse = max(
- dot(world_normal, sun_direction),
- 0.0
- );
-
- float moon_diffuse = max(
- dot(world_normal, moon_direction),
- 0.0
- );
-
- vec3 ambient_light =
- ambient_colour * ambient_intensity;
-
- vec3 sun_light =
- sun_colour *
- sun_intensity *
- sun_diffuse;
-
- vec3 moon_light =
- moon_colour *
- moon_intensity *
- moon_diffuse;
+void main() {
+ vec3 world_normal = normalize((matNormal * vec4(vertexNormal, 0.0)).xyz);
+ float sun_diffuse = max(dot(world_normal, sun_direction), 0.0);
+ float moon_diffuse = max(dot(world_normal, moon_direction), 0.0);
- frag_lighting =
- ambient_light +
- sun_light +
- moon_light;
+ vec3 ambient_light = ambient_colour * ambient_intensity;
+ vec3 sun_light = sun_colour * sun_intensity * sun_diffuse;
+ vec3 moon_light = moon_colour * moon_intensity * moon_diffuse;
- frag_texcoord = vertexTexCoord;
+ frag_lighting = ambient_light + sun_light + moon_light;
+ frag_texcoord = vertexTexCoord * uv_tiling + uv_offset;
frag_colour = vertexColor;
+ frag_normal = world_normal;
gl_Position = mvp * vec4(vertexPosition, 1.0);
}
diff --git a/res/sdr/mdl_vtx_lit_cutoff.fs b/res/sdr/mdl_vtx_lit_cutoff.fs
new file mode 100644
index 0000000..79b3ce2
--- /dev/null
+++ b/res/sdr/mdl_vtx_lit_cutoff.fs
@@ -0,0 +1,25 @@
+#version 330
+
+uniform sampler2D texture0;
+uniform vec4 colDiffuse;
+
+in vec2 frag_texcoord;
+in vec4 frag_colour;
+in vec3 frag_lighting;
+
+out vec4 finalColor;
+
+void
+main() {
+ vec4 texel = texture(texture0, frag_texcoord) * frag_colour;
+
+ if (texel.a < 0.5) {
+ discard;
+ }
+
+ texel.rgb += colDiffuse.rgb;
+
+ vec3 lighting = max(frag_lighting, vec3(0.0));
+
+ finalColor = vec4(texel.rgb * lighting, 1.0);
+}