summaryrefslogtreecommitdiff
path: root/shader.c
diff options
context:
space:
mode:
authorPeter Fors <peter.fors@mindkiller.com>2025-04-03 20:02:00 +0200
committerPeter Fors <peter.fors@mindkiller.com>2025-04-03 20:02:00 +0200
commit6274071e3857c1640cc5aef804cb86509ab312f9 (patch)
tree1a4e56b3c3b4bfb4d8f0d2f588487d6e227c3b27 /shader.c
parent971e51eebbf088f1ac590da1fc57e803eb1ee8cf (diff)
Move to glfw
Diffstat (limited to 'shader.c')
-rw-r--r--shader.c44
1 files changed, 44 insertions, 0 deletions
diff --git a/shader.c b/shader.c
new file mode 100644
index 0000000..a6e16f6
--- /dev/null
+++ b/shader.c
@@ -0,0 +1,44 @@
+#include "shader.h"
+
+//==============================================================
+//
+// CPU CODE
+//
+//==============================================================
+// TONAL CONTROL CONSTANT GENERATION
+//--------------------------------------------------------------
+// Make sure to use same CRTS_MASK_* defines on CPU and GPU!!!!!
+//==============================================================
+/*
+ * dst - Output 4 float array.
+ *
+ * contrast - Increase contrast, ranges from,
+ * 1.0 = no change
+ * 2.0 = very strong contrast (over 2.0 for even more)
+ *
+ * saturation - Increase saturation, ranges from,
+ * 0.0 = no change
+ * 1.0 = increased saturation (over 1.0 for even more)
+ *
+ * thin, mask - Inputs shared between CrtsTone() and CrtsFilter()
+ *
+ */
+static void CrtsTone(float * restrict dst, float contrast, float saturation, float thin, float mask) {
+//--------------------------------------------------------------
+#ifdef CRTS_MASK_NONE
+ mask = 1.0f;
+#endif
+//--------------------------------------------------------------
+#ifdef CRTS_MASK_GRILLE_LITE
+ // Normal R mask is {1.0,mask,mask}
+ // LITE R mask is {mask,1.0,1.0}
+ mask = 0.5f + mask * 0.5f;
+#endif
+//--------------------------------------------------------------
+ float midOut = 0.18f / ((1.5f - thin) * (0.5f * mask + 0.5f));
+ float pMidIn = powf(0.18f, contrast);
+ dst[0] = contrast;
+ dst[1] = ((-pMidIn) + midOut) / ((1.0f - pMidIn) * midOut);
+ dst[2] = ((-pMidIn) * midOut + pMidIn) / (midOut * (-pMidIn) + midOut);
+ dst[3] = contrast + saturation;
+}