From fb80096569005401dd959700b9e81ba815028101 Mon Sep 17 00:00:00 2001 From: klemek Date: Fri, 28 Aug 2026 19:02:39 +0200 Subject: [PATCH] upgrade glsl code --- README.md | 3 +- project/frag5.glsl | 4 +- project/frag6.glsl | 2 +- project/frag7.glsl | 4 +- project/inc_cp437.glsl | 60 +---- project/inc_functions.glsl | 12 +- project/inc_fx.glsl | 170 ++++++------- project/inc_magic.glsl | 42 +-- project/inc_rand.glsl | 4 +- project/inc_sentences.glsl | 4 +- project/inc_src.glsl | 508 ++++++++++++++++++------------------- project/inc_time.glsl | 2 +- 12 files changed, 377 insertions(+), 438 deletions(-) diff --git a/README.md b/README.md index 0c0c652..53309f5 100644 --- a/README.md +++ b/README.md @@ -36,8 +36,9 @@ echo 'make -C /opt/forge-invar start-weston' >> ~/.bashrc Logical -* [ ] Play on start +* [x] Play on start * [ ] disable services for faster boot +* [ ] special texts in demo vs classic * [ ] Save while running Physical diff --git a/project/frag5.glsl b/project/frag5.glsl index 01d0e3d..c45cb62 100644 --- a/project/frag5.glsl +++ b/project/frag5.glsl @@ -19,8 +19,8 @@ uniform int iSeed5; uniform vec3 iGroup3_1[2]; void main() { - float mix_value = magic(iGroup3_1[1].xy, vec3(1, 0, 0), iSeed5); - bool mix_type = magic_trigger(vec3(iGroup3_1[0].x, 0, 0), iSeed5 + 10); + float mix_value = magic(iGroup3_1[1].xy, vec3(1., 0., 0.), iSeed5); + bool mix_type = magic_trigger(vec3(iGroup3_1[0].x, 0., 0.), iSeed5 + 10.); vec4 color_a = texture(iTex3, vUV); vec4 color_b = texture(iTex4, vUV); diff --git a/project/frag6.glsl b/project/frag6.glsl index 608238f..737ec54 100644 --- a/project/frag6.glsl +++ b/project/frag6.glsl @@ -21,7 +21,7 @@ uniform vec3 iGroup3_1[2]; void main() { vec4 color = fx_stage(iState6, vUV, iTex5, iTex0, iSeed6, iGroup2_3[0], iGroup2_3[1].xy, iGroup2_3[2], iGroup2_3[3].xy, iGroup2_3[4], iGroup2_3[5].xy, iGroup2_3[6]); - color = mix(color, vec4(0), iGroup3_1[0].y); + color = mix(color, vec4(0.), iGroup3_1[0].y); fragColor = color; } diff --git a/project/frag7.glsl b/project/frag7.glsl index ed2a2a2..02e29bc 100644 --- a/project/frag7.glsl +++ b/project/frag7.glsl @@ -18,7 +18,7 @@ void main() { // vec2 uv = 1 - vUV; vec2 uv = vUV; vec3 c = texture(iTex0, uv).xyz; - c = mix(c, 1 - c, iDemo * write_int(uv * 20, vec2(1.), iFPS, 2)); - c = mix(c, 1 - c, iDemo * write_5(uv * 20, vec2(1., 18.), demoStr)); + c = mix(c, 1. - c, iDemo * write_int(uv * 20., vec2(1.), iFPS, 2)); + c = mix(c, 1. - c, iDemo * write_5(uv * 20., vec2(1., 18.), demoStr)); fragColor = vec4(c, 1); } diff --git a/project/inc_cp437.glsl b/project/inc_cp437.glsl index 0fb20dd..240667b 100644 --- a/project/inc_cp437.glsl +++ b/project/inc_cp437.glsl @@ -336,7 +336,7 @@ float write_10(vec2 uv, vec2 pos, int str[10]) return d; } - d += char_at(uv, pos + vec2(i, 0), str[i]); + d += char_at(uv, pos + vec2(i, 0.), str[i]); } return d; @@ -386,62 +386,4 @@ float write_int_left(vec2 uv, vec2 pos, int value, int magnitude) return write_int(uv, pos, value, magnitude); } -int read(sampler2D tex, vec2 uv, float k, int d, float t) -{ - float inv_k = 1 / k; - vec2 tex_uv = floor(uv * k) * inv_k; - tex_uv += vec2(d % 2, floor(d * .5)) * .5 * inv_k; - return - ((mean(reframe(tex, tex_uv + vec2(0, 3) * inv_k * .125)) > t) ? 1 : 0) + - ((mean(reframe(tex, tex_uv + vec2(0, 2) * inv_k * .125)) > t) ? 2 : 0) + - ((mean(reframe(tex, tex_uv + vec2(0, 1) * inv_k * .125)) > t) ? 4 : 0) + - ((mean(reframe(tex, tex_uv + vec2(0, 0) * inv_k * .125)) > t) ? 8 : 0) + - ((mean(reframe(tex, tex_uv + vec2(1, 3) * inv_k * .125)) > t) ? 16 : 0) + - ((mean(reframe(tex, tex_uv + vec2(1, 2) * inv_k * .125)) > t) ? 32 : 0) + - ((mean(reframe(tex, tex_uv + vec2(1, 1) * inv_k * .125)) > t) ? 64 : 0) + - ((mean(reframe(tex, tex_uv + vec2(1, 0) * inv_k * .125)) > t) ? 128 : 0) + - ((mean(reframe(tex, tex_uv + vec2(2, 3) * inv_k * .125)) > t) ? 256 : 0) + - ((mean(reframe(tex, tex_uv + vec2(2, 2) * inv_k * .125)) > t) ? 512 : 0) + - ((mean(reframe(tex, tex_uv + vec2(2, 1) * inv_k * .125)) > t) ? 1024 : 0) + - ((mean(reframe(tex, tex_uv + vec2(2, 0) * inv_k * .125)) > t) ? 2048 : 0) + - ((mean(reframe(tex, tex_uv + vec2(3, 3) * inv_k * .125)) > t) ? 4096 : 0) + - ((mean(reframe(tex, tex_uv + vec2(3, 2) * inv_k * .125)) > t) ? 8192 : 0) + - ((mean(reframe(tex, tex_uv + vec2(3, 1) * inv_k * .125)) > t) ? 16384 : 0) + - ((mean(reframe(tex, tex_uv + vec2(3, 0) * inv_k * .125)) > t) ? 32768 : 0); -} - -// https://web.archive.org/web/20151229003112/http://blogs.msdn.com/b/jeuge/archive/2005/06/08/hakmem-bit-count.aspx -int bit_count(int u) -{ - int c; - c = u - ((u >> 1) & 033333333333) - ((u >> 2) & 011111111111); - return ((c + (c >> 3)) & 030707070707) % 63; -} - -int guess_char(sampler2D tex, vec2 uv, float k, float t) -{ - int b0 = read(tex, uv, k, 0, t); - int b1 = read(tex, uv, k, 1, t); - int b2 = read(tex, uv, k, 2, t); - int b3 = read(tex, uv, k, 3, t); - - int mc = 0; - int mb = 100; - int i; - int b; - - for (i = 0x01; i <= 0xFF; i++) { - if (i == 0x20 || i == 0xff || i == 0xDB) { - continue; - } - b = bit_count(cp437[i * 4] ^ b0) + bit_count(cp437[i * 4 + 1] ^ b1) + bit_count(cp437[i * 4 + 2] ^ b2) + + bit_count(cp437[i * 4 + 3] ^ b3); - if (b < mb) { - mb = b; - mc = i; - } - } - - return mc; -} - #endif diff --git a/project/inc_functions.glsl b/project/inc_functions.glsl index 7c0009b..dc5c4c5 100644 --- a/project/inc_functions.glsl +++ b/project/inc_functions.glsl @@ -64,8 +64,8 @@ vec3 cmod(vec3 x, float k) { vec3 col(float x) { return vec3( .5 * (sin(x * 2. * PI) + 1.), - .5 * (sin(x * 2. * PI + 2. * PI / 3.) + 1.), - .5 * (sin(x * 2. * PI - 2. * PI / 3.) + 1.) + .5 * (sin(x * 2. * PI + PI * .6666667) + 1.), + .5 * (sin(x * 2. * PI - PI * .6666667) + 1.) ); } @@ -101,7 +101,7 @@ vec3 mix5(vec3 c1, vec3 c2, vec3 c3, vec3 c4, vec3 c5, float x) { } vec3 mix6(vec3 c1, vec3 c2, vec3 c3, vec3 c4, vec3 c5, vec3 c6, float x) { - return istep(.2, x) * mix(c1, c2, x * 5) + return istep(.2, x) * mix(c1, c2, x * 5.) + step(.2, x) * istep(.4, x) * mix(c2, c3, x * 5. - 1.) + step(.4, x) * istep(.6, x) * mix(c3, c4, x * 5. - 2.) + step(.6, x) * istep(.8, x) * mix(c4, c5, x * 5. - 3.) @@ -135,8 +135,8 @@ vec2 lens(vec2 uv, float limit, float power) { vec2 kal(vec2 uv, float n) { float t = atan(uv.y, uv.x) + PI * .5; - float q = 3. / (2. * PI); - t = abs(mod(t + PI / (n), 2. * PI / n) - PI / (n)); + float q = .4774648; // 3. / (2. * PI); + t = abs(mod(t + PI / n, 2. * PI / n) - PI / n); return length(uv) * vec2( cos(t), sin(t) @@ -322,7 +322,7 @@ vec4 kernel(sampler2D tex, vec2 uv, mat3x3 k, float spm) for (y = -1; y <= 1; ++y) { for (x = -1; x <= 1; ++x) { offset = vec2(x, y) * spm; - if (abs(k[x + 1][y + 1]) > 0) { + if (abs(k[x + 1][y + 1]) > 0.) { sum += k[x + 1][y + 1] * texture(tex, uv + offset); } } diff --git a/project/inc_fx.glsl b/project/inc_fx.glsl index ec24f3d..c37be98 100644 --- a/project/inc_fx.glsl +++ b/project/inc_fx.glsl @@ -6,14 +6,14 @@ #define INC_FX vec4 fx_master(vec3 c0, vec3 c, int seed, vec3 m0) { - float fx = magic(m0.xy, vec3(1,0,0), seed); - bool invert = magic_trigger(vec3(m0.z, 0, 0), seed); + float fx = magic(m0.xy, vec3(1., 0., 0.), seed); + bool invert = magic_trigger(vec3(m0.z, 0., 0.), seed); vec3 c_out = mix(c0, c, fx); - c_out = mix(c_out, 1 - c_out, invert ? 1 : 0); + c_out = mix(c_out, 1. - c_out, invert ? 1. : 0.); - return vec4(c_out, 1.0); + return vec4(c_out, 1.); } // FX 1 : thru @@ -25,17 +25,17 @@ vec4 fx_1(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, v // controls - float hue = magic(f1, b1, seed + 10); - float saturation = magic(f2, b2, seed + 20); - float light = magic(f3, b3, seed + 30); + float hue = magic(f1, b1, seed + 10.); + float saturation = magic(f2, b2, seed + 20.); + float light = magic(f3, b3, seed + 30.); // logic vec3 c0 = texture(previous, uv0).xyz; vec3 c = c0; c = shift3(c, hue); - c *= 1 + saturation; - c = mix(c + light * 2.0, c - (1 - light) * 2.0, step(.5, light)); + c *= 1. + saturation; + c = mix(c + light * 2., c - (1. - light) * 2., step(.5, light)); return fx_master(c0, c, seed, m0); } @@ -47,7 +47,7 @@ vec4 fx_shift(vec2 vUV, sampler2D src0, sampler2D src1, int seed, vec3 b1, vec2 vec2 uv0 = vUV.st; float ratio = iResolution.x / iResolution.y; - vec2 uv1 = (uv0 - .5) * vec2(ratio, 1); + vec2 uv1 = (uv0 - .5) * vec2(ratio, 1.); // controls @@ -111,24 +111,24 @@ vec4 fx_5(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, v vec2 uv0 = vUV.st; float ratio = iResolution.x / iResolution.y; - vec2 uv1 = (uv0 - .5) * vec2(ratio, 1); + vec2 uv1 = (uv0 - .5) * vec2(ratio, 1.); // controls - float pixel_size = magic(f1, b1, seed + 10); - float quantize = magic(f2, b2, seed + 20); - bool quantize_trigger = magic_trigger(b2, seed + 20); - float blur = magic(f3, b3, seed + 30); + float pixel_size = magic(f1, b1, seed + 10.); + float quantize = magic(f2, b2, seed + 20.); + bool quantize_trigger = magic_trigger(b2, seed + 20.); + float blur = magic(f3, b3, seed + 30.); // logic vec3 c0 = texture(previous, uv0).xyz; vec2 uv2 = uv1; - float pixel = (1 - pixel_size) * 250 + 25; + float pixel = (1., - pixel_size) * 250. + 25.; uv2 = round(uv2 * pixel) / pixel; - vec3 c = gauss(previous, uv2 * vec2(1 / ratio, 1) + .5, 3, .005 * blur).xyz; - float colors = (1 - quantize) * 10 + 1; + vec3 c = gauss(previous, uv2 * vec2(1. / ratio, 1.) + .5, 3, .005 * blur).xyz; + float colors = (1. - quantize) * 10. + 1.; if (quantize_trigger) { c = round(c * colors) / colors; } @@ -144,7 +144,7 @@ vec4 fx_6(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, v vec2 uv0 = vUV.st; float ratio = iResolution.x / iResolution.y; - vec2 uv1 = (uv0 - .5) * vec2(ratio, 1); + vec2 uv1 = (uv0 - .5) * vec2(ratio, 1.); // controls @@ -186,13 +186,13 @@ vec4 fx_7(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, v vec2 uv0 = vUV.st; float ratio = iResolution.x / iResolution.y; - vec2 uv1 = (uv0 - .5) * vec2(ratio, 1); + vec2 uv1 = (uv0 - .5) * vec2(ratio, 1.); // controls - float lens_v = magic(f1, b1, seed + 10); - float horizontal_noise = magic(f2, b2, seed + 20); - float zoom = magic(f3, b3, seed + 30); + float lens_v = magic(f1, b1, seed + 10.); + float horizontal_noise = magic(f2, b2, seed + 20.); + float zoom = magic(f3, b3, seed + 30.); // logic @@ -200,12 +200,12 @@ vec4 fx_7(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, v vec2 uv2 = uv1; float k1 = lens_v * .5; - uv2 *= 1 + zoom * 2; + uv2 *= 1. + zoom * 2.; uv2 = lens(uv2, -k1, k1); float k = horizontal_noise; vec3 c = vec3( - reframe_b(previous, uv2 + vec2((rand(uv0.y * 1000 + iTime) - .5) * k * .1)).x, - reframe_b(previous, uv2 + vec2((rand(uv0.y * 1100 + iTime) - .5) * k * .1)).y, + reframe_b(previous, uv2 + vec2((rand(uv0.y * 1000. + iTime) - .5) * k * .1)).x, + reframe_b(previous, uv2 + vec2((rand(uv0.y * 1100. + iTime) - .5) * k * .1)).y, reframe_b(previous, uv2).z ); @@ -219,23 +219,23 @@ vec4 fx_8(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, v vec2 uv0 = vUV.st; float ratio = iResolution.x / iResolution.y; - vec2 uv1 = (uv0 - .5) * vec2(ratio, 1); + vec2 uv1 = (uv0 - .5) * vec2(ratio, 1.); // controls - float axes = magic(f1, b1, seed + 10); - float axes_trigger = magic_b(b1, seed + 10).x; - float rotation = magic(f2, b2, seed + 20); - float h_scroll = magic(f3, b3, seed + 30); + float axes = magic(f1, b1, seed + 10.); + float axes_trigger = magic_b(b1, seed + 10.).x; + float rotation = magic(f2, b2, seed + 20.); + float h_scroll = magic(f3, b3, seed + 30.); // logic vec3 c0 = texture(previous, uv0).xyz; vec2 uv2 = uv1; - uv2 = mix(uv2, kal2(uv2 * rot(.25), floor(axes * 9 + 1)) * vec2(1, -2) + vec2(0, -.5), axes_trigger); + uv2 = mix(uv2, kal2(uv2 * rot(.25), floor(axes * 9. + 1.)) * vec2(1., -2.) + vec2(0., -.5), axes_trigger); uv2 *= rot(rotation); - uv2.x = (saw(uv2.x / ratio + .5 + h_scroll * 2) - .5) * ratio; + uv2.x = (saw(uv2.x / ratio + .5 + h_scroll * 2.) - .5) * ratio; vec3 c = reframe(previous, uv2).xyz; return fx_master(c0, c, seed, m0); @@ -250,35 +250,35 @@ vec4 fx_9(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, v vec2 uv0 = vUV.st; float ratio = iResolution.x / iResolution.y; - vec2 uv1 = (uv0 - .5) * vec2(ratio, 1); + vec2 uv1 = (uv0 - .5) * vec2(ratio, 1.); // controls - float zoom = magic(f1, b1, seed + 10); - vec2 charset = magic_f(f2, b2, seed + 20); - vec3 charset_ctrl = magic_b(b2, seed + 20); - float char_delta = magic(f3, b3, seed + 30); - float t = magic(seed + 40); + float zoom = magic(f1, b1, seed + 10.); + vec2 charset = magic_f(f2, b2, seed + 20.); + vec3 charset_ctrl = magic_b(b2, seed + 20.); + float char_delta = magic(f3, b3, seed + 30.); + float t = magic(seed + 40.); // logic vec3 c0 = texture(previous, uv0).xyz; vec2 uv2 = uv1; - float k1 = 100 * (1 - zoom) + 10; - float inv_k = 1 / k1; + float k1 = 100. * (1. - zoom) + 10.; + float inv_k = 1. / k1; uv2 = floor(uv2 * k1) * inv_k; - int start_char = charset_ctrl.x > 0 ? charsets[int(charset.x * CHARSETS) * 2] : 0x01; - int char_span = int((charset_ctrl.x > 0 ? charsets[int(charset.x * CHARSETS) * 2 + 1] : 255)); - char_span = int(char_span * max(1 - charset.y, 1 / (char_span * .75))); + int start_char = charset_ctrl.x > 0. ? charsets[int(charset.x * CHARSETS) * 2] : 0x01; + int char_span = int((charset_ctrl.x > 0. ? charsets[int(charset.x * CHARSETS) * 2 + 1] : 255)); + char_span = int(char_span * max(1. - charset.y, 1. / (char_span * .75))); ivec2 uv2i = ivec2(uv2 * k1); - int code = ((charset_ctrl.y < 1 || (uv2i.x % 2 ^ uv2i.y % 2) > 0) ? 1 : 0) * (start_char + int((rand(uv2i) + char_delta) * char_span) % char_span); - vec3 c = reframe(previous, uv2 + vec2(0, 0) * inv_k * .125).xyz * .2 - + reframe(previous, uv2 + vec2(1, 0) * inv_k * .125).xyz * .2 - + reframe(previous, uv2 + vec2(1, 1) * inv_k * .125).xyz * .2 - + reframe(previous, uv2 + vec2(0, 1) * inv_k * .125).xyz * .2 + int code = ((charset_ctrl.y < 1. || (uv2i.x % 2 ^ uv2i.y % 2) > 0) ? 1 : 0) * (start_char + int((rand(uv2i) + char_delta) * char_span) % char_span); + vec3 c = reframe(previous, uv2 + vec2(0., 0.) * inv_k * .125).xyz * .2 + + reframe(previous, uv2 + vec2(1., 0.) * inv_k * .125).xyz * .2 + + reframe(previous, uv2 + vec2(1., 1.) * inv_k * .125).xyz * .2 + + reframe(previous, uv2 + vec2(0., 1.) * inv_k * .125).xyz * .2 + reframe(previous, uv2 + vec2(.5, .5) * inv_k * .125).xyz * .2; - c = char(mod(uv1 * k1, 1), code) ? c : vec3(0); + c = char(mod(uv1 * k1, 1.), code) ? c : vec3(0.); return fx_master(c0, c, seed, m0); } @@ -290,22 +290,22 @@ vec4 fx_10(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 uv0 = vUV.st; float ratio = iResolution.x / iResolution.y; - vec2 uv1 = (uv0 - .5) * vec2(ratio, 1); + vec2 uv1 = (uv0 - .5) * vec2(ratio, 1.); // controls - float lens_v1 = magic(f1, b1, seed + 10); - float lens_v2 = magic(f2, b2, seed + 20); - float zoom = magic(f3, b3, seed + 30); - float k = magic(seed + 40); + float lens_v1 = magic(f1, b1, seed + 10.); + float lens_v2 = magic(f2, b2, seed + 20.); + float zoom = magic(f3, b3, seed + 30.); + float k = magic(seed + 40.); // logic vec3 c0 = texture(previous, uv0).xyz; vec2 uv2 = uv1; - uv2 *= 1 + zoom * 2; - uv2 = lens(uv2, -lens_v2 * 10, lens_v1 * 10); + uv2 *= 1. + zoom * 2.; + uv2 = lens(uv2, -lens_v2 * 10., lens_v1 * 10.); vec3 c = reframe(previous, uv2).xyz; return fx_master(c0, c, seed, m0); @@ -318,13 +318,13 @@ vec4 fx_11(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 uv0 = vUV.st; float ratio = iResolution.x / iResolution.y; - vec2 uv1 = (uv0 - .5) * vec2(ratio, 1); + vec2 uv1 = (uv0 - .5) * vec2(ratio, 1.); // controls - float wall1 = magic(f1, b1, seed + 10); - float wall2 = magic(f2, b2, seed + 20); - float angle = magic(f3, b3, seed + 30); + float wall1 = magic(f1, b1, seed + 10.); + float wall2 = magic(f2, b2, seed + 20.); + float angle = magic(f3, b3, seed + 30.); // logic @@ -332,8 +332,8 @@ vec4 fx_11(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 uv2 = uv1; uv2 *= rot(angle); - uv2.y = min(uv2.y, 1 - wall1); - uv2.y = -min(-uv2.y, 1 - wall2); + uv2.y = min(uv2.y, 1. - wall1); + uv2.y = -min(-uv2.y, 1. - wall2); uv2 *= rot(-angle); vec3 c = reframe(previous, uv2).xyz; @@ -347,24 +347,24 @@ vec4 fx_12(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 uv0 = vUV.st; float ratio = iResolution.x / iResolution.y; - vec2 uv1 = (uv0 - .5) * vec2(ratio, 1); + vec2 uv1 = (uv0 - .5) * vec2(ratio, 1.); // controls - float pixel_size = magic(f1, b1, seed + 10); - bool pixel_size_trigger = magic_trigger(b1, seed + 10); - f2 = magic_f(f2, b2, seed + 20); - int rule = int(f2.x * 12); + float pixel_size = magic(f1, b1, seed + 10.); + bool pixel_size_trigger = magic_trigger(b1, seed + 10.); + f2 = magic_f(f2, b2, seed + 20.); + int rule = int(f2.x * 12.); float threshold = f2.y * .9 + .05; - float fb = magic(f3, b3, seed + 30); + float fb = magic(f3, b3, seed + 30.); // logic vec3 c0 = texture(previous, uv0).xyz; vec2 uv2 = uv1; - float k1 = pow(2, 9 - floor(pixel_size * 5)); - float p = 1 / k1; + float k1 = pow(2., 9. - floor(pixel_size * 5.)); + float p = 1. / k1; uv2 = round(uv2 * k1) / k1; vec3 c1 = mix( reframe(previous, uv2 + vec2(.5, .5) * p).xyz, @@ -449,7 +449,7 @@ vec4 fx_12(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, alive = n >= 6 || !alive && n == 4 || alive && (n == 3 || n == 5); } - vec3 cout = vec3(alive ? 1 : 0); + vec3 cout = vec3(alive ? 1. : 0.); return fx_master(c0, cout, seed, m0); } @@ -461,20 +461,20 @@ vec4 fx_13(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 uv0 = vUV.st; float ratio = iResolution.x / iResolution.y; - vec2 uv1 = (uv0 - .5) * vec2(ratio, 1); + vec2 uv1 = (uv0 - .5) * vec2(ratio, 1.); // controls - float sx = magic(f1, b1, seed + 10) * 2; - float sy = magic(f2, b2, seed + 20) * 2; - float disp = .005 * magic(f3, b3, seed + 30); + float sx = magic(f1, b1, seed + 10.) * 2.; + float sy = magic(f2, b2, seed + 20.) * 2.; + float disp = .005 * magic(f3, b3, seed + 30.); // logic vec3 c0 = texture(previous, uv0).xyz; - const mat3x3 sobelx = mat3x3(-1, -2, -1, 0, 0, 0, 1, 2, 1); - const mat3x3 sobely = mat3x3(-1, 0, 1, -2, 0, 2, -1, 0, 1); + const mat3x3 sobelx = mat3x3(-1., -2., -1., 0., 0., 0., 1., 2., 1.); + const mat3x3 sobely = mat3x3(-1., 0., 1., -2., 0., 2., -1., 0., 1.); mat3x3 sobel = sobelx * sx + sobely * sy; @@ -490,13 +490,13 @@ vec4 fx_14(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 uv0 = vUV.st; float ratio = iResolution.x / iResolution.y; - vec2 uv1 = (uv0 - .5) * vec2(ratio, 1); + vec2 uv1 = (uv0 - .5) * vec2(ratio, 1.); // controls - float zoom = 1 + magic(f1, b1, seed + 10) * 9; - float h_scroll = magic(f2, b2, seed + 20); - float angle = magic(f3, b3, seed + 30); + float zoom = 1 + magic(f1, b1, seed + 10.) * 9.; + float h_scroll = magic(f2, b2, seed + 20.); + float angle = magic(f3, b3, seed + 30.); // logic @@ -508,11 +508,11 @@ vec4 fx_14(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, uv3 *= rot(angle); - uv3 += vec2(h_scroll, 0); + uv3 += vec2(h_scroll, 0.); uv3 *= round(zoom); - vec2 umax = vec2(round(zoom), 300); + vec2 umax = vec2(round(zoom), 300.); vec3 c = reframe(previous, mod(uv3, umax)).xyz; @@ -521,7 +521,7 @@ vec4 fx_14(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec4 fx_stage(int fx, vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0) { if (fx >= 15) { - fx = int(randTime(seed + 100) * 14) + 1; + fx = int(randTime(seed + 100.) * 14.) + 1; } if (fx == 1) { diff --git a/project/inc_magic.glsl b/project/inc_magic.glsl index 7bb3c34..1d8bf1c 100644 --- a/project/inc_magic.glsl +++ b/project/inc_magic.glsl @@ -3,11 +3,11 @@ #ifndef INC_MAGIC #define INC_MAGIC -vec2 magic_f(vec2 F, vec3 B, float i) +vec2 magic_f(vec2 f, vec3 b, float i) { return vec2( - mix(F.x, randTime(i + 1.), min(1., B.z)), - mix(F.y, randTime(i + 2.), min(1., B.z)) + mix(f.x, randTime(i + 1.), min(1., b.z)), + mix(f.y, randTime(i + 2.), min(1., b.z)) ); } @@ -16,12 +16,12 @@ vec2 magic_f(float i) return magic_f(vec2(0.), vec3(0., 0., 1.), i); } -vec3 magic_b(vec3 B, float i) +vec3 magic_b(vec3 b, float i) { return vec3( - mix(B.x, step(.2, randTime(i + 3.)), min(1., B.z)), - mix(B.y, step(.5, randTime(i + 4.)), min(1., B.z)), - min(1., B.z) + mix(b.x, step(.2, randTime(i + 3.)), min(1., b.z)), + mix(b.y, step(.5, randTime(i + 4.)), min(1., b.z)), + min(1., b.z) ); } @@ -30,9 +30,9 @@ vec3 magic_b(float i) return magic_b(vec3(0., 0., 1.), i); } -bool magic_trigger(vec3 B, float i) +bool magic_trigger(vec3 b, float i) { - return magic_b(B, i).x > 0.; + return magic_b(b, i).x > 0.; } bool magic_trigger(float i) @@ -40,20 +40,20 @@ bool magic_trigger(float i) return magic_b(i).x > 0.; } -float magic(vec2 F, vec3 B, float i) +float magic(vec2 f, vec3 b, float i) { - vec2 f = magic_f(F, B, i); - vec3 b = magic_b(B, i); + vec2 mf = magic_f(f, b, i); + vec3 mb = magic_b(b, i); - return mix(0., f.x * mix(1. - modTime(f.y), cosTime(f.y) * .5 + .5, b.y), b.x); + return mix(0., mf.x * mix(1. - modTime(mf.y), cosTime(mf.y) * .5 + .5, mb.y), mb.x); } -float fmagic(vec2 F, vec3 B, float i) +float fmagic(vec2 f, vec3 b, float i) { - vec2 f = magic_f(F, B, i); - vec3 b = magic_b(B, i); + vec2 mf = magic_f(f, b, i); + vec3 mb = magic_b(b, i); - return f.x * mix(1. - modTime(f.y), cosTime(f.y) * .5 + .5, b.y); + return mf.x * mix(1. - modTime(mf.y), cosTime(mf.y) * .5 + .5, mb.y); } float magic(float i) @@ -61,12 +61,12 @@ float magic(float i) return magic(vec2(0.), vec3(0., 0., 1.), i); } -float magic_reverse(vec2 F, vec3 B, float i) +float magic_reverse(vec2 f, vec3 b, float i) { - vec2 f = magic_f(F, B, i); - vec3 b = magic_b(B, i); + vec2 mf = magic_f(f, b, i); + vec3 mb = magic_b(b, i); - return mix(0., f.x * mix(1. - modTime(f.y), modTime(f.y), b.y), b.x); + return mix(0., mf.x * mix(1. - modTime(mf.y), modTime(mf.y), mb.y), mb.x); } float magic_reverse(float i) diff --git a/project/inc_rand.glsl b/project/inc_rand.glsl index 9375b61..ea5b708 100644 --- a/project/inc_rand.glsl +++ b/project/inc_rand.glsl @@ -2,8 +2,8 @@ #define INC_RAND float rand(float seed){ - float v=pow(abs(seed),6./7.); - v*=sin(v)+1.; + float v = pow(abs(seed), .8571429); // 6. / 7. + v *= sin(v) + 1.; return fract(v); } diff --git a/project/inc_sentences.glsl b/project/inc_sentences.glsl index 0abfd6c..b10c246 100644 --- a/project/inc_sentences.glsl +++ b/project/inc_sentences.glsl @@ -30,7 +30,7 @@ const int lengths[] = int[SENTENCE_COUNT]( float write_sentence(vec2 uv, vec2 pos, int n) { - float d = 0; + float d = 0.; int i; for (i = 0; i < SENTENCE_MAX_LENGTH; i++) { @@ -38,7 +38,7 @@ float write_sentence(vec2 uv, vec2 pos, int n) return d; } - d += char_at(uv, pos + vec2(i, 0), sentences[n * SENTENCE_MAX_LENGTH + i]); + d += char_at(uv, pos + vec2(i, 0.), sentences[n * SENTENCE_MAX_LENGTH + i]); } return d; diff --git a/project/inc_src.glsl b/project/inc_src.glsl index 410d79a..d7bedbd 100644 --- a/project/inc_src.glsl +++ b/project/inc_src.glsl @@ -17,9 +17,9 @@ vec4 src_thru(vec2 vUV, sampler2D tex, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 // controls - float hue = magic(f1, b1, seed + 10); - float saturation = magic(f2, b2, seed + 20); - float light = magic(f3, b3, seed + 30); + float hue = magic(f1, b1, seed + 10.); + float saturation = magic(f2, b2, seed + 20.); + float light = magic(f3, b3, seed + 30.); // logic @@ -27,8 +27,8 @@ vec4 src_thru(vec2 vUV, sampler2D tex, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 c = shift3(c, hue); - c *= 1 + saturation; - c = mix(c + light * 2.0, c - (1 - light) * 2.0, step(.5, light)); + c *= 1. + saturation; + c = mix(c + light * 2., c - (1. - light) * 2., step(.5, light)); // output @@ -48,21 +48,21 @@ vec4 src_2(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 vec2 uv0 = vUV.st; float ratio = iResolution.x / iResolution.y; - vec2 uv1 = (uv0 - .5) * vec2(ratio, 1); + vec2 uv1 = (uv0 - .5) * vec2(ratio, 1.); // controls - float thickness = magic(f1, b1, seed + 10); - float rotation = magic(f2, b2, seed + 20); - float distort = magic(f3, b3, seed + 30); + float thickness = magic(f1, b1, seed + 10.); + float rotation = magic(f2, b2, seed + 20.); + float distort = magic(f3, b3, seed + 30.); // logic vec2 uv2 = uv1; - uv2.y *= cos(uv2.x * 5 * distort); - uv2 *= rot(rotation + iBeats / 16); - float k = thickness * 2; - uv2.y = cmod(uv2.y, k * 2 + .1); + uv2.y *= cos(uv2.x * 5. * distort); + uv2 *= rot(rotation + iBeats * .0625); + float k = thickness * 2.; + uv2.y = cmod(uv2.y, k * 2. + .1); float f = istep(k * .125 + .05, uv2.y) * istep(k * .125 + .01, -uv2.y); return vec4(f); @@ -75,159 +75,28 @@ vec4 src_3(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 vec2 uv0 = vUV.st; float ratio = iResolution.x / iResolution.y; - vec2 uv1 = (uv0 - .5) * vec2(ratio, 1); + vec2 uv1 = (uv0 - .5) * vec2(ratio, 1.); // controls - float zoom = magic(f1, b1, seed + 10); - float rotation = magic(f2, b2, seed + 20); - float lens_v = magic(f3, b3, seed + 30); + float zoom = magic(f1, b1, seed + 10.); + float rotation = magic(f2, b2, seed + 20.); + float lens_v = magic(f3, b3, seed + 30.); // logic vec2 uv2 = uv1; - float k1 = lens_v * 5; + float k1 = lens_v * 5.; uv2 = lens(uv2, -k1, k1); - uv2 = kal(uv2, 5); - uv2 *= rot(rotation + iBeats / 16); + uv2 = kal(uv2, 5.); + uv2 *= rot(rotation + iBeats * .0625); float k = zoom * .1 + .05; - uv2 = cmod(uv2, k * 2); - float f = istep(k / (1 + length(uv1) * 2), length(uv2)); + uv2 = cmod(uv2, k * 2.); + float f = istep(k / (1. + length(uv1) * 2.), length(uv2)); return vec4(f); } -// // SRC 4 : circuit -// vec4 src_4(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) -// { -// // start - -// vec2 uv0 = vUV.st; -// float ratio = iResolution.x / iResolution.y; -// vec2 uv1 = (uv0 - .5) * vec2(ratio, 1); - -// // controls - -// float z = 10 + magic(f1, b1, 123) * 20; -// float h = magic(f2, b2, seed + 20) * .8 + .1; -// float v = magic_reverse(f3, b3, seed + 30) * .8 + .1; - -// // logic - -// uv1 *= z; -// uv1 += iBeats; - -// float s0 = rand(floor(mod(uv1, 1000))) * 1000; -// float s1 = rand(floor(mod(uv1 + vec2(0, 1), 1000))) * 1000; -// float s2 = rand(floor(mod(uv1 - vec2(1, 0), 1000))) * 1000; - -// bool up = rand(s1 + 1) < h; -// bool left = rand(s2 + 2) < v; -// bool down = rand(s0 + 1) < h; -// bool right = rand(s0 + 2) < v; -// bool up_down = up && down; -// bool left_right = left && right; - -// uv1 = mod(uv1, 1.0) - .5; - -// const float t = .1; - -// float f = 0; -// int c = 0; - -// if (up) { -// f += stripe(uv1.x, -t * .5, t * .5) * step(-t * .5, uv1.y); -// c += 1; -// } - -// if (down) { -// f += stripe(uv1.x, -t * .5, t * .5) * istep(t * .5, uv1.y); -// c += 1; -// } - -// if (left) { -// f += stripe(uv1.y, -t * .5, t * .5) * istep(t * .5, uv1.x); -// c += 1; -// } - -// if (right) { -// f += stripe(uv1.y, -t * .5, t * .5) * step(-t * .5, uv1.x); -// c += 1; -// } - -// if (c == 1) { -// f += istep(t, length(uv1)); -// } - -// f = min(f, 1); - -// if ((up_down ^^ left_right) && c == 2) { -// if (up_down) { -// uv1.xy = uv1.yx; -// } -// if (rand(s0 + 3) < .5) { -// uv1.x = -uv1.x; -// } -// float k = rand(s0 + 4) * 60; -// f -= rect(uv1, vec2(0), vec2(t * 3, t)); -// f = max(0, f); -// if (k < 10) { // resistor -// f += line(uv1, vec2(-t * 3.25, -t * .5), vec2(-t * 2.5, t * 2), t * .75); -// f += line(uv1, vec2(-t * 2.5, t * 2), vec2(-t * 1.5, -t * 2), t * .75); -// f += line(uv1, vec2(-t * 1.5, -t * 2), vec2(-t * .5, t * 2), t * .75); -// f += line(uv1, vec2(-t * .5, t * 2), vec2(t * .5, -t * 2), t * .75); -// f += line(uv1, vec2(t * .5, -t * 2), vec2(t * 1.5, t * 2), t * .75); -// f += line(uv1, vec2(t * 1.5, t * 2), vec2(t * 2.5, -t * 2), t * .75); -// f += line(uv1, vec2(t * 2.5, -t * 2), vec2(t * 3.25, t * .5), t * .75); -// } else if (k < 20) { // capacitor -// f += rect(uv1, vec2(-t * 2, 0), vec2(t, t * .5)); -// f += rect(uv1, vec2(t * 2, 0), vec2(t, t * .5)); -// f += rect(uv1, vec2(t, 0), vec2(t * .5, t * 3.5)); -// f += rect(uv1, vec2(-t, 0), vec2(t * .5, t * 3.5)); -// } else if (k < 30) { // diode -// f += line(uv1, vec2(-t * 2, t * 2.5), vec2(t * 2, 0), t); -// f += line(uv1, vec2(-t * 2, -t * 2.5), vec2(t * 2, 0), t); -// f += rect(uv1, vec2(t * 2.5, 0), vec2(t * .5, t * 3)); -// f += rect(uv1, vec2(-t * 2.5, 0), vec2(t * .5, t * 3)); -// } else if (k < 40) { // lamp -// f += istep(t * 3.5, length(uv1)); -// f -= istep(t * 2.5, length(uv1)); -// f += line(uv1, vec2(-t * 2), vec2(t * 2), t); -// f += line(uv1, vec2(-t * 2, t * 2), vec2(t * 2, -t * 2), t); -// } else if (k < 50) { // inductor -// f += istep(t * 2, length(uv1 - vec2(t * 2.5, 0))); -// f += istep(t * 2, length(uv1 - vec2(0, 0))); -// f += istep(t * 2, length(uv1 - vec2(-t * 2.5, 0))); -// f -= 2 * istep(t, length(uv1 - vec2(t * 2.5, 0))); -// f -= 2 * istep(t, length(uv1 - vec2(0, 0))); -// f -= 2 * istep(t, length(uv1 - vec2(-t * 2.5, 0))); -// f *= step(-t * .5, uv1.y); -// } else if (k < 60) { // switch -// f += istep(t, length(uv1 - vec2(t * 2.5, 0))); -// f += istep(t, length(uv1 + vec2(t * 2.5, 0))); -// f += line(uv1, vec2(t * 2, 0), vec2(-t * 2.5, t * (k < 55 ? 3 : 1)), t); -// } -// } else if (c == 3) { -// if (left_right) { -// uv1.xy = uv1.yx; -// if (up) { -// uv1.x = -uv1.x; -// } -// } else if (right) { -// uv1.x = -uv1.x; -// } -// float k = rand(s0 + 4) * 20; -// if (k < 10) { -// f -= rect(uv1, vec2(0), vec2(t * 3)); -// f = max(0, f); -// f += rect(uv1, vec2(-t * 3, 0), vec2(t * .5, t * 3)); -// f += line(uv1, vec2(t * .25, t * 3.25), vec2(-t * 3, t), t); -// f += line(uv1, vec2(t * .25, -t * 3.25), vec2(-t * 3, -t), t); -// } -// } - -// return vec4(f); -// } // SRC 4 : bacteria vec4 src_4(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) @@ -236,23 +105,23 @@ vec4 src_4(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 vec2 uv0 = vUV.st; float ratio = iResolution.x / iResolution.y; - vec2 uv1 = (uv0 - .5) * vec2(ratio, 1); + vec2 uv1 = (uv0 - .5) * vec2(ratio, 1.); // controls - float zoom = 2 + magic(f1, b1, seed + 10) * 20; - float details = 5 * magic(f2, b2, seed + 20); - float delta = magic(f3, b3, seed + 30); + float zoom = 2. + magic(f1, b1, seed + 10.) * 20.; + float details = 5. * magic(f2, b2, seed + 20.); + float delta = magic(f3, b3, seed + 30.); // logic uv1 *= zoom; - vec4 data = voronoi(uv1, 1, seed + 40, iBeats * .25); + vec4 data = voronoi(uv1, 1., seed + 40, iBeats * .25); float f = ease(data.x) + ease(data.y); - f = saw(f * (1 + data.x * details) - delta * 2.0); + f = saw(f * (1. + data.x * details) - delta * 2.); return vec4(f); } @@ -264,33 +133,159 @@ vec4 src_5(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 vec2 uv0 = vUV.st; float ratio = iResolution.x / iResolution.y; - vec2 uv1 = (uv0 - .5) * vec2(ratio, 1); + vec2 uv1 = (uv0 - .5) * vec2(ratio, 1.); // controls - float zoom = magic(f1, b1, seed + 10); - float voronoi_distort = magic(f2, b2, seed + 20); - float details = magic(f3, b3, seed + 30); - float noise_factor = magic(seed + 40); + float zoom = magic(f1, b1, seed + 10.); + float voronoi_distort = magic(f2, b2, seed + 20.); + float details = magic(f3, b3, seed + 30.); + float noise_factor = magic(seed + 40.); // logic vec2 uv2 = uv1; - uv2 *= zoom * 20 + 3; + uv2 *= zoom * 20. + 3.; uv2.x += iBeats; vec4 data = voronoi(uv2, voronoi_distort, seed + 50, iBeats); float f = data.x / (data.x + data.y); - f = sin(f * PI * (details * 20)) * .5 + 1; - int nf = int(noise_factor * 6); - f *= mix(1, noise_f(uv2, nf - 1), step(.0, float(nf))); + f = sin(f * PI * (details * 20.)) * .5 + 1.; + int nf = int(noise_factor * 6.); + f *= mix(1., noise_f(uv2, nf - 1), step(.0, float(nf))); return vec4(f); } -// SRC 6 : video in 1 + thru +// SRC 6 : circuit vec4 src_6(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) { - return src_1(vUV, seed, b1, f1, b2, f2, b3, f3); + // start + + vec2 uv0 = vUV.st; + float ratio = iResolution.x / iResolution.y; + vec2 uv1 = (uv0 - .5) * vec2(ratio, 1.); + + // controls + + float z = 10. + magic(f1, b1, 123.) * 20.; + float h = magic(f2, b2, seed + 20.) * .8 + .1; + float v = magic_reverse(f3, b3, seed + 30.) * .8 + .1; + + // logic + + uv1 *= z; + uv1 += iBeats; + + float s0 = rand(floor(mod(uv1, 1000.))) * 1000.; + float s1 = rand(floor(mod(uv1 + vec2(0., 1.), 1000.))) * 1000.; + float s2 = rand(floor(mod(uv1 - vec2(1., 0.), 1000.))) * 1000.; + + bool up = rand(s1 + 1.) < h; + bool left = rand(s2 + 2.) < v; + bool down = rand(s0 + 1.) < h; + bool right = rand(s0 + 2.) < v; + bool up_down = up && down; + bool left_right = left && right; + + uv1 = mod(uv1, 1.) - .5; + + const float t = .1; + + float f = 0.; + int c = 0; + + if (up) { + f += stripe(uv1.x, -t * .5, t * .5) * step(-t * .5, uv1.y); + c += 1; + } + + if (down) { + f += stripe(uv1.x, -t * .5, t * .5) * istep(t * .5, uv1.y); + c += 1; + } + + if (left) { + f += stripe(uv1.y, -t * .5, t * .5) * istep(t * .5, uv1.x); + c += 1; + } + + if (right) { + f += stripe(uv1.y, -t * .5, t * .5) * step(-t * .5, uv1.x); + c += 1; + } + + if (c == 1) { + f += istep(t, length(uv1)); + } + + f = min(f, 1.); + + if ((up_down ^^ left_right) && c == 2) { + if (up_down) { + uv1.xy = uv1.yx; + } + if (rand(s0 + 3.) < .5) { + uv1.x = -uv1.x; + } + float k = rand(s0 + 4.) * 60; + f -= rect(uv1, vec2(0.), vec2(t * 3., t)); + f = max(0., f); + if (k < 10.) { // resistor + f += line(uv1, vec2(-t * 3.25, -t * .5), vec2(-t * 2.5, t * 2.), t * .75); + f += line(uv1, vec2(-t * 2.5, t * 2.), vec2(-t * 1.5, -t * 2.), t * .75); + f += line(uv1, vec2(-t * 1.5, -t * 2.), vec2(-t * .5, t * 2.), t * .75); + f += line(uv1, vec2(-t * .5, t * 2.), vec2(t * .5, -t * 2.), t * .75); + f += line(uv1, vec2(t * .5, -t * 2.), vec2(t * 1.5, t * 2.), t * .75); + f += line(uv1, vec2(t * 1.5, t * 2.), vec2(t * 2.5, -t * 2.), t * .75); + f += line(uv1, vec2(t * 2.5, -t * 2.), vec2(t * 3.25, t * .5), t * .75); + } else if (k < 20.) { // capacitor + f += rect(uv1, vec2(-t * 2., 0.), vec2(t, t * .5)); + f += rect(uv1, vec2(t * 2., 0.), vec2(t, t * .5)); + f += rect(uv1, vec2(t, 0.), vec2(t * .5, t * 3.5)); + f += rect(uv1, vec2(-t, 0.), vec2(t * .5, t * 3.5)); + } else if (k < 30.) { // diode + f += line(uv1, vec2(-t * 2., t * 2.5), vec2(t * 2., 0.), t); + f += line(uv1, vec2(-t * 2., -t * 2.5), vec2(t * 2., 0.), t); + f += rect(uv1, vec2(t * 2.5, 0.), vec2(t * .5, t * 3.)); + f += rect(uv1, vec2(-t * 2.5, 0.), vec2(t * .5, t * 3.)); + } else if (k < 40.) { // lamp + f += istep(t * 3.5, length(uv1)); + f -= istep(t * 2.5, length(uv1)); + f += line(uv1, vec2(-t * 2.), vec2(t * 2.), t); + f += line(uv1, vec2(-t * 2., t * 2.), vec2(t * 2., -t * 2.), t); + } else if (k < 50.) { // inductor + f += istep(t * 2., length(uv1 - vec2(t * 2.5, 0.))); + f += istep(t * 2., length(uv1 - vec2(0., 0.))); + f += istep(t * 2., length(uv1 - vec2(-t * 2.5, 0.))); + f -= 2. * istep(t, length(uv1 - vec2(t * 2.5, 0.))); + f -= 2. * istep(t, length(uv1 - vec2(0., 0.))); + f -= 2. * istep(t, length(uv1 - vec2(-t * 2.5, 0.))); + f *= step(-t * .5, uv1.y); + } else if (k < 60.) { // switch + f += istep(t, length(uv1 - vec2(t * 2.5, 0.))); + f += istep(t, length(uv1 + vec2(t * 2.5, 0.))); + f += line(uv1, vec2(t * 2., 0.), vec2(-t * 2.5, t * (k < 55. ? 3. : 1.)), t); + } + } else if (c == 3) { + if (left_right) { + uv1.xy = uv1.yx; + if (up) { + uv1.x = -uv1.x; + } + } else if (right) { + uv1.x = -uv1.x; + } + float k = rand(s0 + 4.) * 20.; + if (k < 10.) { + f -= rect(uv1, vec2(0.), vec2(t * 3.)); + f = max(0., f); + f += rect(uv1, vec2(-t * 3., 0.), vec2(t * .5, t * 3.)); + f += line(uv1, vec2(t * .25, t * 3.25), vec2(-t * 3., t), t); + f += line(uv1, vec2(t * .25, -t * 3.25), vec2(-t * 3., -t), t); + } + } + + return vec4(f); } #include inc_cp437.glsl @@ -302,28 +297,28 @@ vec4 src_7(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 vec2 uv0 = vUV.st; float ratio = iResolution.x / iResolution.y; - vec2 uv1 = (uv0 - .5) * vec2(ratio, 1); + vec2 uv1 = (uv0 - .5) * vec2(ratio, 1.); // controls - float zoom = magic(f1, b1, seed + 10); - vec2 charset = magic_f(f2, b2, seed + 20); - vec3 charset_ctrl = magic_b(b2, seed + 20); - float char_delta = magic(f3, b3, seed + 30); + float zoom = magic(f1, b1, seed + 10.); + vec2 charset = magic_f(f2, b2, seed + 20.); + vec3 charset_ctrl = magic_b(b2, seed + 20.); + float char_delta = magic(f3, b3, seed + 30.); // logic vec2 uv2 = uv1; - uv2 *= zoom * 20 + 3; + uv2 *= zoom * 20. + 3.; uv2 += iBeats; - uv2 = mod(uv2, 100) + 100; - int start_char = charset_ctrl.x > 0 ? charsets[int(charset.x * CHARSETS) * 2] : 0x01; - int char_span = int((charset_ctrl.x > 0 ? charsets[int(charset.x * CHARSETS) * 2 + 1] : 255)); - char_span = int(char_span * max(1 - charset.y, 1 / (char_span * .75))); + uv2 = mod(uv2, 100.) + 100.; + int start_char = charset_ctrl.x > 0. ? charsets[int(charset.x * CHARSETS) * 2] : 0x01; + int char_span = int((charset_ctrl.x > 0. ? charsets[int(charset.x * CHARSETS) * 2 + 1] : 255)); + char_span = int(char_span * max(1. - charset.y, 1. / (char_span * .75))); ivec2 uv2i = ivec2(uv2); - int code = ((charset_ctrl.y < 1 || (uv2i.x % 2 ^ uv2i.y % 2) > 0) ? 1 : 0) * (start_char + int((rand(uv2i) + char_delta) * char_span) % char_span); - uv2 = mod(uv2, 1); - float f = char(uv2, code) ? 1 : 0; + int code = ((charset_ctrl.y < 1. || (uv2i.x % 2 ^ uv2i.y % 2) > 0) ? 1 : 0) * (start_char + int((rand(uv2i) + char_delta) * char_span) % char_span); + uv2 = mod(uv2, 1.); + float f = char(uv2, code) ? 1. : 0.; return vec4(f); } @@ -338,24 +333,24 @@ vec4 src_8(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 vec2 uv0 = vUV.st; float ratio = iResolution.x / iResolution.y; - vec2 uv1 = (uv0 - .5) * vec2(ratio, 1); + vec2 uv1 = (uv0 - .5) * vec2(ratio, 1.); // controls - float zoom = magic(f1, b1, seed + 10); - float sentence = magic_reverse(f2, b2, seed + 20); - float h_delta = magic(f3, b3, seed + 30); - vec3 h_delta_b = magic_b(b3, seed + 30); + float zoom = magic(f1, b1, seed + 10.); + float sentence = magic_reverse(f2, b2, seed + 20.); + float h_delta = magic(f3, b3, seed + 30.); + vec3 h_delta_b = magic_b(b3, seed + 30.); // logic vec2 uv2 = uv1; - uv2 *= (1 + zoom) * 12; + uv2 *= (1. + zoom) * 12.; uv2.y += .5; int s = int(sentence * (SENTENCE_COUNT - 1)); - uv2.x += floor(uv2.y) * (h_delta - .5) * 2; - uv2.y = mix(uv2.y, mod(uv2.y, 1), h_delta_b.x); - float f = write_sentence(uv2, vec2(-float(lengths[s]) * .5, 0), s); + uv2.x += floor(uv2.y) * (h_delta - .5) * 2.; + uv2.y = mix(uv2.y, mod(uv2.y, 1.), h_delta_b.x); + float f = write_sentence(uv2, vec2(-float(lengths[s]) * .5, 0.), s); return vec4(f); } @@ -367,30 +362,30 @@ vec4 src_9(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 vec2 uv0 = vUV.st; float ratio = iResolution.x / iResolution.y; - vec2 uv1 = (uv0 - .5) * vec2(ratio, 1); + vec2 uv1 = (uv0 - .5) * vec2(ratio, 1.); // controls - float h_shift = magic(f1, b1, seed + 10); - float sentence = magic_reverse(f2, b2, seed + 20); - float h_delta = magic(f3, b3, seed + 30); - vec3 h_delta_b = magic_b(b3, seed + 30); + float h_shift = magic(f1, b1, seed + 10.); + float sentence = magic_reverse(f2, b2, seed + 20.); + float h_delta = magic(f3, b3, seed + 30.); + vec3 h_delta_b = magic_b(b3, seed + 30.); // logic vec2 uv2 = uv1; uv2.x += h_shift; - uv2 *= 15; + uv2 *= 15.; uv2.y += .5; int s = int(sentence * (SENTENCE_COUNT - 1)); float slen = float(lengths[s]); - uv2.x += floor(uv2.y) * (h_delta - .5) * 2; - uv2.x = cmod(uv2.x, slen + 1); + uv2.x += floor(uv2.y) * (h_delta - .5) * 2.; + uv2.x = cmod(uv2.x, slen + 1.); vec2 uv3 = uv2; - uv3.y = mix(uv3.y, mod(uv3.y, 1), h_delta_b.x); - float f = write_sentence(uv3, vec2(-slen * .5, 0), s); + uv3.y = mix(uv3.y, mod(uv3.y, 1.), h_delta_b.x); + float f = write_sentence(uv3, vec2(-slen * .5, 0.), s); - f *= (1 - abs(floor(uv2.y) * .125)) * (1 - abs(floor(uv2.y) * .125)); + f *= (1. - abs(floor(uv2.y) * .125)) * (1. - abs(floor(uv2.y) * .125)); return vec4(f); } @@ -402,13 +397,13 @@ vec4 src_10(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec vec2 uv0 = vUV.st; float ratio = iResolution.x / iResolution.y; - vec2 uv1 = (uv0 - .5) * vec2(ratio, 1); + vec2 uv1 = (uv0 - .5) * vec2(ratio, 1.); // controls - float zoom = 5 + magic(f1, b1, seed + 10) * 15; - float h_scroll = magic(f2, b2, seed + 20); - float max_elevation = magic(f3, b3, seed + 30) * .5; + float zoom = 5. + magic(f1, b1, seed + 10.) * 15.; + float h_scroll = magic(f2, b2, seed + 20.); + float max_elevation = magic(f3, b3, seed + 30.) * .5; float thick = .1; // logic @@ -417,32 +412,32 @@ vec4 src_10(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec vec2 uv3 = iso(uv2); - uv3 += vec2(h_scroll, 0); + uv3 += vec2(h_scroll, 0.); uv3 *= round(zoom); - vec2 umax = vec2(round(zoom), 300); + vec2 umax = vec2(round(zoom), 300.); vec2 u0 = mod(floor(uv3), umax); - vec2 u1 = mod(floor(uv3 + vec2(1, 0)), umax); - vec2 u2 = mod(floor(uv3 + vec2(0, 1)), umax); - vec2 u3 = mod(floor(uv3 + vec2(-1, 0)), umax); - vec2 u4 = mod(floor(uv3 + vec2(0, -1)), umax); + vec2 u1 = mod(floor(uv3 + vec2(1., 0.)), umax); + vec2 u2 = mod(floor(uv3 + vec2(0., 1.)), umax); + vec2 u3 = mod(floor(uv3 + vec2(-1., 0.)), umax); + vec2 u4 = mod(floor(uv3 + vec2(0., -1.)), umax); - float e0 = (rand(floor(u0)) * 2 - 1) * max_elevation; - float e1 = (rand(floor(u1)) * 2 - 1) * max_elevation; - float e2 = (rand(floor(u2)) * 2 - 1) * max_elevation; - float e3 = (rand(floor(u3)) * 2 - 1) * max_elevation; - float e4 = (rand(floor(u4)) * 2 - 1) * max_elevation; + float e0 = (rand(floor(u0)) * 2. - 1.) * max_elevation; + float e1 = (rand(floor(u1)) * 2. - 1.) * max_elevation; + float e2 = (rand(floor(u2)) * 2. - 1.) * max_elevation; + float e3 = (rand(floor(u3)) * 2. - 1.) * max_elevation; + float e4 = (rand(floor(u4)) * 2. - 1.) * max_elevation; - uv3 = mod(uv3, 1.0) - .5; + uv3 = mod(uv3, 1.) - .5; - float f = 0; + float f = 0.; - f = line(uv3, vec2(0, 0) - iso_z(e0), vec2(1, 0) - iso_z(e1), thick) - + line(uv3, vec2(0, 0) - iso_z(e0), vec2(0, 1) - iso_z(e2), thick) - + line(uv3, vec2(0, 0) - iso_z(e0), vec2(-1, 0) - iso_z(e3), thick) - + line(uv3, vec2(0, 0) - iso_z(e0), vec2(0, -1) - iso_z(e4), thick); + f = line(uv3, vec2(0., 0.) - iso_z(e0), vec2(1., 0.) - iso_z(e1), thick) + + line(uv3, vec2(0., 0.) - iso_z(e0), vec2(0., 1.) - iso_z(e2), thick) + + line(uv3, vec2(0., 0.) - iso_z(e0), vec2(-1., 0.) - iso_z(e3), thick) + + line(uv3, vec2(0., 0.) - iso_z(e0), vec2(0., -1.) - iso_z(e4), thick); return vec4(f); } @@ -450,6 +445,7 @@ vec4 src_10(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec // SRC 11 : video in 2 + thru vec4 src_11(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) { + // TODO find another source return src_1(vUV, seed, b1, f1, b2, f2, b3, f3); } @@ -460,38 +456,38 @@ vec4 src_12(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec vec2 uv0 = vUV.st; float ratio = iResolution.x / iResolution.y; - vec2 uv1 = (uv0 - .5) * vec2(ratio, 1); + vec2 uv1 = (uv0 - .5) * vec2(ratio, 1.); // controls - float zoom = 5 + magic(f1, b1, seed + 10) * 15; - float shape = magic(f2, b2, seed + 20); - float repeat = 1 + magic(f3, b3, seed + 30) * 10; + float zoom = 5. + magic(f1, b1, seed + 10.) * 15.; + float shape = magic(f2, b2, seed + 20.); + float repeat = 1. + magic(f3, b3, seed + 30.) * 10.; // logic - float f = 0; + float f = 0.; vec2 uv2 = uv1; uv2 *= zoom; - uv2 = mod(uv2, 4); + uv2 = mod(uv2, 4.); vec2 uv3 = uv2; - uv3.y = mix(uv3.y, -uv3.y, step(2, uv2.x) * step(2, uv2.y)); - uv3.y = mix(uv3.y, -uv3.y, istep(2, uv2.x) * istep(2, uv2.y)); + uv3.y = mix(uv3.y, -uv3.y, step(2., uv2.x) * step(2., uv2.y)); + uv3.y = mix(uv3.y, -uv3.y, istep(2., uv2.x) * istep(2., uv2.y)); uv3.y = -uv3.y; - uv3.x = mix(-uv3.x, uv3.x, istep(3, uv2.x) * step(1, uv2.x)); - uv3.x = mix(-uv3.x, uv3.x, istep(3, uv2.y) * step(1, uv2.y)); + uv3.x = mix(-uv3.x, uv3.x, istep(3., uv2.x) * step(1., uv2.x)); + uv3.x = mix(-uv3.x, uv3.x, istep(3., uv2.y) * step(1., uv2.y)); - f = istep(.5, saw((length(mod(uv3, 1)) + shape + .5) * repeat)); + f = istep(.5, saw((length(mod(uv3, 1.)) + shape + .5) * repeat)); - f = mix(1 - f, f, istep(1, abs(uv2.y - 2)) * istep(2, uv2.x)); - f = mix(1 - f, f, step(1, abs(uv2.y - 2)) * step(2, uv2.x)); + f = mix(1. - f, f, istep(1., abs(uv2.y - 2.)) * istep(2., uv2.x)); + f = mix(1. - f, f, step(1., abs(uv2.y - 2.)) * step(2., uv2.x)); return vec4(f); } @@ -503,13 +499,13 @@ vec4 src_13(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec vec2 uv0 = vUV.st; float ratio = iResolution.x / iResolution.y; - vec2 uv1 = (uv0 - .5) * vec2(ratio, 1); + vec2 uv1 = (uv0 - .5) * vec2(ratio, 1.); // controls - float zoom = 5 + magic(f1, b1, seed + 10) * 15; - float shape = .1 + magic(f2, b2, seed + 20) * .9; - float repeat = 1 + magic(f3, b3, seed + 30) * 10; + float zoom = 5. + magic(f1, b1, seed + 10.) * 15.; + float shape = .1 + magic(f2, b2, seed + 20.) * .9; + float repeat = 1. + magic(f3, b3, seed + 30.) * 10.; // logic @@ -517,13 +513,13 @@ vec4 src_13(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec uv2 *= zoom; - uv2 = mod(uv2, 2); + uv2 = mod(uv2, 2.); - uv2 = abs(uv2 - 1); + uv2 = abs(uv2 - 1.); - float f = istep(1, length(uv2)) * istep(1, length(1 - uv2)); + float f = istep(1., length(uv2)) * istep(1., length(1. - uv2)); - f *= istep(.5, saw((length(uv2) + shape + .5) * repeat)) * istep(.5, saw((length(1 - uv2) + shape + .5) * repeat)); + f *= istep(.5, saw((length(uv2) + shape + .5) * repeat)) * istep(.5, saw((length(1. - uv2) + shape + .5) * repeat)); return vec4(f); } @@ -535,15 +531,15 @@ vec4 src_14(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec vec2 uv0 = vUV.st; float ratio = iResolution.x / iResolution.y; - vec2 uv1 = (uv0 - .5) * vec2(ratio, 1); + vec2 uv1 = (uv0 - .5) * vec2(ratio, 1.); // controls - float size = magic(f1, b1, seed + 10) * 2 + .1; - float dx = (fmagic(f2, b2, seed + 20) * (1 - size * .06) - .5) * ratio; - bool flip_x = magic_trigger(b2, seed + 20); - float dy = fmagic(f3, b3, seed + 30) * (1 - size * .17) - .5; - bool flip_y = magic_trigger(b3, seed + 30); + float size = magic(f1, b1, seed + 10.) * 2. + .1; + float dx = (fmagic(f2, b2, seed + 20.) * (1. - size * .06) - .5) * ratio; + bool flip_x = magic_trigger(b2, seed + 20.); + float dy = fmagic(f3, b3, seed + 30.) * (1. - size * .17) - .5; + bool flip_y = magic_trigger(b3, seed + 30.); // logic @@ -561,15 +557,15 @@ vec4 src_14(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec uv2 /= size; - uv2 *= -rot(-PI / 2); + uv2 *= -rot(-PI * 0.5); - float f = istep(0, (uv2.x * 2 + uv2.y) * (uv2.x * 2 - uv2.y)) * istep(0, uv2.y); + float f = istep(0., (uv2.x * 2. + uv2.y) * (uv2.x * 2. - uv2.y)) * istep(0., uv2.y); uv2.y += .1; - f -= istep(0, (uv2.x + uv2.y * 3) * (uv2.x - uv2.y * 3)) * istep(0, uv2.y); + f -= istep(0., (uv2.x + uv2.y * 3.) * (uv2.x - uv2.y * 3.)) * istep(0., uv2.y); - f += rect(uv2, vec2(0, -.04), vec2(.01, .04)); + f += rect(uv2, vec2(0., -.04), vec2(.01, .04)); return vec4(f); } @@ -577,7 +573,7 @@ vec4 src_14(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec vec4 src_stage(int src, vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) { if (src >= 15) { - src = int(randTime(seed + 100) * 14) + 1; + src = int(randTime(seed + 100.) * 14.) + 1; } if (src == 1) { diff --git a/project/inc_time.glsl b/project/inc_time.glsl index 53de926..90b8514 100644 --- a/project/inc_time.glsl +++ b/project/inc_time.glsl @@ -32,7 +32,7 @@ float divider(float x) float modTime(float k, float k2) { - return mod(divider(k) * iBeats * k2 / 4., 1.); + return mod(divider(k) * iBeats * k2 * .25, 1.); } float modTime(float k)