summaryrefslogtreecommitdiff
path: root/gfx/gl/shaders/commonShadowPoint.gs
diff options
context:
space:
mode:
authorDan Goodliffe <dan@randomdan.homeip.net>2024-01-28 02:25:11 +0000
committerDan Goodliffe <dan@randomdan.homeip.net>2024-01-28 02:25:11 +0000
commit892513f81ed68e05d4dedb99f51de5bc46cab6b2 (patch)
tree19209bc3f1c58123bd497c7c555ac8c7d251c351 /gfx/gl/shaders/commonShadowPoint.gs
parentSet light view point uniform once (diff)
downloadilt-892513f81ed68e05d4dedb99f51de5bc46cab6b2.tar.bz2
ilt-892513f81ed68e05d4dedb99f51de5bc46cab6b2.tar.xz
ilt-892513f81ed68e05d4dedb99f51de5bc46cab6b2.zip
Geometry shader for single pass shadow maps
2D array texture, 4 levels, geometry shader outputs to each layer for a specific band, single scene rendering. Pending massive tidy up.
Diffstat (limited to 'gfx/gl/shaders/commonShadowPoint.gs')
-rw-r--r--gfx/gl/shaders/commonShadowPoint.gs22
1 files changed, 22 insertions, 0 deletions
diff --git a/gfx/gl/shaders/commonShadowPoint.gs b/gfx/gl/shaders/commonShadowPoint.gs
new file mode 100644
index 0000000..b008f29
--- /dev/null
+++ b/gfx/gl/shaders/commonShadowPoint.gs
@@ -0,0 +1,22 @@
+#version 330 core
+#extension GL_ARB_viewport_array : enable
+
+uniform mat4 viewProjection[4];
+uniform int viewProjections;
+in vec4 vworldPos[];
+layout(triangles) in;
+layout(triangle_strip, max_vertices = 12) out;
+
+void
+main()
+{
+ for (int vp = 0; vp < viewProjections; ++vp) {
+ for (int v = 0; v < vworldPos.length(); ++v) {
+ gl_Position = viewProjection[vp] * vworldPos[v];
+ gl_Position.z = max(gl_Position.z, -1);
+ gl_Layer = vp;
+ EmitVertex();
+ }
+ EndPrimitive();
+ }
+}