From 493af2b220d6ba7f883d35a6bb30cb5d07b4a4b5 Mon Sep 17 00:00:00 2001
From: Dan Goodliffe <dan@randomdan.homeip.net>
Date: Thu, 10 Oct 2024 01:01:24 +0100
Subject: Use foliage yaw rotation to select shadow stencil layer

---
 gfx/gl/shaders/shadowDynamicPointStencil.gs | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

(limited to 'gfx/gl')

diff --git a/gfx/gl/shaders/shadowDynamicPointStencil.gs b/gfx/gl/shaders/shadowDynamicPointStencil.gs
index b91937d..7e81d97 100644
--- a/gfx/gl/shaders/shadowDynamicPointStencil.gs
+++ b/gfx/gl/shaders/shadowDynamicPointStencil.gs
@@ -2,12 +2,14 @@
 #extension GL_ARB_viewport_array : enable
 
 const vec2[] corners = vec2[4](vec2(-1, -1), vec2(-1, 1), vec2(1, -1), vec2(1, 1));
+const float tau = 6.28318531;
 
 uniform mat4 viewProjection[4];
 uniform int viewProjections;
 uniform vec3 sizes[4];
 uniform float size;
 
+in float vmodelYaw[];
 in ivec3 vworldPos[];
 
 flat out vec3 scale;
@@ -19,13 +21,14 @@ layout(triangle_strip, max_vertices = 16) out;
 void
 main()
 {
+	int viewAngle = int(round(4.0 + (vmodelYaw[0] / tau))) % 8;
 	for (gl_Layer = 0; gl_Layer < viewProjections; ++gl_Layer) {
 		scale = 2.0 * size / sizes[gl_Layer];
 		vec4 pos = viewProjection[gl_Layer] * vec4(vworldPos[0], 1);
 		for (int c = 0; c < corners.length(); ++c) {
 			gl_Position = pos + vec4(scale.xy * corners[c], 0, 0);
 			gl_Position.z = max(gl_Position.z, -1);
-			texCoord = vec3((corners[c] * 0.5) + 0.5, 0);
+			texCoord = vec3((corners[c] * 0.5) + 0.5, viewAngle);
 			EmitVertex();
 		}
 		EndPrimitive();
-- 
cgit v1.2.3