diff options
Diffstat (limited to 'src/main/resources/shaders/modules/complex.glsl')
| -rw-r--r-- | src/main/resources/shaders/modules/complex.glsl | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/src/main/resources/shaders/modules/complex.glsl b/src/main/resources/shaders/modules/complex.glsl new file mode 100644 index 0000000..87114ac --- /dev/null +++ b/src/main/resources/shaders/modules/complex.glsl @@ -0,0 +1,46 @@ +float cosh(float val) { + float tmp = exp(val); + float cosH = (tmp + 1.0 / tmp) / 2.0; + return cosH; +} + +float sinh(float val) { + float tmp = exp(val); + float sinH = (tmp - 1.0 / tmp) / 2.0; + return sinH; +} + +vec2 cmul(vec2 a, vec2 b) { + return vec2(a.x * b.x - a.y * b.y, a.x * b.y + a.y * b.x); +} + +vec2 cdiv(vec2 a, vec2 b) { + float denominator = b.x * b.x + b.y * b.y; + if (denominator == 0.) return a; + return cmul(a, vec2(b.x, -b.y)) / denominator; +} + +vec2 csin(vec2 a) { + return vec2(sin(a.x) * cosh(a.y), cos(a.x) * sinh(a.y)); +} + +vec2 ccos(vec2 a) { + return vec2(cos(a.x) * cosh(a.y), -sin(a.x) * sinh(a.y)); +} + +vec2 ctan(vec2 a) { + return cdiv(csin(a), ccos(a)); +} + +vec2 cpow(vec2 z, int n) { + vec2 res = z; + for (int i = 0; i < 20; i++) { + if (i >= n - 1) break; + res = cmul(z, res); + } + return res; +} + +vec2 cexp(vec2 z) { + return exp(z.x) * vec2(cos(z.y), sin(z.y)); +} |
