diff options
| author | Peter Fors <peter.fors@mindkiller.com> | 2025-04-03 20:02:00 +0200 |
|---|---|---|
| committer | Peter Fors <peter.fors@mindkiller.com> | 2025-04-03 20:02:00 +0200 |
| commit | 6274071e3857c1640cc5aef804cb86509ab312f9 (patch) | |
| tree | 1a4e56b3c3b4bfb4d8f0d2f588487d6e227c3b27 /shader.c | |
| parent | 971e51eebbf088f1ac590da1fc57e803eb1ee8cf (diff) | |
Move to glfw
Diffstat (limited to 'shader.c')
| -rw-r--r-- | shader.c | 44 |
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; +} |
