summaryrefslogtreecommitdiff
path: root/client/shaders/shadow_shaders/pass1_trans_fragment.glsl
diff options
context:
space:
mode:
authorLiso <anlismon@gmail.com>2021-06-06 18:51:21 +0200
committerGitHub <noreply@github.com>2021-06-06 18:51:21 +0200
commitc47313db65f968559711ac1b505ef341a9872017 (patch)
tree63d9b1b2be512918e2361d96e4fb52ff1ec3f9de /client/shaders/shadow_shaders/pass1_trans_fragment.glsl
parent46f42e15c41cf4ab23c5ff4cd8a7d99d94d10d7b (diff)
downloadminetest-c47313db65f968559711ac1b505ef341a9872017.tar.gz
minetest-c47313db65f968559711ac1b505ef341a9872017.tar.bz2
minetest-c47313db65f968559711ac1b505ef341a9872017.zip
Shadow mapping render pass (#11244)
Co-authored-by: x2048 <codeforsmile@gmail.com>
Diffstat (limited to 'client/shaders/shadow_shaders/pass1_trans_fragment.glsl')
-rw-r--r--client/shaders/shadow_shaders/pass1_trans_fragment.glsl38
1 files changed, 38 insertions, 0 deletions
diff --git a/client/shaders/shadow_shaders/pass1_trans_fragment.glsl b/client/shaders/shadow_shaders/pass1_trans_fragment.glsl
new file mode 100644
index 000000000..9f9e5be8c
--- /dev/null
+++ b/client/shaders/shadow_shaders/pass1_trans_fragment.glsl
@@ -0,0 +1,38 @@
+uniform sampler2D ColorMapSampler;
+varying vec4 tPos;
+
+#ifdef COLORED_SHADOWS
+// c_precision of 128 fits within 7 base-10 digits
+const float c_precision = 128.0;
+const float c_precisionp1 = c_precision + 1.0;
+
+float packColor(vec3 color)
+{
+ return floor(color.b * c_precision + 0.5)
+ + floor(color.g * c_precision + 0.5) * c_precisionp1
+ + floor(color.r * c_precision + 0.5) * c_precisionp1 * c_precisionp1;
+}
+
+const vec3 black = vec3(0.0);
+#endif
+
+void main()
+{
+ vec4 col = texture2D(ColorMapSampler, gl_TexCoord[0].st);
+#ifndef COLORED_SHADOWS
+ if (col.a < 0.5)
+ discard;
+#endif
+
+ float depth = 0.5 + tPos.z * 0.5;
+ // ToDo: Liso: Apply movement on waving plants
+ // depth in [0, 1] for texture
+
+ //col.rgb = col.a == 1.0 ? vec3(1.0) : col.rgb;
+#ifdef COLORED_SHADOWS
+ float packedColor = packColor(mix(col.rgb, black, col.a));
+ gl_FragColor = vec4(depth, packedColor, 0.0,1.0);
+#else
+ gl_FragColor = vec4(depth, 0.0, 0.0, 1.0);
+#endif
+}