summaryrefslogtreecommitdiff
path: root/gfx/gl/shaders
diff options
context:
space:
mode:
Diffstat (limited to 'gfx/gl/shaders')
-rw-r--r--gfx/gl/shaders/commonShadowPoint.geom (renamed from gfx/gl/shaders/commonShadowPoint.gs)3
-rw-r--r--gfx/gl/shaders/directionalLight.frag (renamed from gfx/gl/shaders/directionalLight.fs)3
-rw-r--r--gfx/gl/shaders/dynamicPoint.vert (renamed from gfx/gl/shaders/dynamicPoint.vs)3
-rw-r--r--gfx/gl/shaders/dynamicPointInst.vert (renamed from gfx/gl/shaders/dynamicPointInst.vs)3
-rw-r--r--gfx/gl/shaders/fixedPoint.vert (renamed from gfx/gl/shaders/fixedPoint.vs)3
-rw-r--r--gfx/gl/shaders/landmass.frag (renamed from gfx/gl/shaders/landmass.fs)2
-rw-r--r--gfx/gl/shaders/landmass.vert (renamed from gfx/gl/shaders/landmass.vs)3
-rw-r--r--gfx/gl/shaders/lighting.frag (renamed from gfx/gl/shaders/lighting.fs)3
-rw-r--r--gfx/gl/shaders/lighting.vert (renamed from gfx/gl/shaders/lighting.vs)2
-rw-r--r--gfx/gl/shaders/material.frag (renamed from gfx/gl/shaders/material.fs)3
-rw-r--r--gfx/gl/shaders/materialInterface.glsl2
-rw-r--r--gfx/gl/shaders/network.frag (renamed from gfx/gl/shaders/network.fs)3
-rw-r--r--gfx/gl/shaders/networkCommon.glsl10
-rw-r--r--gfx/gl/shaders/networkCurve.geom17
-rw-r--r--gfx/gl/shaders/networkCurve.gs47
-rw-r--r--gfx/gl/shaders/networkCurve.tesc37
-rw-r--r--gfx/gl/shaders/networkCurve.tese45
-rw-r--r--gfx/gl/shaders/networkCurve.vert23
-rw-r--r--gfx/gl/shaders/networkCurve.vs29
-rw-r--r--gfx/gl/shaders/networkStraight.geom (renamed from gfx/gl/shaders/networkStraight.gs)12
-rw-r--r--gfx/gl/shaders/networkStraight.vert (renamed from gfx/gl/shaders/networkStraight.vs)13
-rw-r--r--gfx/gl/shaders/pointLight.frag (renamed from gfx/gl/shaders/pointLight.fs)3
-rw-r--r--gfx/gl/shaders/pointLight.geom (renamed from gfx/gl/shaders/pointLight.gs)4
-rw-r--r--gfx/gl/shaders/pointLight.vert (renamed from gfx/gl/shaders/pointLight.vs)2
-rw-r--r--gfx/gl/shaders/shadowDynamicPoint.vert (renamed from gfx/gl/shaders/shadowDynamicPoint.vs)2
-rw-r--r--gfx/gl/shaders/shadowDynamicPointInst.vert (renamed from gfx/gl/shaders/shadowDynamicPointInst.vs)2
-rw-r--r--gfx/gl/shaders/shadowDynamicPointInstWithTextures.frag (renamed from gfx/gl/shaders/shadowDynamicPointInstWithTextures.fs)3
-rw-r--r--gfx/gl/shaders/shadowDynamicPointInstWithTextures.geom3
-rw-r--r--gfx/gl/shaders/shadowDynamicPointInstWithTextures.gs3
-rw-r--r--gfx/gl/shaders/shadowDynamicPointInstWithTextures.vert (renamed from gfx/gl/shaders/shadowDynamicPointInstWithTextures.vs)3
-rw-r--r--gfx/gl/shaders/shadowDynamicPointStencil.frag (renamed from gfx/gl/shaders/shadowDynamicPointStencil.fs)3
-rw-r--r--gfx/gl/shaders/shadowDynamicPointStencil.geom (renamed from gfx/gl/shaders/shadowDynamicPointStencil.gs)3
-rw-r--r--gfx/gl/shaders/shadowDynamicPointStencil.vert (renamed from gfx/gl/shaders/shadowDynamicPointStencil.vs)3
-rw-r--r--gfx/gl/shaders/shadowLandmass.vert (renamed from gfx/gl/shaders/shadowLandmass.vs)2
-rw-r--r--gfx/gl/shaders/shadowStencil.frag (renamed from gfx/gl/shaders/shadowStencil.fs)3
-rw-r--r--gfx/gl/shaders/shadowStencil.geom (renamed from gfx/gl/shaders/shadowStencil.gs)3
-rw-r--r--gfx/gl/shaders/shadowStencil.vert (renamed from gfx/gl/shaders/shadowStencil.vs)3
-rw-r--r--gfx/gl/shaders/spotLight.frag (renamed from gfx/gl/shaders/spotLight.fs)3
-rw-r--r--gfx/gl/shaders/spotLight.geom (renamed from gfx/gl/shaders/spotLight.gs)4
-rw-r--r--gfx/gl/shaders/spotLight.vert (renamed from gfx/gl/shaders/spotLight.vs)2
-rw-r--r--gfx/gl/shaders/water.frag (renamed from gfx/gl/shaders/water.fs)3
-rw-r--r--gfx/gl/shaders/water.vert (renamed from gfx/gl/shaders/water.vs)2
42 files changed, 175 insertions, 150 deletions
diff --git a/gfx/gl/shaders/commonShadowPoint.gs b/gfx/gl/shaders/commonShadowPoint.geom
index 2413cc0..a515d97 100644
--- a/gfx/gl/shaders/commonShadowPoint.gs
+++ b/gfx/gl/shaders/commonShadowPoint.geom
@@ -1,5 +1,4 @@
-#version 330 core
-#extension GL_ARB_viewport_array : enable
+#version 460 core
ifdef(`TEXTURES', include(`materialDetail.glsl'))
diff --git a/gfx/gl/shaders/directionalLight.fs b/gfx/gl/shaders/directionalLight.frag
index 7ee3452..e5ebfb0 100644
--- a/gfx/gl/shaders/directionalLight.fs
+++ b/gfx/gl/shaders/directionalLight.frag
@@ -1,5 +1,4 @@
-#version 330 core
-#extension GL_ARB_shading_language_420pack : enable
+#version 460 core
const int MAX_MAPS = 4;
diff --git a/gfx/gl/shaders/dynamicPoint.vs b/gfx/gl/shaders/dynamicPoint.vert
index 97d2983..cd5fc26 100644
--- a/gfx/gl/shaders/dynamicPoint.vs
+++ b/gfx/gl/shaders/dynamicPoint.vert
@@ -1,5 +1,4 @@
-#version 330 core
-#extension GL_ARB_shading_language_420pack : enable
+#version 460 core
layout(binding = 1) uniform usampler2DRect materialData;
diff --git a/gfx/gl/shaders/dynamicPointInst.vs b/gfx/gl/shaders/dynamicPointInst.vert
index a85f9c9..46fead9 100644
--- a/gfx/gl/shaders/dynamicPointInst.vs
+++ b/gfx/gl/shaders/dynamicPointInst.vert
@@ -1,5 +1,4 @@
-#version 330 core
-#extension GL_ARB_shading_language_420pack : enable
+#version 460 core
layout(binding = 1) uniform usampler2DRect materialData;
diff --git a/gfx/gl/shaders/fixedPoint.vs b/gfx/gl/shaders/fixedPoint.vert
index 435b3d1..9201251 100644
--- a/gfx/gl/shaders/fixedPoint.vs
+++ b/gfx/gl/shaders/fixedPoint.vert
@@ -1,5 +1,4 @@
-#version 330 core
-#extension GL_ARB_shading_language_420pack : enable
+#version 460 core
layout(binding = 1) uniform usampler2DRect materialData;
diff --git a/gfx/gl/shaders/landmass.fs b/gfx/gl/shaders/landmass.frag
index 382260e..b5c7fa1 100644
--- a/gfx/gl/shaders/landmass.fs
+++ b/gfx/gl/shaders/landmass.frag
@@ -1,4 +1,4 @@
-#version 330 core
+#version 460 core
include(`materialOut.glsl')
in vec3 FragPos;
diff --git a/gfx/gl/shaders/landmass.vs b/gfx/gl/shaders/landmass.vert
index 44cb879..91fc7f8 100644
--- a/gfx/gl/shaders/landmass.vs
+++ b/gfx/gl/shaders/landmass.vert
@@ -1,5 +1,4 @@
-#version 330 core
-#extension GL_ARB_shading_language_420pack : enable
+#version 460 core
layout(location = 0) in ivec3 position;
layout(location = 1) in vec3 normal;
diff --git a/gfx/gl/shaders/lighting.fs b/gfx/gl/shaders/lighting.frag
index 4646b75..b5c6c8b 100644
--- a/gfx/gl/shaders/lighting.fs
+++ b/gfx/gl/shaders/lighting.frag
@@ -1,5 +1,4 @@
-#version 330 core
-#extension GL_ARB_shading_language_420pack : enable
+#version 460 core
out vec3 FragColor;
diff --git a/gfx/gl/shaders/lighting.vs b/gfx/gl/shaders/lighting.vert
index e07cd0a..1046379 100644
--- a/gfx/gl/shaders/lighting.vs
+++ b/gfx/gl/shaders/lighting.vert
@@ -1,4 +1,4 @@
-#version 330 core
+#version 460 core
in ivec4 position;
diff --git a/gfx/gl/shaders/material.fs b/gfx/gl/shaders/material.frag
index 37f2e27..18a3169 100644
--- a/gfx/gl/shaders/material.fs
+++ b/gfx/gl/shaders/material.frag
@@ -1,5 +1,4 @@
-#version 330 core
-#extension GL_ARB_shading_language_420pack : enable
+#version 460 core
layout(binding = 0) uniform sampler2D textureAlbedo;
diff --git a/gfx/gl/shaders/materialInterface.glsl b/gfx/gl/shaders/materialInterface.glsl
index 52eee80..bf78290 100644
--- a/gfx/gl/shaders/materialInterface.glsl
+++ b/gfx/gl/shaders/materialInterface.glsl
@@ -1,6 +1,6 @@
include(`materialDetail.glsl')
-define(INOUT, ifelse(TYPE, .fs, in, out))
+define(INOUT, ifelse(TYPE, .frag, in, out))
INOUT vec3 FragPos;
INOUT vec2 TexCoords;
diff --git a/gfx/gl/shaders/network.fs b/gfx/gl/shaders/network.frag
index 4e347b4..2f291ea 100644
--- a/gfx/gl/shaders/network.fs
+++ b/gfx/gl/shaders/network.frag
@@ -1,5 +1,4 @@
-#version 330 core
-#extension GL_ARB_shading_language_420pack : enable
+#version 460 core
include(`materialOut.glsl')
in vec3 rposition;
diff --git a/gfx/gl/shaders/networkCommon.glsl b/gfx/gl/shaders/networkCommon.glsl
index 0bc3c1c..7aa911d 100644
--- a/gfx/gl/shaders/networkCommon.glsl
+++ b/gfx/gl/shaders/networkCommon.glsl
@@ -12,13 +12,19 @@ out vec2 texCoord;
out vec3 rposition;
float
+viewPointDist(const ivec3 position)
+{
+ return length(vec3(viewPoint - position));
+}
+
+float
segDist(const ivec3 a, const ivec3 b)
{
- return min(distance(viewPoint, a), distance(viewPoint, b));
+ return min(viewPointDist(a), viewPointDist(b));
}
ifelse(
- TYPE, .gs,
+ TYPE, .geom,
// Begin: Geometry shader only function
void doVertex(const ivec3 end, const uint v, const float texY, const mat2 rot) {
ivec3 vpos = end + ivec3(rot * profile[v].xy, profile[v].z);
diff --git a/gfx/gl/shaders/networkCurve.geom b/gfx/gl/shaders/networkCurve.geom
new file mode 100644
index 0000000..4a5b3db
--- /dev/null
+++ b/gfx/gl/shaders/networkCurve.geom
@@ -0,0 +1,17 @@
+#version 460 core
+
+layout(lines) in;
+layout(triangle_strip, max_vertices = 10) out;
+
+flat in ivec3 pos[];
+flat in mat2 rot[];
+flat in float tpos[];
+flat in float dist[];
+
+include(`networkCommon.glsl')
+
+void
+main()
+{
+ doSeg(min(dist[0], dist[1]), pos[0], pos[1], tpos[0], tpos[1], rot[0], rot[1]);
+}
diff --git a/gfx/gl/shaders/networkCurve.gs b/gfx/gl/shaders/networkCurve.gs
deleted file mode 100644
index 7cb6c42..0000000
--- a/gfx/gl/shaders/networkCurve.gs
+++ /dev/null
@@ -1,47 +0,0 @@
-#version 330 core
-
-flat in ivec3 apos[];
-flat in ivec3 bpos[];
-flat in ivec3 cpos[];
-flat in float reps[];
-flat in float aangle[];
-flat in float bangle[];
-flat in float radius[];
-
-layout(points) in;
-layout(triangle_strip, max_vertices = GL_MAX_GEOMETRY_OUTPUT_VERTICES) out;
-
-const mat2 rot = mat2(1);
-
-include(`networkCommon.glsl')
-
-mat2
-getRot(float angle)
-{
- return mat2(cos(angle), sin(angle), -sin(angle), cos(angle));
-}
-
-void
-main()
-{
- float segs = clamp(
- round(reps[0] * radius[0] / 1000), 4, floor(uint(GL_MAX_GEOMETRY_OUTPUT_VERTICES) / (profileLength * 2u)));
- vec3 arcstep = vec3((bangle[0] - aangle[0]), // angle
- reps[0], // texture
- (bpos[0].z - apos[0].z)) // height
- / segs;
-
- ivec3 prevPos = apos[0];
- mat2 prevRot = getRot(aangle[0]);
- float prevTex = 0;
- for (vec3 arc = arcstep; arc.y < reps[0] - 0.01; arc += arcstep) {
- mat2 rot = getRot(arc.x + aangle[0]);
- ivec3 pos = cpos[0] + ivec3(rot * vec2(radius[0], 0), arc.z);
- float tex = arc.y;
- doSeg(segDist(prevPos, pos), pos, prevPos, tex, prevTex, rot, prevRot);
- prevPos = pos;
- prevRot = rot;
- prevTex = tex;
- }
- doSeg(segDist(prevPos, bpos[0]), bpos[0], prevPos, reps[0], prevTex, getRot(bangle[0]), prevRot);
-}
diff --git a/gfx/gl/shaders/networkCurve.tesc b/gfx/gl/shaders/networkCurve.tesc
new file mode 100644
index 0000000..5a6e449
--- /dev/null
+++ b/gfx/gl/shaders/networkCurve.tesc
@@ -0,0 +1,37 @@
+#version 460 core
+
+layout(vertices = 1) out;
+
+flat in ivec3 pos[][2];
+flat in ivec2 cpos[];
+flat in float reps[];
+flat in float angles[][2];
+flat in float radius[];
+
+flat out ivec3 c_pos[][2];
+flat out ivec2 c_cpos[];
+flat out float c_reps[];
+flat out float c_angles[][2];
+flat out float c_radius[];
+
+float
+segments()
+{
+ const float arc = angles[gl_InvocationID][0] - angles[gl_InvocationID][1];
+ const float error = 100.;
+ const float diff = acos(1.f - (error / radius[gl_InvocationID]));
+ return clamp(arc / diff, arc, 180);
+}
+
+void
+main()
+{
+ c_pos[gl_InvocationID] = pos[gl_InvocationID];
+ c_cpos[gl_InvocationID] = cpos[gl_InvocationID];
+ c_reps[gl_InvocationID] = reps[gl_InvocationID];
+ c_angles[gl_InvocationID] = angles[gl_InvocationID];
+ c_radius[gl_InvocationID] = radius[gl_InvocationID];
+
+ gl_TessLevelOuter[0] = 1;
+ gl_TessLevelOuter[1] = segments();
+}
diff --git a/gfx/gl/shaders/networkCurve.tese b/gfx/gl/shaders/networkCurve.tese
new file mode 100644
index 0000000..9cc31e2
--- /dev/null
+++ b/gfx/gl/shaders/networkCurve.tese
@@ -0,0 +1,45 @@
+#version 460 core
+
+layout(isolines, equal_spacing, cw) in;
+
+flat in ivec3 c_pos[][2];
+flat in ivec2 c_cpos[];
+flat in float c_reps[];
+flat in float c_angles[][2];
+flat in float c_radius[];
+
+flat out ivec3 pos;
+flat out mat2 rot;
+flat out float tpos;
+flat out float dist;
+
+const float startTolerance = 1. / 200.;
+const float endTolerance = 1. - startTolerance;
+
+include(`networkCommon.glsl')
+
+mat2
+getRot(float angle)
+{
+ return mat2(cos(angle), sin(angle), -sin(angle), cos(angle));
+}
+
+void
+main()
+{
+ const float angle = mix(c_angles[0][1], c_angles[0][0], gl_TessCoord.x);
+ rot = getRot(angle);
+ if (gl_TessCoord.x < startTolerance) {
+ pos = c_pos[0][1];
+ }
+ else if (gl_TessCoord.x > endTolerance) {
+ pos = c_pos[0][0];
+ }
+ else {
+ const int height = int(mix(c_pos[0][1].z, c_pos[0][0].z, gl_TessCoord.x));
+ pos = ivec3(c_cpos[0] + ivec2(rot * vec2(c_radius[0], 0)), height);
+ }
+
+ tpos = c_reps[0] * gl_TessCoord.x;
+ dist = viewPointDist(pos);
+}
diff --git a/gfx/gl/shaders/networkCurve.vert b/gfx/gl/shaders/networkCurve.vert
new file mode 100644
index 0000000..7e363d3
--- /dev/null
+++ b/gfx/gl/shaders/networkCurve.vert
@@ -0,0 +1,23 @@
+#version 460 core
+
+layout(location = 0) in ivec3 v_pos[2];
+layout(location = 2) in ivec3 v_centre;
+layout(location = 3) in float v_reps;
+layout(location = 4) in float v_angles[2];
+layout(location = 6) in float v_radius;
+
+flat out ivec3 pos[2];
+flat out ivec2 cpos;
+flat out float reps;
+flat out float angles[2];
+flat out float radius;
+
+void
+main()
+{
+ pos = v_pos;
+ cpos = v_centre.xy;
+ reps = v_reps;
+ angles = v_angles;
+ radius = v_radius;
+}
diff --git a/gfx/gl/shaders/networkCurve.vs b/gfx/gl/shaders/networkCurve.vs
deleted file mode 100644
index f51bb87..0000000
--- a/gfx/gl/shaders/networkCurve.vs
+++ /dev/null
@@ -1,29 +0,0 @@
-#version 330 core
-
-layout(location = 0) in ivec3 v_apos;
-layout(location = 1) in ivec3 v_bpos;
-layout(location = 2) in ivec3 v_centre;
-layout(location = 3) in float v_reps;
-layout(location = 4) in float v_aangle;
-layout(location = 5) in float v_bangle;
-layout(location = 6) in float v_radius;
-
-flat out ivec3 apos;
-flat out ivec3 bpos;
-flat out ivec3 cpos;
-flat out float reps;
-flat out float aangle;
-flat out float bangle;
-flat out float radius;
-
-void
-main()
-{
- apos = v_apos;
- bpos = v_bpos;
- cpos = v_centre;
- reps = v_reps;
- aangle = v_aangle;
- bangle = v_bangle;
- radius = v_radius;
-}
diff --git a/gfx/gl/shaders/networkStraight.gs b/gfx/gl/shaders/networkStraight.geom
index 51df5fb..a0e57c8 100644
--- a/gfx/gl/shaders/networkStraight.gs
+++ b/gfx/gl/shaders/networkStraight.geom
@@ -1,17 +1,17 @@
-#version 330 core
+#version 460 core
-flat in ivec3 apos[];
-flat in ivec3 bpos[];
+layout(points) in;
+layout(triangle_strip, max_vertices = 10) out;
+
+flat in ivec3 pos[][2];
flat in mat2 rot[];
flat in float reps[];
flat in float dist[];
-layout(points) in;
-layout(triangle_strip, max_vertices = 10) out;
include(`networkCommon.glsl')
void
main()
{
- doSeg(dist[0], apos[0], bpos[0], 0.f, reps[0], rot[0], rot[0]);
+ doSeg(dist[0], pos[0][0], pos[0][1], 0.f, reps[0], rot[0], rot[0]);
}
diff --git a/gfx/gl/shaders/networkStraight.vs b/gfx/gl/shaders/networkStraight.vert
index 55f9c4f..91ba955 100644
--- a/gfx/gl/shaders/networkStraight.vs
+++ b/gfx/gl/shaders/networkStraight.vert
@@ -1,12 +1,10 @@
-#version 330 core
+#version 460 core
-layout(location = 0) in ivec3 v_apos;
-layout(location = 1) in ivec3 v_bpos;
+layout(location = 0) in ivec3 v_pos[2];
layout(location = 2) in mat2 v_rot;
layout(location = 4) in float v_reps;
-flat out ivec3 apos;
-flat out ivec3 bpos;
+flat out ivec3 pos[2];
flat out mat2 rot;
flat out float reps;
flat out float dist;
@@ -16,9 +14,8 @@ include(`networkCommon.glsl')
void
main()
{
- apos = v_apos;
- bpos = v_bpos;
+ pos = v_pos;
rot = v_rot;
reps = v_reps;
- dist = segDist(v_apos, v_bpos);
+ dist = segDist(v_pos[0], v_pos[1]);
}
diff --git a/gfx/gl/shaders/pointLight.fs b/gfx/gl/shaders/pointLight.frag
index 7531d3e..bb2c453 100644
--- a/gfx/gl/shaders/pointLight.fs
+++ b/gfx/gl/shaders/pointLight.frag
@@ -1,5 +1,4 @@
-#version 330 core
-#extension GL_ARB_shading_language_420pack : enable
+#version 460 core
out vec3 FragColor;
diff --git a/gfx/gl/shaders/pointLight.gs b/gfx/gl/shaders/pointLight.geom
index fc1d7c3..1ee7e06 100644
--- a/gfx/gl/shaders/pointLight.gs
+++ b/gfx/gl/shaders/pointLight.geom
@@ -1,6 +1,4 @@
-#version 330 core
-#extension GL_ARB_enhanced_layouts : enable
-#extension GL_ARB_shading_language_420pack : enable
+#version 460 core
const vec3[] cube = vec3[]( // http://www.cs.umd.edu/gvil/papers/av_ts.pdf
vec3(-1, 1, 1), // Front-top-left
diff --git a/gfx/gl/shaders/pointLight.vs b/gfx/gl/shaders/pointLight.vert
index fbd031c..2fd5418 100644
--- a/gfx/gl/shaders/pointLight.vs
+++ b/gfx/gl/shaders/pointLight.vert
@@ -1,4 +1,4 @@
-#version 330 core
+#version 460 core
layout(location = 0) in vec3 v_position;
layout(location = 1) in vec3 v_colour;
diff --git a/gfx/gl/shaders/shadowDynamicPoint.vs b/gfx/gl/shaders/shadowDynamicPoint.vert
index 7335b9a..907378e 100644
--- a/gfx/gl/shaders/shadowDynamicPoint.vs
+++ b/gfx/gl/shaders/shadowDynamicPoint.vert
@@ -1,4 +1,4 @@
-#version 330 core
+#version 460 core
include(`meshIn.glsl')
diff --git a/gfx/gl/shaders/shadowDynamicPointInst.vs b/gfx/gl/shaders/shadowDynamicPointInst.vert
index d0eb649..da4a76f 100644
--- a/gfx/gl/shaders/shadowDynamicPointInst.vs
+++ b/gfx/gl/shaders/shadowDynamicPointInst.vert
@@ -1,4 +1,4 @@
-#version 330 core
+#version 460 core
include(`meshIn.glsl')
diff --git a/gfx/gl/shaders/shadowDynamicPointInstWithTextures.fs b/gfx/gl/shaders/shadowDynamicPointInstWithTextures.frag
index 47ce9c0..cad9d9d 100644
--- a/gfx/gl/shaders/shadowDynamicPointInstWithTextures.fs
+++ b/gfx/gl/shaders/shadowDynamicPointInstWithTextures.frag
@@ -1,5 +1,4 @@
-#version 330 core
-#extension GL_ARB_shading_language_420pack : enable
+#version 460 core
layout(binding = 3) uniform sampler2D textureAlbedo;
diff --git a/gfx/gl/shaders/shadowDynamicPointInstWithTextures.geom b/gfx/gl/shaders/shadowDynamicPointInstWithTextures.geom
new file mode 100644
index 0000000..3aaf9a8
--- /dev/null
+++ b/gfx/gl/shaders/shadowDynamicPointInstWithTextures.geom
@@ -0,0 +1,3 @@
+define(`TEXTURES', 1)
+
+include(`commonShadowPoint.geom')
diff --git a/gfx/gl/shaders/shadowDynamicPointInstWithTextures.gs b/gfx/gl/shaders/shadowDynamicPointInstWithTextures.gs
deleted file mode 100644
index e6e213e..0000000
--- a/gfx/gl/shaders/shadowDynamicPointInstWithTextures.gs
+++ /dev/null
@@ -1,3 +0,0 @@
-define(`TEXTURES', 1)
-
-include(`commonShadowPoint.gs')
diff --git a/gfx/gl/shaders/shadowDynamicPointInstWithTextures.vs b/gfx/gl/shaders/shadowDynamicPointInstWithTextures.vert
index a76c87f..41a47b0 100644
--- a/gfx/gl/shaders/shadowDynamicPointInstWithTextures.vs
+++ b/gfx/gl/shaders/shadowDynamicPointInstWithTextures.vert
@@ -1,5 +1,4 @@
-#version 330 core
-#extension GL_ARB_shading_language_420pack : enable
+#version 460 core
layout(binding = 4) uniform usampler2DRect materialData;
diff --git a/gfx/gl/shaders/shadowDynamicPointStencil.fs b/gfx/gl/shaders/shadowDynamicPointStencil.frag
index fe91b07..d6b8a0e 100644
--- a/gfx/gl/shaders/shadowDynamicPointStencil.fs
+++ b/gfx/gl/shaders/shadowDynamicPointStencil.frag
@@ -1,5 +1,4 @@
-#version 330 core
-#extension GL_ARB_shading_language_420pack : enable
+#version 460 core
layout(binding = 0) uniform sampler2DArray stencilDepth;
flat in vec3 scale;
diff --git a/gfx/gl/shaders/shadowDynamicPointStencil.gs b/gfx/gl/shaders/shadowDynamicPointStencil.geom
index 7e81d97..df8be8d 100644
--- a/gfx/gl/shaders/shadowDynamicPointStencil.gs
+++ b/gfx/gl/shaders/shadowDynamicPointStencil.geom
@@ -1,5 +1,4 @@
-#version 330 core
-#extension GL_ARB_viewport_array : enable
+#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;
diff --git a/gfx/gl/shaders/shadowDynamicPointStencil.vs b/gfx/gl/shaders/shadowDynamicPointStencil.vert
index 0dd2d79..b750b3e 100644
--- a/gfx/gl/shaders/shadowDynamicPointStencil.vs
+++ b/gfx/gl/shaders/shadowDynamicPointStencil.vert
@@ -1,5 +1,4 @@
-#version 330 core
-#extension GL_ARB_shading_language_420pack : enable
+#version 460 core
layout(location = 0) in ivec3 worldPos;
layout(location = 1) in float modelYaw;
diff --git a/gfx/gl/shaders/shadowLandmass.vs b/gfx/gl/shaders/shadowLandmass.vert
index becf142..cf68fe5 100644
--- a/gfx/gl/shaders/shadowLandmass.vs
+++ b/gfx/gl/shaders/shadowLandmass.vert
@@ -1,4 +1,4 @@
-#version 330 core
+#version 460 core
layout(location = 0) in ivec3 position;
diff --git a/gfx/gl/shaders/shadowStencil.fs b/gfx/gl/shaders/shadowStencil.frag
index 1164cc9..3269f69 100644
--- a/gfx/gl/shaders/shadowStencil.fs
+++ b/gfx/gl/shaders/shadowStencil.frag
@@ -1,5 +1,4 @@
-#version 330 core
-#extension GL_ARB_shading_language_420pack : enable
+#version 460 core
layout(binding = 0) uniform sampler2D textureAlbedo;
diff --git a/gfx/gl/shaders/shadowStencil.gs b/gfx/gl/shaders/shadowStencil.geom
index 2c3f9bd..53a4c19 100644
--- a/gfx/gl/shaders/shadowStencil.gs
+++ b/gfx/gl/shaders/shadowStencil.geom
@@ -1,5 +1,4 @@
-#version 330 core
-#extension GL_ARB_viewport_array : enable
+#version 460 core
include(`materialDetail.glsl')
diff --git a/gfx/gl/shaders/shadowStencil.vs b/gfx/gl/shaders/shadowStencil.vert
index a15c4fb..e6286e6 100644
--- a/gfx/gl/shaders/shadowStencil.vs
+++ b/gfx/gl/shaders/shadowStencil.vert
@@ -1,5 +1,4 @@
-#version 330 core
-#extension GL_ARB_shading_language_420pack : enable
+#version 460 core
layout(binding = 1) uniform usampler2DRect materialData;
diff --git a/gfx/gl/shaders/spotLight.fs b/gfx/gl/shaders/spotLight.frag
index ad33458..1305dbd 100644
--- a/gfx/gl/shaders/spotLight.fs
+++ b/gfx/gl/shaders/spotLight.frag
@@ -1,5 +1,4 @@
-#version 330 core
-#extension GL_ARB_shading_language_420pack : enable
+#version 460 core
out vec3 FragColor;
diff --git a/gfx/gl/shaders/spotLight.gs b/gfx/gl/shaders/spotLight.geom
index 194812a..fec191e 100644
--- a/gfx/gl/shaders/spotLight.gs
+++ b/gfx/gl/shaders/spotLight.geom
@@ -1,6 +1,4 @@
-#version 330 core
-#extension GL_ARB_enhanced_layouts : enable
-#extension GL_ARB_shading_language_420pack : enable
+#version 460 core
const vec3[] pyramid = vec3[]( // four-sided
vec3(0, 0, 0), // Apex
diff --git a/gfx/gl/shaders/spotLight.vs b/gfx/gl/shaders/spotLight.vert
index e0196c3..36d2ee5 100644
--- a/gfx/gl/shaders/spotLight.vs
+++ b/gfx/gl/shaders/spotLight.vert
@@ -1,4 +1,4 @@
-#version 330 core
+#version 460 core
layout(location = 0) in vec3 v_position;
layout(location = 1) in vec3 v_direction;
diff --git a/gfx/gl/shaders/water.fs b/gfx/gl/shaders/water.frag
index 0918d9f..a09e754 100644
--- a/gfx/gl/shaders/water.fs
+++ b/gfx/gl/shaders/water.frag
@@ -1,5 +1,4 @@
-#version 330 core
-#extension GL_ARB_shading_language_420pack : enable
+#version 460 core
in vec3 FragPos;
in vec2 TexCoords;
diff --git a/gfx/gl/shaders/water.vs b/gfx/gl/shaders/water.vert
index 58bf7b6..60e4fb8 100644
--- a/gfx/gl/shaders/water.vs
+++ b/gfx/gl/shaders/water.vert
@@ -1,4 +1,4 @@
-#version 330 core
+#version 460 core
layout(location = 0) in ivec3 position;
out vec3 FragPos;