From 94d1593e8e3b1444f764d7af0cf88d1bd36d719c Mon Sep 17 00:00:00 2001 From: klemek Date: Sun, 9 Nov 2025 22:57:14 +0100 Subject: [PATCH] src/fx 15 : random --- DEVELOPMENT.md | 4 +-- default/inc_fx.glsl | 46 ++++++++++++++++++--------- default/inc_src.glsl | 73 ++++++++++++++++++------------------------- default/inc_time.glsl | 6 +++- 4 files changed, 69 insertions(+), 60 deletions(-) diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index cfe898d..4987016 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -91,12 +91,12 @@ make -f Makefile.dev release-arch - [x] src 12 : pattern in my kitchen - [x] src 13 : another pattern in my kitchen - [x] src 14 : cursor with select - - [ ] src 15 : random source + - [x] src 15 : random source - [x] fx 11 : spill - [x] fx 12 : game of life - [x] fx 13 : sobel - [ ] fx 14 : colorize range (pretty color ranges) - - [ ] fx 15 : random fx + - [x] fx 15 : random fx - [x] frag 10 : move debug screen here - [ ] debug : add src/fx/A/B indicators - [ ] Other diff --git a/default/inc_fx.glsl b/default/inc_fx.glsl index 5339a9d..638d691 100644 --- a/default/inc_fx.glsl +++ b/default/inc_fx.glsl @@ -507,24 +507,40 @@ subroutine(fx_stage_sub) vec4 fx_14(vec2 vUV, sampler2D previous, sampler2D feed return fx_master(c0, c, seed, m0); } -// TODO FX 15 +// FX 15 : Random subroutine(fx_stage_sub) vec4 fx_15(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0) { - return fx_2(vUV, previous, feedback, seed, b1, f1, b2, f2, b3, f3, m0); - // start + int fx = int(randTime(seed + 100, 16) * 14); - vec2 uv0 = vUV.st; - float ratio = iResolution.x / iResolution.y; - vec2 uv1 = (uv0 - .5) * vec2(ratio, 1); - - // controls - - // logic - - vec3 c0 = texture(previous, uv0).xyz; - vec3 c = c0; - - return fx_master(c0, c, seed, m0); + if (fx == 0) { + return fx_1(vUV, previous, feedback, seed, b1, f1, b2, f2, b3, f3, m0); + } else if (fx == 1) { + return fx_2(vUV, previous, feedback, seed, b1, f1, b2, f2, b3, f3, m0); + } else if (fx == 2) { + return fx_3(vUV, previous, feedback, seed, b1, f1, b2, f2, b3, f3, m0); + } else if (fx == 3) { + return fx_4(vUV, previous, feedback, seed, b1, f1, b2, f2, b3, f3, m0); + } else if (fx == 4) { + return fx_5(vUV, previous, feedback, seed, b1, f1, b2, f2, b3, f3, m0); + } else if (fx == 5) { + return fx_6(vUV, previous, feedback, seed, b1, f1, b2, f2, b3, f3, m0); + } else if (fx == 6) { + return fx_7(vUV, previous, feedback, seed, b1, f1, b2, f2, b3, f3, m0); + } else if (fx == 7) { + return fx_8(vUV, previous, feedback, seed, b1, f1, b2, f2, b3, f3, m0); + } else if (fx == 8) { + return fx_9(vUV, previous, feedback, seed, b1, f1, b2, f2, b3, f3, m0); + } else if (fx == 9) { + return fx_10(vUV, previous, feedback, seed, b1, f1, b2, f2, b3, f3, m0); + } else if (fx == 10) { + return fx_11(vUV, previous, feedback, seed, b1, f1, b2, f2, b3, f3, m0); + } else if (fx == 11) { + return fx_12(vUV, previous, feedback, seed, b1, f1, b2, f2, b3, f3, m0); + } else if (fx == 12) { + return fx_13(vUV, previous, feedback, seed, b1, f1, b2, f2, b3, f3, m0); + } else { + return fx_14(vUV, previous, feedback, seed, b1, f1, b2, f2, b3, f3, m0); + } } #endif \ No newline at end of file diff --git a/default/inc_src.glsl b/default/inc_src.glsl index 7318988..5cdcdb2 100644 --- a/default/inc_src.glsl +++ b/default/inc_src.glsl @@ -457,51 +457,40 @@ subroutine(src_stage_sub) vec4 src_14(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 return vec4(f); } -// TODO SRC 15 +// SRC 15 : Random subroutine(src_stage_sub) vec4 src_15(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) { - return src_9(vUV, seed, b1, f1, b2, f2, b3, f3); - // start + int src = int(randTime(seed + 100, 16) * 14); - vec2 uv0 = vUV.st; - float ratio = iResolution.x / iResolution.y; - vec2 uv1 = (uv0 - .5) * vec2(ratio, 1); - - // controls - - float circle = magic(f1, b1, seed + 10); - float x_shift = magic(f2, b2, seed + 20); - float grid_size = 0.1 + magic(f3, b3, seed + 30) * 0.9; - bool show_grid = magic_trigger(b3, seed + 30); - - // logic - - float f = 0; - - f += istep(circle * 0.5, length(uv1)); - - float txt = 0; - float txt_rect = rect(uv1 * 10, vec2(0), vec2(2, 1)); - - txt += write_int(uv1 * 10, vec2(-1.33,-0.5), int(mod(iBeats, 4) + 1), 1); - txt += char_at(uv1 * 10, vec2(-0.33, -0.5), 0x2E); - txt += write_int(uv1 * 10, vec2(0.66,-0.5), int((mod(iBeats, 4) + 1) * 10), 1); - - float grid = 0; - - grid = istep(grid_size * 0.1, mod(uv1.x + grid_size * 0.05, grid_size)) + istep(grid_size * 0.1, mod(uv1.y + grid_size * 0.05, grid_size)); - - grid = mix(grid, 0, show_grid ? min(1, f + txt_rect) : 1); - - vec3 c = vec3(istep(0.25, mod(uv0.x + x_shift, 0.5)), istep(0.25, mod(uv0.x + 0.125 + x_shift, 0.5)), istep(0.5, mod(uv0.x + x_shift, 1.0))); - - c = mix(c, 1 - c, f); - - c = mix(c, vec3(txt), txt_rect); - - c = mix(c, vec3(grid) * 0.5, grid); - - return vec4(c, 1); + if (src == 0) { + return src_1(vUV, seed, b1, f1, b2, f2, b3, f3); + } else if (src == 1) { + return src_2(vUV, seed, b1, f1, b2, f2, b3, f3); + } else if (src == 2) { + return src_3(vUV, seed, b1, f1, b2, f2, b3, f3); + } else if (src == 3) { + return src_4(vUV, seed, b1, f1, b2, f2, b3, f3); + } else if (src == 4) { + return src_5(vUV, seed, b1, f1, b2, f2, b3, f3); + } else if (src == 5) { + return src_6(vUV, seed, b1, f1, b2, f2, b3, f3); + } else if (src == 6) { + return src_7(vUV, seed, b1, f1, b2, f2, b3, f3); + } else if (src == 7) { + return src_8(vUV, seed, b1, f1, b2, f2, b3, f3); + } else if (src == 8) { + return src_9(vUV, seed, b1, f1, b2, f2, b3, f3); + } else if (src == 9) { + return src_10(vUV, seed, b1, f1, b2, f2, b3, f3); + } else if (src == 10) { + return src_11(vUV, seed, b1, f1, b2, f2, b3, f3); + } else if (src == 11) { + return src_12(vUV, seed, b1, f1, b2, f2, b3, f3); + } else if (src == 12) { + return src_13(vUV, seed, b1, f1, b2, f2, b3, f3); + } else { + return src_14(vUV, seed, b1, f1, b2, f2, b3, f3); + } } #endif \ No newline at end of file diff --git a/default/inc_time.glsl b/default/inc_time.glsl index 725aa00..dedfe71 100644 --- a/default/inc_time.glsl +++ b/default/inc_time.glsl @@ -11,8 +11,12 @@ uniform float iTime; uniform float iTempo; uniform float iBeats; +float randTime(float seed, int beats){ + return rand(seed + floor(iBeats / beats)); +} + float randTime(float seed){ - return rand(seed + floor(iBeats / 4)); + return randTime(seed, 4); } float divider(float x)