From acd56d4e6b4c4522abc515b48357213fbe3be88a Mon Sep 17 00:00:00 2001 From: Daniel Bulant Date: Sun, 1 Jan 2023 11:01:45 +0100 Subject: [PATCH] some basic shaders --- src/lib/shaders/basic.vert | 3 +++ src/lib/shaders/utils/brickTile.frag | 10 ++++++++++ src/lib/shaders/utils/circle.frag | 8 ++++++++ src/lib/shaders/utils/cog.frag | 17 +++++++++++++++++ src/lib/shaders/utils/move.frag | 5 +++++ src/lib/shaders/utils/polygon.frag | 21 +++++++++++++++++++++ src/lib/shaders/utils/random.frag | 27 +++++++++++++++++++++++++++ src/lib/shaders/utils/repeat.frag | 9 +++++++++ src/lib/shaders/utils/rotate2d.frag | 14 ++++++++++++++ src/lib/shaders/utils/scale.frag | 14 ++++++++++++++ 10 files changed, 128 insertions(+) create mode 100644 src/lib/shaders/basic.vert create mode 100644 src/lib/shaders/utils/brickTile.frag create mode 100644 src/lib/shaders/utils/circle.frag create mode 100644 src/lib/shaders/utils/cog.frag create mode 100644 src/lib/shaders/utils/move.frag create mode 100644 src/lib/shaders/utils/polygon.frag create mode 100644 src/lib/shaders/utils/random.frag create mode 100644 src/lib/shaders/utils/repeat.frag create mode 100644 src/lib/shaders/utils/rotate2d.frag create mode 100644 src/lib/shaders/utils/scale.frag diff --git a/src/lib/shaders/basic.vert b/src/lib/shaders/basic.vert new file mode 100644 index 0000000..89c5662 --- /dev/null +++ b/src/lib/shaders/basic.vert @@ -0,0 +1,3 @@ +void main() { + gl_Position = vec4( position, 1.0 ); +} \ No newline at end of file diff --git a/src/lib/shaders/utils/brickTile.frag b/src/lib/shaders/utils/brickTile.frag new file mode 100644 index 0000000..783a120 --- /dev/null +++ b/src/lib/shaders/utils/brickTile.frag @@ -0,0 +1,10 @@ +precision mediump float; + +vec2 brickTile(vec2 _st, float _zoom){ + _st *= _zoom; + + // Here is where the offset is happening + _st.x += step(1., mod(_st.y,2.0)) * 0.5; + + return fract(_st); +} \ No newline at end of file diff --git a/src/lib/shaders/utils/circle.frag b/src/lib/shaders/utils/circle.frag new file mode 100644 index 0000000..e01a083 --- /dev/null +++ b/src/lib/shaders/utils/circle.frag @@ -0,0 +1,8 @@ +precision mediump float; + +mediump float circle(in vec2 _st, in float _radius){ + vec2 dist = _st-vec2(0.5); + return 1.-smoothstep(_radius-(_radius*0.01), + _radius+(_radius*0.01), + dot(dist,dist)*4.0); +} \ No newline at end of file diff --git a/src/lib/shaders/utils/cog.frag b/src/lib/shaders/utils/cog.frag new file mode 100644 index 0000000..432a1fb --- /dev/null +++ b/src/lib/shaders/utils/cog.frag @@ -0,0 +1,17 @@ +precision mediump float; + +mediump float cog(in vec2 st){ + vec2 pos = vec2(0.5)-st; + + float r = length(pos)*2.0; + float a = atan(pos.y,pos.x); + + return smoothstep( + -1.2, // lower cog part + 1.5, // upper cog part + cos( + a * 10. // number of teeth + )) + *0.5 // inner size + + 0.5; // outer size +} \ No newline at end of file diff --git a/src/lib/shaders/utils/move.frag b/src/lib/shaders/utils/move.frag new file mode 100644 index 0000000..909b270 --- /dev/null +++ b/src/lib/shaders/utils/move.frag @@ -0,0 +1,5 @@ +precision mediump float; + +vec2 move(in vec2 st, in vec2 move) { + return st + move; +} \ No newline at end of file diff --git a/src/lib/shaders/utils/polygon.frag b/src/lib/shaders/utils/polygon.frag new file mode 100644 index 0000000..cdddd90 --- /dev/null +++ b/src/lib/shaders/utils/polygon.frag @@ -0,0 +1,21 @@ +precision mediump float; + +#define PI 3.14159265359 +#define TWO_PI 6.28318530718 + +// sides should probably be an integer, but it can be abused for morphin effects +mediump float polygon(in vec2 st, in float sides){ + vec3 color = vec3(0.0); + + // Remap the space to -1. to 1. + st = st *2. -1.; + + // Angle and radius from the current pixel + float a = atan(st.x,st.y)+PI; + float r = TWO_PI/float(sides); + + // Shaping function that modulate the distance + return cos(floor(0.500+a/r)*r-a)*length(st); + // when it's not 0.5 exactly, the triangles will not match perfectly for the polygon to take shape. Can be abused for cool effects + // (possibly transitions) +} diff --git a/src/lib/shaders/utils/random.frag b/src/lib/shaders/utils/random.frag new file mode 100644 index 0000000..dfb1713 --- /dev/null +++ b/src/lib/shaders/utils/random.frag @@ -0,0 +1,27 @@ +precision mediump float; + +float random (vec2 st) { + return fract(sin(dot(st.xy, + vec2(12.9898,78.233)))* + 43758.5453123); +} + +vec2 random2(vec2 st){ + st = vec2( dot(st,vec2(127.1,311.7)), + dot(st,vec2(269.5,183.3)) ); + return -1.0 + 2.0*fract(sin(st)*43758.5453123); +} + +// Gradient Noise by Inigo Quilez - iq/2013 +// https://www.shadertoy.com/view/XdXGW8 +float noise(vec2 st) { + vec2 i = floor(st); + vec2 f = fract(st); + + vec2 u = f*f*(3.0-2.0*f); + + return mix( mix( dot( random2(i + vec2(0.0,0.0) ), f - vec2(0.0,0.0) ), + dot( random2(i + vec2(1.0,0.0) ), f - vec2(1.0,0.0) ), u.x), + mix( dot( random2(i + vec2(0.0,1.0) ), f - vec2(0.0,1.0) ), + dot( random2(i + vec2(1.0,1.0) ), f - vec2(1.0,1.0) ), u.x), u.y); +} \ No newline at end of file diff --git a/src/lib/shaders/utils/repeat.frag b/src/lib/shaders/utils/repeat.frag new file mode 100644 index 0000000..627371d --- /dev/null +++ b/src/lib/shaders/utils/repeat.frag @@ -0,0 +1,9 @@ +precision mediump float; + +vec2 repeat(in vec2 st, in float repeat) { + return st * repeat; +} + +vec2 repeat(in vec2 st, in vec2 repeat) { + return vec2(st.x * repeat.x, st.y * repeat.y); +} \ No newline at end of file diff --git a/src/lib/shaders/utils/rotate2d.frag b/src/lib/shaders/utils/rotate2d.frag new file mode 100644 index 0000000..1a6f1f6 --- /dev/null +++ b/src/lib/shaders/utils/rotate2d.frag @@ -0,0 +1,14 @@ +precision mediump float; + +mat2 mat_rotate2d(in float angle){ + return mat2(cos(angle),-sin(angle), + sin(angle),cos(angle)); +} + +vec2 rotate2d(in vec2 _st, in float angle) { + vec2 st = _st; + st -= 0.5; + st *= mat_rotate2d(angle); + st += 0.5; + return st; +} \ No newline at end of file diff --git a/src/lib/shaders/utils/scale.frag b/src/lib/shaders/utils/scale.frag new file mode 100644 index 0000000..45d0f96 --- /dev/null +++ b/src/lib/shaders/utils/scale.frag @@ -0,0 +1,14 @@ +precision mediump float; + +mat2 mat_scale(vec2 _scale){ + return mat2(_scale.x,0.0, + 0.0,_scale.y); +} + +vec2 scale(in vec2 _st, in vec2 _scale) { + vec2 st = _st; + st -= 0.5; + st *= mat_scale(_scale); + st += 0.5; + return st; +} \ No newline at end of file