summaryrefslogtreecommitdiff
path: root/gfx/gl/shaders/shadowDynamicPointStencil.geom
diff options
context:
space:
mode:
authorDan Goodliffe <dan@randomdan.homeip.net>2026-02-06 19:56:46 +0000
committerDan Goodliffe <dan@randomdan.homeip.net>2026-02-06 19:56:46 +0000
commit99f5033fdc6e2701bf5bb76e89e100a846cbba80 (patch)
treeb72ec7920738132166daab88b6fdb895819dac04 /gfx/gl/shaders/shadowDynamicPointStencil.geom
parentAdd glDebugScope (diff)
parentMake similar array tidy-up to networkStraight shaders (diff)
downloadilt-99f5033fdc6e2701bf5bb76e89e100a846cbba80.tar.bz2
ilt-99f5033fdc6e2701bf5bb76e89e100a846cbba80.tar.xz
ilt-99f5033fdc6e2701bf5bb76e89e100a846cbba80.zip
Merge branch 'glmax'
Diffstat (limited to 'gfx/gl/shaders/shadowDynamicPointStencil.geom')
-rw-r--r--gfx/gl/shaders/shadowDynamicPointStencil.geom35
1 files changed, 35 insertions, 0 deletions
diff --git a/gfx/gl/shaders/shadowDynamicPointStencil.geom b/gfx/gl/shaders/shadowDynamicPointStencil.geom
new file mode 100644
index 0000000..df8be8d
--- /dev/null
+++ b/gfx/gl/shaders/shadowDynamicPointStencil.geom
@@ -0,0 +1,35 @@
+#version 460 core
+
+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;
+out vec3 texCoord;
+
+layout(points) in;
+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, viewAngle);
+ EmitVertex();
+ }
+ EndPrimitive();
+ }
+}