summaryrefslogtreecommitdiff
path: root/gfx/gl/shaders/networkCurve.tesc
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/networkCurve.tesc
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/networkCurve.tesc')
-rw-r--r--gfx/gl/shaders/networkCurve.tesc37
1 files changed, 37 insertions, 0 deletions
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();
+}