summaryrefslogtreecommitdiff
path: root/gfx/gl/shaders/networkCurve.tcs
diff options
context:
space:
mode:
Diffstat (limited to 'gfx/gl/shaders/networkCurve.tcs')
-rw-r--r--gfx/gl/shaders/networkCurve.tcs43
1 files changed, 43 insertions, 0 deletions
diff --git a/gfx/gl/shaders/networkCurve.tcs b/gfx/gl/shaders/networkCurve.tcs
new file mode 100644
index 0000000..4221e64
--- /dev/null
+++ b/gfx/gl/shaders/networkCurve.tcs
@@ -0,0 +1,43 @@
+#version 460 core
+
+layout(vertices = 1) out;
+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[];
+
+flat out ivec3 c_apos[];
+flat out ivec3 c_bpos[];
+flat out ivec3 c_cpos[];
+flat out float c_reps[];
+flat out float c_aangle[];
+flat out float c_bangle[];
+flat out float c_radius[];
+
+int
+min2pow(float target)
+{
+ int x = 1;
+ while (x < target) {
+ x <<= 1;
+ }
+ return x;
+}
+
+void
+main()
+{
+ c_apos[gl_InvocationID] = apos[gl_InvocationID];
+ c_bpos[gl_InvocationID] = bpos[gl_InvocationID];
+ c_cpos[gl_InvocationID] = cpos[gl_InvocationID];
+ c_reps[gl_InvocationID] = reps[gl_InvocationID];
+ c_aangle[gl_InvocationID] = aangle[gl_InvocationID];
+ c_bangle[gl_InvocationID] = bangle[gl_InvocationID];
+ c_radius[gl_InvocationID] = radius[gl_InvocationID];
+
+ gl_TessLevelOuter[0] = 1;
+ gl_TessLevelOuter[1] = min2pow(reps[gl_InvocationID]);
+}