From e3d6fc068081db6bd8da9f658c4d0f0e34155118 Mon Sep 17 00:00:00 2001 From: klemek Date: Sun, 9 Nov 2025 11:03:34 +0100 Subject: [PATCH] feat: src 9 --- DEVELOPMENT.md | 14 ++++++++------ README.md | 2 +- default/inc_sentences.glsl | 4 ++-- default/inc_src.glsl | 32 +++++++++++++++++++++++++------- 4 files changed, 36 insertions(+), 16 deletions(-) diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index 4b60f8f..934af19 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -86,14 +86,16 @@ make -f Makefile.dev release-arch - [x] Share openGL state between monitor and screen - [ ] Default project - [x] split with includes - - [ ] src 9: game of life - - [ ] src 10 : ? - - [ ] src 11 : ? - - [ ] src 12 : ? + - [x] src 9 : sentences repeat h + - [ ] src 11 : isometric grid + - [ ] src 12 : pattern in my kitchen - [ ] src 13 : ? - - [x] src 15 : debug -> calibration screen - - [ ] fx 10 : colorize range (pretty color ranges) + - [ ] src 15 : ? - [x] fx 11 : spill + - [ ] fx 12 : colorize range (pretty color ranges) + - [ ] fx 13 : game of life + - [ ] fx 14 : ? + - [ ] fx 15 : ? - [x] frag 10 : move debug screen here - [ ] debug : add src/fx/A/B indicators - [ ] Other diff --git a/README.md b/README.md index 14c6137..c6798f1 100644 --- a/README.md +++ b/README.md @@ -149,7 +149,7 @@ options: | **2** | **5** | Video In 1 + Thru | _Hue_ | _Saturation_ | _Light_ | Dithering | _Pixel Size_ | _Bit Depth_ | _Blur_ | | | **6** | CP437 | _Zoom_ | _Charset_ | _Char. Delta_ | TV | _Lens_ | _Horz. Noise_ | _Dezoom_ | | | **7** | Sentences | _Zoom_ | _Sentence_ | _Vertical repeat_ | Kaleidoscope | _Axes_ | _Rotation_ | _Horz. Scroll_ | -| | **8** | | | | | CP437 | _Zoom_ | _Charset_ | _Char. Delta_ | +| | **8** | Sentences repeat | _X Shift_ | _Sentence_ | _Vertical repeat_ | CP437 | _Zoom_ | _Charset_ | _Char. Delta_ | | | **9** | | | | | Lens | _Lens limit_ | _Lens power_ | _Pre Zoom_ | | **3** | **A** | Video In 2 + Thru | _Hue_ | _Saturation_ | _Light_ | Spill | _Bottom limit_ | _Top Limit_ | _Rotation_ | | | **B** | | | | | | | | | diff --git a/default/inc_sentences.glsl b/default/inc_sentences.glsl index 8787831..14b4f84 100644 --- a/default/inc_sentences.glsl +++ b/default/inc_sentences.glsl @@ -17,8 +17,8 @@ const int sentences[SENTENCE_COUNT][20] = { {0x4C, 0x69, 0x76, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x47, 0x65, 0x6E, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x43, 0x6F, 0x6E, 0x74, 0x72, 0x6F, 0x6C, 0x6C, 0x65, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - {0x3C0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - {0x4B, 0x6C, 0x65, 0x3C0, 0x65, 0x6B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0xE3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x4B, 0x6C, 0x65, 0xE3, 0x65, 0x6B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x43, 0x6F, 0x64, 0x65, 0x20, 0x61, 0x73, 0x20, 0x61, 0x72, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x41, 0x72, 0x74, 0x20, 0x61, 0x73, 0x20, 0x63, 0x6F, 0x64, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, }; diff --git a/default/inc_src.glsl b/default/inc_src.glsl index 6ee4cbc..220a46c 100644 --- a/default/inc_src.glsl +++ b/default/inc_src.glsl @@ -236,6 +236,7 @@ subroutine(src_stage_sub) vec4 src_8(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 vec2 uv2 = uv1; uv2 *= (1 + zoom) * 12; + uv2.y += 0.5; int s = int(sentence * (SENTENCE_COUNT - 1)); uv2.x += floor(uv2.y) * (h_delta - 0.5) * 2; uv2.y = mix(uv2.y, mod(uv2.y, 1), h_delta_b.x); @@ -244,22 +245,39 @@ subroutine(src_stage_sub) vec4 src_8(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 return vec4(f); } -// TODO SRC 9 +// SRC 9 : sentences repeat subroutine(src_stage_sub) vec4 src_9(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) { - return src_2(vUV, seed, b1, f1, b2, f2, b3, f3); + // start - // start - - vec2 uv0 = vUV.st; + vec2 uv0 = vUV.st; float ratio = iResolution.x / iResolution.y; 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); + // logic - - return texture(iTex0, vUV); + + vec2 uv2 = uv1; + uv2.x += h_shift; + uv2 *= 15; + uv2.y += 0.5; + int s = int(sentence * (SENTENCE_COUNT - 1)); + float slen = float(lengths[s]); + uv2.x += floor(uv2.y) * (h_delta - 0.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_20(uv3, vec2(-slen * 0.5, 0), sentences[s]); + + f *= (1 - abs(floor(uv2.y) * 0.125)) * (1 - abs(floor(uv2.y) * 0.125)); + + return vec4(f); } // TODO SRC 10