From 029f9d4d0a8d70c152804f81b8c61624eaa9216b Mon Sep 17 00:00:00 2001 From: klemek Date: Thu, 27 Aug 2026 18:20:26 +0200 Subject: [PATCH] wip --- forge-steel | 2 +- project/forge_project.cfg | 25 +---- project/frag1.glsl | 8 +- project/frag2.glsl | 7 +- project/frag3.glsl | 5 +- project/frag4.glsl | 5 +- project/frag5.glsl | 4 +- project/frag6.glsl | 5 +- project/frag7.glsl | 4 +- project/inc_cp437.glsl | 94 +++++++++--------- project/inc_functions.glsl | 199 ++++++++++++++++++------------------- project/inc_fx.glsl | 115 ++++++++++----------- project/inc_magic.glsl | 28 +++--- project/inc_rand.glsl | 2 +- project/inc_sentences.glsl | 59 +++++++---- project/inc_src.glsl | 143 +++++++++++++------------- project/inc_time.glsl | 22 ++-- 17 files changed, 359 insertions(+), 368 deletions(-) diff --git a/forge-steel b/forge-steel index 3a22812..6110e1d 160000 --- a/forge-steel +++ b/forge-steel @@ -1 +1 @@ -Subproject commit 3a228122cf23a7cbb8d9639b9ffafbadd3ab3a8f +Subproject commit 6110e1df7f9ec665dde18e8651b5e5552db7328e diff --git a/project/forge_project.cfg b/project/forge_project.cfg index d157706..a1d4922 100644 --- a/project/forge_project.cfg +++ b/project/forge_project.cfg @@ -68,21 +68,6 @@ UNIFORM_GROUP_PREFIX=iGroup # Internal texture X UNIFORM_TEX_PREFIX=iTex -# === SUBROUTINES === -# GLSL subroutines prefixes -# You can then use them as: -# subroutine() () {} -# (see: https://wikis.khronos.org/opengl/Shader_Subroutine) -# Numbers go from 1 to SELECT_PAGE_COUNT * SELECT_ITEM_COUNT -# Each fragment shader is injected its current state subroutine - -# Total subroutine variants -SUB_TYPE_COUNT=2 -# Each subroutine variant prefix -SUB_1_PREFIX=src_ -SUB_2_PREFIX=fx_ - - # =========== # TEXTURE I/O # =========== @@ -159,11 +144,11 @@ TAP_TEMPO=46 # You can manipulate which subroutine is sent to which fragment shader # Midi codes to select fragment X -SELECT_FRAG_3=32 -SELECT_FRAG_4=64 -SELECT_FRAG_5=36 -SELECT_FRAG_6=68 -SELECT_FRAG_8=52 +SELECT_FRAG_1=32 +SELECT_FRAG_2=64 +SELECT_FRAG_3=36 +SELECT_FRAG_4=68 +SELECT_FRAG_6=52 # Total number of pages (can be 1) SELECT_PAGE_COUNT=3 # Midi codes to select page X diff --git a/project/frag1.glsl b/project/frag1.glsl index ec1d104..c6cba86 100644 --- a/project/frag1.glsl +++ b/project/frag1.glsl @@ -1,5 +1,4 @@ - -#version 460 +#version 330 // SRC A // ----------- @@ -10,11 +9,10 @@ out vec4 fragColor; #include inc_src.glsl -subroutine uniform src_stage_sub src_stage; - uniform int iSeed1; +uniform int iState1; uniform vec3 iGroup1_1[6]; void main() { - fragColor = src_stage(vUV, iSeed1, iGroup1_1[0], iGroup1_1[1].xy, iGroup1_1[2], iGroup1_1[3].xy, iGroup1_1[4], iGroup1_1[5].xy); + fragColor = src_stage(iState1, vUV, iSeed1, iGroup1_1[0], iGroup1_1[1].xy, iGroup1_1[2], iGroup1_1[3].xy, iGroup1_1[4], iGroup1_1[5].xy); } diff --git a/project/frag2.glsl b/project/frag2.glsl index 6bdf661..ee25c42 100644 --- a/project/frag2.glsl +++ b/project/frag2.glsl @@ -1,4 +1,4 @@ -#version 460 +#version 330 // SRC B // ----------- @@ -9,11 +9,10 @@ out vec4 fragColor; #include inc_src.glsl -subroutine uniform src_stage_sub src_stage; - uniform int iSeed2; +uniform int iState2; uniform vec3 iGroup1_2[6]; void main() { - fragColor = src_stage(vUV, iSeed2, iGroup1_2[0], iGroup1_2[1].xy, iGroup1_2[2], iGroup1_2[3].xy, iGroup1_2[4], iGroup1_2[5].xy); + fragColor = src_stage(iState2, vUV, iSeed2, iGroup1_2[0], iGroup1_2[1].xy, iGroup1_2[2], iGroup1_2[3].xy, iGroup1_2[4], iGroup1_2[5].xy); } diff --git a/project/frag3.glsl b/project/frag3.glsl index eed41a6..7a9d78f 100644 --- a/project/frag3.glsl +++ b/project/frag3.glsl @@ -1,4 +1,4 @@ -#version 460 +#version 330 // FX A // ------------- @@ -14,8 +14,9 @@ out vec4 fragColor; uniform sampler2D iTex1; uniform sampler2D iTex3; uniform int iSeed3; +uniform int iState3; uniform vec3 iGroup2_1[7]; void main() { - fragColor = fx_stage(vUV, iTex1, iTex3, iSeed3, iGroup2_1[0], iGroup2_1[1].xy, iGroup2_1[2], iGroup2_1[3].xy, iGroup2_1[4], iGroup2_1[5].xy, iGroup2_1[6]); + fragColor = fx_stage(iState3, vUV, iTex1, iTex3, iSeed3, iGroup2_1[0], iGroup2_1[1].xy, iGroup2_1[2], iGroup2_1[3].xy, iGroup2_1[4], iGroup2_1[5].xy, iGroup2_1[6]); } diff --git a/project/frag4.glsl b/project/frag4.glsl index f150c8c..d0dd083 100644 --- a/project/frag4.glsl +++ b/project/frag4.glsl @@ -1,4 +1,4 @@ -#version 460 +#version 330 // FX B // ------------- @@ -14,8 +14,9 @@ out vec4 fragColor; uniform sampler2D iTex2; uniform sampler2D iTex4; uniform int iSeed4; +uniform int iState4; uniform vec3 iGroup2_2[7]; void main() { - fragColor = fx_stage(vUV, iTex2, iTex4, iSeed4, iGroup2_2[0], iGroup2_2[1].xy, iGroup2_2[2], iGroup2_2[3].xy, iGroup2_2[4], iGroup2_2[5].xy, iGroup2_2[6]); + fragColor = fx_stage(iState4, vUV, iTex2, iTex4, iSeed4, iGroup2_2[0], iGroup2_2[1].xy, iGroup2_2[2], iGroup2_2[3].xy, iGroup2_2[4], iGroup2_2[5].xy, iGroup2_2[6]); } diff --git a/project/frag5.glsl b/project/frag5.glsl index 7d4af38..343cad0 100644 --- a/project/frag5.glsl +++ b/project/frag5.glsl @@ -1,4 +1,4 @@ -#version 460 +#version 330 // A+B // ------------ @@ -27,7 +27,7 @@ void main() { float k = mean(color_a); - mix_value = mix(mix_value, mix_value * 0.9 + 0.05, iDemo); + mix_value = mix(mix_value, mix_value * .9 + .05, iDemo); if (mix_type) { fragColor = mix(color_a, color_b, step(mix_value, k)); diff --git a/project/frag6.glsl b/project/frag6.glsl index c79afd1..2d15d78 100644 --- a/project/frag6.glsl +++ b/project/frag6.glsl @@ -1,4 +1,4 @@ -#version 460 +#version 330 // MFX // ------------ @@ -14,11 +14,12 @@ out vec4 fragColor; uniform sampler2D iTex5; uniform sampler2D iTex0; uniform int iSeed6; +uniform int iState6; uniform vec3 iGroup2_3[7]; uniform vec3 iGroup3_1[2]; void main() { - vec4 color = fx_stage(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]); + 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); diff --git a/project/frag7.glsl b/project/frag7.glsl index 16b2ef3..97afb70 100644 --- a/project/frag7.glsl +++ b/project/frag7.glsl @@ -1,4 +1,4 @@ -#version 460 +#version 330 // OUT @@ -15,6 +15,6 @@ void main() { vec2 uv = 1 - vUV; // vec2 uv = vUV; vec3 c = texture(iTex0, uv).xyz; - c = mix(c, 1 - c, write_int(uv * 20, vec2(0.1, 0.1), iFPS, 2)); + c = mix(c, 1 - c, write_int(uv * 20, vec2(.1, .1), iFPS, 2)); fragColor = vec4(c, 1); } diff --git a/project/inc_cp437.glsl b/project/inc_cp437.glsl index bb4cc76..0fb20dd 100644 --- a/project/inc_cp437.glsl +++ b/project/inc_cp437.glsl @@ -1,7 +1,7 @@ #ifndef INC_CP437 #define INC_CP437 -const int cp437[] = { +const int cp437[] = int[1024]( 0x0000, 0x0000, 0x0000, 0x0000, // 0x00, NUL 0x151E, 0x8A87, 0xE19D, 0x789B, // 0x01, SOH, SMILEY BLACK 0xFBFE, 0xFDF7, 0xEF73, 0x7FEC, // 0x02, STX, SMILEY LIGHT @@ -257,10 +257,10 @@ const int cp437[] = { 0x666E, 0x3331, 0x0006, 0x0003, // 0xFC, ⁿ 0x6C8E, 0x0010, 0x000E, 0x0001, // 0xFD, ² 0xCC00, 0x3300, 0x00CC, 0x0033, // 0xFE, ■ - 0x0000, 0x0000, 0x0000, 0x0000, // 0xFF, NBSP -}; + 0x0000, 0x0000, 0x0000, 0x0000 // 0xFF, NBSP +); -const int charsets[] = { +const int charsets[] = int[18]( 0x30, 10, // NUMBERS 0x41, 26, // UPPERCASE LETTERS 0x61, 26, // LOWERCASE LETTERS @@ -269,12 +269,12 @@ const int charsets[] = { 0xB3, 40, // BARS 0xE0, 16, // GREEK 0x80, 28, // ACCENTS - 0xB0, 3, // SHADES -}; + 0xB0, 3 // SHADES +); #define CHARSETS 8 -const int hex_chars[] = { +const int hex_chars[] = int[16]( 0x30, 0x31, 0x32, @@ -290,29 +290,29 @@ const int hex_chars[] = { 0x43, 0x44, 0x45, - 0x46, -}; + 0x46 +); bool char(vec2 pos, int code) { - if (pos.x < 0.0 || pos.y < 0.0 || pos.x >= 1.0 || pos.y >= 1.0) { + if (pos.x < .0 || pos.y < .0 || pos.x >= 1. || pos.y >= 1.) { return false; } - ivec2 pos2 = ivec2(pos.x * 8.0, (1 - pos.y) * 8.0); + ivec2 pos2 = ivec2(pos.x * 8., (1 - pos.y) * 8.); ivec2 subpos = pos2 % 4; - int v = int(pow(2, subpos.y * 4 + subpos.x)); - int d = int(pos2.y * 0.25) * 2 + int(pos2.x * 0.25); - return (cp437[code * 4 + d] & v) > 0; + int v = int(pow(2., subpos.y * 4. + subpos.x)); + int d = int(pos2.y * .25) * 2 + int(pos2.x * .25); + return (cp437[code * 4 + d] & v) > 0.; } float char_at(vec2 uv, vec2 pos, int code) { - return char(uv - pos, code) ? 1 : 0; + return char(uv - pos, code) ? 1. : 0.; } float write_5(vec2 uv, vec2 pos, int str[5]) { - float d = 0; + float d = 0.; int i; for (i = 0; i < 5; i++) { @@ -320,7 +320,7 @@ float write_5(vec2 uv, vec2 pos, int str[5]) return d; } - d += char_at(uv, pos + vec2(i, 0), str[i]); + d += char_at(uv, pos + vec2(i, 0.), str[i]); } return d; @@ -328,7 +328,7 @@ float write_5(vec2 uv, vec2 pos, int str[5]) float write_10(vec2 uv, vec2 pos, int str[10]) { - float d = 0; + float d = 0.; int i; for (i = 0; i < 10; i++) { @@ -344,7 +344,7 @@ float write_10(vec2 uv, vec2 pos, int str[10]) float write_20(vec2 uv, vec2 pos, int str[20]) { - float d = 0; + float d = 0.; int i; for (i = 0; i < 20; i++) { @@ -352,35 +352,35 @@ float write_20(vec2 uv, vec2 pos, int str[20]) return d; } - d += char_at(uv, pos + vec2(i, 0), str[i]); + d += char_at(uv, pos + vec2(i, 0.), str[i]); } return d; } -float write_int(vec2 uv, vec2 pos, uint value, uint magnitude) +float write_int(vec2 uv, vec2 pos, int value, int magnitude) { int i; - uint m = 1; - float d = 0; + int m = 1; + float d = 0.; for (i = 0; i < magnitude; i++) { if (i == 0 || value >= m) { - d += char_at(uv, pos + vec2(magnitude - i - 1, 0), int(0x30 + (value % (m * 10u)) / m)); - m *= 10u; + d += char_at(uv, pos + vec2(magnitude - i - 1., 0.), int(0x30 + (value % (m * 10)) / m)); + m *= 10; } } return d; } -float write_int_left(vec2 uv, vec2 pos, uint value, uint magnitude) +float write_int_left(vec2 uv, vec2 pos, int value, int magnitude) { int i; - uint m = 1; - float d = 0; + int m = 1; + float d = 0.; for (i = 0; i < magnitude; i++) { if (i == 0 || value >= m) { - pos.x += 1; - m *= 10u; + pos.x += 1.; + m *= 10; } } return write_int(uv, pos, value, magnitude); @@ -390,24 +390,24 @@ 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 * 0.5)) * 0.5 * inv_k; + tex_uv += vec2(d % 2, floor(d * .5)) * .5 * inv_k; return - ((mean(reframe(tex, tex_uv + vec2(0, 3) * inv_k * 0.125)) > t) ? 1 : 0) + - ((mean(reframe(tex, tex_uv + vec2(0, 2) * inv_k * 0.125)) > t) ? 2 : 0) + - ((mean(reframe(tex, tex_uv + vec2(0, 1) * inv_k * 0.125)) > t) ? 4 : 0) + - ((mean(reframe(tex, tex_uv + vec2(0, 0) * inv_k * 0.125)) > t) ? 8 : 0) + - ((mean(reframe(tex, tex_uv + vec2(1, 3) * inv_k * 0.125)) > t) ? 16 : 0) + - ((mean(reframe(tex, tex_uv + vec2(1, 2) * inv_k * 0.125)) > t) ? 32 : 0) + - ((mean(reframe(tex, tex_uv + vec2(1, 1) * inv_k * 0.125)) > t) ? 64 : 0) + - ((mean(reframe(tex, tex_uv + vec2(1, 0) * inv_k * 0.125)) > t) ? 128 : 0) + - ((mean(reframe(tex, tex_uv + vec2(2, 3) * inv_k * 0.125)) > t) ? 256 : 0) + - ((mean(reframe(tex, tex_uv + vec2(2, 2) * inv_k * 0.125)) > t) ? 512 : 0) + - ((mean(reframe(tex, tex_uv + vec2(2, 1) * inv_k * 0.125)) > t) ? 1024 : 0) + - ((mean(reframe(tex, tex_uv + vec2(2, 0) * inv_k * 0.125)) > t) ? 2048 : 0) + - ((mean(reframe(tex, tex_uv + vec2(3, 3) * inv_k * 0.125)) > t) ? 4096 : 0) + - ((mean(reframe(tex, tex_uv + vec2(3, 2) * inv_k * 0.125)) > t) ? 8192 : 0) + - ((mean(reframe(tex, tex_uv + vec2(3, 1) * inv_k * 0.125)) > t) ? 16384 : 0) + - ((mean(reframe(tex, tex_uv + vec2(3, 0) * inv_k * 0.125)) > t) ? 32768 : 0); + ((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 diff --git a/project/inc_functions.glsl b/project/inc_functions.glsl index f9c9b6b..7c0009b 100644 --- a/project/inc_functions.glsl +++ b/project/inc_functions.glsl @@ -12,51 +12,51 @@ // BASICS float istep(float x, float y) { - return 1 - step(x, y); + return 1. - step(x, y); } float estep(float x, float y) { - return smoothstep(x - 0.0001, x + 0.0001, y); + return smoothstep(x - .0001, x + .0001, y); } float iestep(float x, float y) { - return 1 - estep(x, y); + return 1. - estep(x, y); } float ease(float x) { - return 0.5 - cos(max(min(x, 1.0), 0.0) * PI) * 0.5; + return .5 - cos(max(min(x, 1.), 0.) * PI) * .5; } vec2 ease(vec2 x) { - return 0.5 - cos(max(min(x, 1.0), 0.0) * PI) * 0.5; + return .5 - cos(max(min(x, 1.), 0.) * PI) * .5; } vec3 ease(vec3 x) { - return 0.5 - cos(max(min(x, 1.0), 0.0) * PI) * 0.5; + return .5 - cos(max(min(x, 1.), 0.) * PI) * .5; } float saw(float x) { - return abs(mod(x + 1, 2) - 1); + return abs(mod(x + 1., 2.) - 1.); } vec2 saw(vec2 x) { - return abs(mod(x + 1, 2) - 1); + return abs(mod(x + 1., 2.) - 1.); } vec3 saw(vec3 x) { - return abs(mod(x + 1, 2) - 1); + return abs(mod(x + 1., 2.) - 1.); } float cmod(float x, float k) { - return mod(x + k * 0.5, k) - k * 0.5; + return mod(x + k * .5, k) - k * .5; } vec2 cmod(vec2 x, float k) { - return mod(x + k * 0.5, k) - k * 0.5; + return mod(x + k * .5, k) - k * .5; } vec3 cmod(vec3 x, float k) { - return mod(x + k * 0.5, k) - k * 0.5; + return mod(x + k * .5, k) - k * .5; } // COLORS @@ -71,9 +71,9 @@ vec3 col(float x) { vec3 shift(vec3 c, float f) { return vec3( - c.x * (1 - f) + c.y * f, - c.y * (1 - f) + c.z * f, - c.z * (1 - f) + c.x * f + c.x * (1. - f) + c.y * f, + c.y * (1. - f) + c.z * f, + c.z * (1. - f) + c.x * f ); } @@ -82,40 +82,40 @@ vec3 shift3(vec3 c, float f) { } vec3 mix3(vec3 c1, vec3 c2, vec3 c3, float x) { - return istep(0.5, x) * mix(c1, c2, x * 2) - + step(0.5, x) * mix(c2, c3, x * 2 - 1); + return istep(.5, x) * mix(c1, c2, x * 2.) + + step(.5, x) * mix(c2, c3, x * 2. - 1.); } vec3 mix4(vec3 c1, vec3 c2, vec3 c3, vec3 c4, float x) { - return istep(0.333, x) * mix(c1, c2, x * 3) - + step(0.333, x) * istep(0.667, x) * mix(c2, c3, x * 3 - 1) - + step(0.667, x) * mix(c3, c4, x * 3 - 2); + return istep(.333, x) * mix(c1, c2, x * 3.) + + step(.333, x) * istep(.667, x) * mix(c2, c3, x * 3. - 1.) + + step(.667, x) * mix(c3, c4, x * 3. - 2.); ; } vec3 mix5(vec3 c1, vec3 c2, vec3 c3, vec3 c4, vec3 c5, float x) { - return istep(0.25, x) * mix(c1, c2, x * 4) - + step(0.25, x) * istep(0.5, x) * mix(c2, c3, x * 4 - 1) - + step(0.5, x) * istep(0.75, x) * mix(c3, c4, x * 4 - 2) - + step(0.75, x) * mix(c4, c5, x * 4 - 3); + return istep(.25, x) * mix(c1, c2, x * 4.) + + step(.25, x) * istep(.5, x) * mix(c2, c3, x * 4. - 1.) + + step(.5, x) * istep(.75, x) * mix(c3, c4, x * 4. - 2.) + + step(.75, x) * mix(c4, c5, x * 4. - 3.); } vec3 mix6(vec3 c1, vec3 c2, vec3 c3, vec3 c4, vec3 c5, vec3 c6, float x) { - return istep(0.2, x) * mix(c1, c2, x * 5) - + step(0.2, x) * istep(0.4, x) * mix(c2, c3, x * 5 - 1) - + step(0.4, x) * istep(0.6, x) * mix(c3, c4, x * 5 - 2) - + step(0.6, x) * istep(0.8, x) * mix(c4, c5, x * 5 - 3) - + step(0.8, x) * mix(c5, c6, x * 5 - 4); + 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.) + + step(.8, x) * mix(c5, c6, x * 5. - 4.); } float mean(vec3 v) { - return v.x * 0.3333 + v.y * 0.3333 + v.z * 0.3333; + return v.x * .3333 + v.y * .3333 + v.z * .3333; } float mean(vec4 v) { - return v.x * 0.3333 + v.y * 0.3333 + v.z * 0.3333; + return v.x * .3333 + v.y * .3333 + v.z * .3333; } // OTHER @@ -130,13 +130,13 @@ mat2 rot(float angle) { // EFFECTS vec2 lens(vec2 uv, float limit, float power) { - return uv * (1 + limit + length(uv * power)); + return uv * (1. + limit + length(uv * power)); } vec2 kal(vec2 uv, float n) { - float t = atan(uv.y, uv.x) + PI * 0.5; - float q = 3.0 / (2.0 * PI); - t = abs(mod(t + PI / (n), 2 * PI / n) - PI / (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)); return length(uv) * vec2( cos(t), sin(t) @@ -144,8 +144,8 @@ vec2 kal(vec2 uv, float n) { } vec2 kal2(vec2 uv, float n) { - float t = atan(uv.y, uv.x) + PI * 0.5; - float t2 = abs(mod(t + PI / n, 2 * PI / n) - PI / n); + float t = atan(uv.y, uv.x) + PI * .5; + float t2 = abs(mod(t + PI / n, 2. * PI / n) - PI / n); return length(uv) * vec2( cos(t2), sin(t2) @@ -156,27 +156,27 @@ vec2 kal2(vec2 uv, float n) { float noise(vec2 n) { - const vec2 d = vec2(0, 1); + const vec2 d = vec2(0., 1.); vec2 b = floor(n); vec2 f = fract(n); - f *= f * (3 - 2 * f); + f *= f * (3. - 2. * f); return mix(mix(rand(b), rand(b + d.yx), f.x), mix(rand(b + d.xy), rand(b + d.yy), f.x), f.y); } float noise_f(vec2 n, int f) { - float o = noise(n) / 2; - o += mix(o, noise(n * 2), f > 1 ? 1 : 0) / 4; - o += mix(o, noise(n * 4), f > 2 ? 1 : 0) / 8; - o += mix(o, noise(n * 8), f > 3 ? 1 : 0) / 16; - o += mix(o, noise(n * 16), f > 4 ? 1 : 0) / 32; + float o = noise(n) * .5; + o += mix(o, noise(n * 2.), f > 1. ? 1. : 0.) * .25; + o += mix(o, noise(n * 4.), f > 2. ? 1. : 0.) * .125; + o += mix(o, noise(n * 8.), f > 3. ? 1. : 0.) * .0625; + o += mix(o, noise(n * 16.), f > 4. ? 1. : 0.) * .03125; return o; } // VORONOI float v_index(vec2 uv) { - return floor(uv.x) + floor(uv.y) * 45; + return floor(uv.x) + floor(uv.y) * 45.; } vec2 v_pos(float i, int seed, float time) { @@ -184,10 +184,10 @@ vec2 v_pos(float i, int seed, float time) { float iTimeV = time - iTimeId; float x0 = rand(i + seed + iTimeId); - float y0 = rand(i + seed + 10 + iTimeId); + float y0 = rand(i + seed + 10. + iTimeId); - float x1 = rand(i + seed + iTimeId + 1); - float y1 = rand(i + seed + 10 + iTimeId + 1); + float x1 = rand(i + seed + iTimeId + 1.); + float y1 = rand(i + seed + 10. + iTimeId + 1.); return vec2( mix(x0, x1, ease(ease(iTimeV))), @@ -196,12 +196,13 @@ vec2 v_pos(float i, int seed, float time) { } vec4 voronoi(vec2 uv, float dist, int seed, float time) { - vec4 o = vec4(0, 0, 2, 0); - vec4 t = vec4(0, 0, 2, 0); + vec4 o = vec4(0., 0., 2., 0.); + vec4 t = vec4(0., 0., 2., 0.); float d, i; vec2 uv2, p; - for (int dx = -1; dx <= 1; dx++) { - for (int dy = -1; dy <= 1; dy++) { + int dx, dy; + for (dx = -1; dx <= 1; dx++) { + for (dy = -1; dy <= 1; dy++) { uv2 = vec2(floor(uv.x) + dx, floor(uv.y) + dy); i = v_index(uv2); p = uv2 + v_pos(i, seed, time) * dist; @@ -224,21 +225,21 @@ float circle(vec2 uv, vec2 c, float size) { } float h_circle(vec2 uv, vec2 c, float size, float k) { - return circle(uv, c, size + k * 0.5) - circle(uv, c, size - k * 0.5); + return circle(uv, c, size + k * .5) - circle(uv, c, size - k * .5); } float stripe(float x, float k1, float k2) { - return k2 > k1 ? (1 - step(x, k1)) * (step(x, k2)) : ((1 - step(x, k2)) * (step(x, k1))); + return k2 > k1 ? (1. - step(x, k1)) * (step(x, k2)) : ((1. - step(x, k2)) * (step(x, k1))); } float capsule(vec2 uv, float r, float d, float a) { uv *= rot(a); float f1 = step(uv.x, r) * step(-uv.x, r) * step(uv.y, d - r) * step(-uv.y, d - r); - float f2 = step(length(uv - vec2(0, d - r)), r); - float f3 = step(length(uv + vec2(0, d - r)), r); - return min(1, f1 + f2 + f3); + float f2 = step(length(uv - vec2(0., d - r)), r); + float f3 = step(length(uv + vec2(0., d - r)), r); + return min(1., f1 + f2 + f3); } float rect(vec2 uv, vec2 c, vec2 size) { @@ -247,7 +248,7 @@ float rect(vec2 uv, vec2 c, vec2 size) { } float h_rect(vec2 uv, vec2 c, vec2 size, float k) { - return rect(uv, c, size + k * 0.5) - rect(uv, c, size - k * 0.5); + return rect(uv, c, size + k * .5) - rect(uv, c, size - k * .5); } float line(vec2 uv, vec2 p1, vec2 p2, float thick) { @@ -261,33 +262,27 @@ float line(vec2 uv, vec2 p1, vec2 p2, float thick) { uv.y / p.y ); - return step(k.x, thick * 0.5) - * step(-k.x, thick * 0.5) - * step(k.y, 1) - * (1 - step(k.y, 0)); + return step(k.x, thick * .5) + * step(-k.x, thick * .5) + * step(k.y, 1.) + * (1. - step(k.y, 0.)); } else { k = vec2( uv.x / p.x, uv.y - p.y * uv.x / p.x ); - return step(k.y, thick * 0.5) - * step(-k.y, thick * 0.5) - * step(k.x, 1) - * (1 - step(k.x, 0)); + return step(k.y, thick * .5) + * step(-k.y, thick * .5) + * step(k.x, 1.) + * (1. - step(k.x, 0.)); } } -const mat2x2 ISOMETRIC_MATRIX = { - { - 0.5, - 1 - }, - { - 0.5, - -1 - } - }; +const mat2x2 ISOMETRIC_MATRIX = mat2x2( + .5, 1., + .5, -1. + ); vec2 iso(vec2 p) { return p * ISOMETRIC_MATRIX; @@ -308,14 +303,14 @@ vec2 iso(vec3 uv) { vec4 reframe(sampler2D tex, vec2 uv) { - uv = uv * vec2(iResolution.y / iResolution.x, 1) + .5; + uv = uv * vec2(iResolution.y / iResolution.x, 1.) + .5; uv = saw(uv); return texture(tex, uv); } vec4 reframe_b(sampler2D tex, vec2 uv) { - uv = uv * vec2(iResolution.y / iResolution.x, 1) + .5; + uv = uv * vec2(iResolution.y / iResolution.x, 1.) + .5; return texture(tex, uv); } @@ -323,7 +318,7 @@ vec4 kernel(sampler2D tex, vec2 uv, mat3x3 k, float spm) { int x, y; vec2 offset; - vec4 sum = vec4(0); + vec4 sum = vec4(0.); for (y = -1; y <= 1; ++y) { for (x = -1; x <= 1; ++x) { offset = vec2(x, y) * spm; @@ -339,7 +334,7 @@ vec4 kernel(sampler2D tex, vec2 uv, mat3x3 k, float spm) float gaussian_weight(float x, float sigma) { - return exp(-(x * x) / (2.0 * sigma * sigma)); + return exp(-(x * x) / (2. * sigma * sigma)); } vec4 gauss(sampler2D tex, vec2 uv, const int kernel_size, float spm, float sigma, float bloom) @@ -347,8 +342,8 @@ vec4 gauss(sampler2D tex, vec2 uv, const int kernel_size, float spm, float sigma int x, y; vec2 offset; float w; - vec4 sum = vec4(0); - float weight_sum = 0; + vec4 sum = vec4(0.); + float weight_sum = 0.; for (y = -kernel_size; y <= kernel_size; ++y) { for (x = -kernel_size; x <= kernel_size; ++x) { offset = vec2(x, y) * spm; @@ -362,17 +357,17 @@ vec4 gauss(sampler2D tex, vec2 uv, const int kernel_size, float spm, float sigma vec4 gauss(sampler2D tex, vec2 uv, const int kernel_size, float spm, float sigma) { - return gauss(tex, uv, kernel_size, spm, sigma, 1.0); + return gauss(tex, uv, kernel_size, spm, sigma, 1.); } vec4 gauss(sampler2D tex, vec2 uv, const int kernel_size, float spm) { - return gauss(tex, uv, kernel_size, spm, 2.0); + return gauss(tex, uv, kernel_size, spm, 2.); } vec4 gauss(sampler2D tex, vec2 uv, const int kernel_size) { - return gauss(tex, uv, kernel_size, 1 / max(iResolution.x, iResolution.y)); + return gauss(tex, uv, kernel_size, 1. / max(iResolution.x, iResolution.y)); } vec4 gauss(sampler2D tex, vec2 uv) @@ -383,23 +378,23 @@ vec4 gauss(sampler2D tex, vec2 uv) float dither(vec2 uv, float x) { bool o = false; - o = o || x * 16 >= 1 && floor(mod(uv.x, 4)) == 0 && floor(mod(uv.y, 4)) == 0; - o = o || x * 16 >= 2 && floor(mod(uv.x, 4)) == 2 && floor(mod(uv.y, 4)) == 2; - o = o || x * 16 >= 3 && floor(mod(uv.x, 4)) == 0 && floor(mod(uv.y, 4)) == 2; - o = o || x * 16 >= 4 && floor(mod(uv.x, 4)) == 2 && floor(mod(uv.y, 4)) == 0; - o = o || x * 16 >= 5 && floor(mod(uv.x, 4)) == 1 && floor(mod(uv.y, 4)) == 1; - o = o || x * 16 >= 6 && floor(mod(uv.x, 4)) == 3 && floor(mod(uv.y, 4)) == 3; - o = o || x * 16 >= 7 && floor(mod(uv.x, 4)) == 1 && floor(mod(uv.y, 4)) == 3; - o = o || x * 16 >= 8 && floor(mod(uv.x, 4)) == 3 && floor(mod(uv.y, 4)) == 1; - o = o || x * 16 >= 9 && floor(mod(uv.x, 4)) == 1 && floor(mod(uv.y, 4)) == 0; - o = o || x * 16 >= 10 && floor(mod(uv.x, 4)) == 3 && floor(mod(uv.y, 4)) == 2; - o = o || x * 16 >= 11 && floor(mod(uv.x, 4)) == 1 && floor(mod(uv.y, 4)) == 2; - o = o || x * 16 >= 12 && floor(mod(uv.x, 4)) == 3 && floor(mod(uv.y, 4)) == 0; - o = o || x * 16 >= 13 && floor(mod(uv.x, 4)) == 0 && floor(mod(uv.y, 4)) == 1; - o = o || x * 16 >= 14 && floor(mod(uv.x, 4)) == 2 && floor(mod(uv.y, 4)) == 3; - o = o || x * 16 >= 15 && floor(mod(uv.x, 4)) == 0 && floor(mod(uv.y, 4)) == 3; - o = o || x * 16 >= 16 && floor(mod(uv.x, 4)) == 2 && floor(mod(uv.y, 4)) == 1; - return o ? 1 : 0; + o = o || x * 16. >= 1. && floor(mod(uv.x, 4.)) == 0. && floor(mod(uv.y, 4.)) == 0.; + o = o || x * 16. >= 2. && floor(mod(uv.x, 4.)) == 2. && floor(mod(uv.y, 4.)) == 2.; + o = o || x * 16. >= 3. && floor(mod(uv.x, 4.)) == 0. && floor(mod(uv.y, 4.)) == 2.; + o = o || x * 16. >= 4. && floor(mod(uv.x, 4.)) == 2. && floor(mod(uv.y, 4.)) == 0.; + o = o || x * 16. >= 5. && floor(mod(uv.x, 4.)) == 1. && floor(mod(uv.y, 4.)) == 1.; + o = o || x * 16. >= 6. && floor(mod(uv.x, 4.)) == 3. && floor(mod(uv.y, 4.)) == 3.; + o = o || x * 16. >= 7. && floor(mod(uv.x, 4.)) == 1. && floor(mod(uv.y, 4.)) == 3.; + o = o || x * 16. >= 8. && floor(mod(uv.x, 4.)) == 3. && floor(mod(uv.y, 4.)) == 1.; + o = o || x * 16. >= 9. && floor(mod(uv.x, 4.)) == 1. && floor(mod(uv.y, 4.)) == 0.; + o = o || x * 16. >= 10. && floor(mod(uv.x, 4.)) == 3. && floor(mod(uv.y, 4.)) == 2.; + o = o || x * 16. >= 11. && floor(mod(uv.x, 4.)) == 1. && floor(mod(uv.y, 4.)) == 2.; + o = o || x * 16. >= 12. && floor(mod(uv.x, 4.)) == 3. && floor(mod(uv.y, 4.)) == 0.; + o = o || x * 16. >= 13. && floor(mod(uv.x, 4.)) == 0. && floor(mod(uv.y, 4.)) == 1.; + o = o || x * 16. >= 14. && floor(mod(uv.x, 4.)) == 2. && floor(mod(uv.y, 4.)) == 3.; + o = o || x * 16. >= 15. && floor(mod(uv.x, 4.)) == 0. && floor(mod(uv.y, 4.)) == 3.; + o = o || x * 16. >= 16. && floor(mod(uv.x, 4.)) == 2. && floor(mod(uv.y, 4.)) == 1.; + return o ? 1. : 0.; } #endif diff --git a/project/inc_fx.glsl b/project/inc_fx.glsl index 255e543..3e36000 100644 --- a/project/inc_fx.glsl +++ b/project/inc_fx.glsl @@ -16,12 +16,8 @@ vec4 fx_master(vec3 c0, vec3 c, int seed, vec3 m0) { return vec4(c_out, 1.0); } -subroutine vec4 fx_stage_sub(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0); - -subroutine uniform fx_stage_sub fx_stage; - // FX 1 : thru -subroutine(fx_stage_sub) vec4 fx_1(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0) +vec4 fx_1(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0) { // start @@ -39,7 +35,7 @@ subroutine(fx_stage_sub) vec4 fx_1(vec2 vUV, sampler2D previous, sampler2D feedb vec3 c = c0; c = shift3(c, hue); c *= 1 + saturation; - c = mix(c + light * 2.0, c - (1 - light) * 2.0, step(0.5, light)); + c = mix(c + light * 2.0, c - (1 - light) * 2.0, step(.5, light)); return fx_master(c0, c, seed, m0); } @@ -64,26 +60,26 @@ vec4 fx_shift(vec2 vUV, sampler2D src0, sampler2D src1, int seed, vec3 b1, vec2 vec3 c0 = texture(src0, uv0).xyz; vec2 uv2 = uv1; - uv2 = mix(uv2 * (1 + zoom * 2), uv2 * (zoom), step(0.5, zoom)); + uv2 = mix(uv2 * (1 + zoom * 2), uv2 * (zoom), step(.5, zoom)); uv2 += vec2(x_shift * ratio, y_shift) * 2; vec3 c = reframe(src1, uv2).xyz; return fx_master(c0, c, seed, m0); } -subroutine(fx_stage_sub) vec4 fx_2(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0) +vec4 fx_2(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0) { return fx_shift(vUV, previous, feedback, seed, b1, f1, b2, f2, b3, f3, m0); } // FX 3 : shift -subroutine(fx_stage_sub) vec4 fx_3(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0) +vec4 fx_3(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0) { return fx_shift(vUV, previous, previous, seed, b1, f1, b2, f2, b3, f3, m0); } // FX 4 : colorize -subroutine(fx_stage_sub) vec4 fx_4(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0) +vec4 fx_4(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0) { // start @@ -109,7 +105,7 @@ subroutine(fx_stage_sub) vec4 fx_4(vec2 vUV, sampler2D previous, sampler2D feedb } // FX 5 : quantize -subroutine(fx_stage_sub) vec4 fx_5(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0) +vec4 fx_5(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0) { // start @@ -131,18 +127,18 @@ subroutine(fx_stage_sub) vec4 fx_5(vec2 vUV, sampler2D previous, sampler2D feedb vec2 uv2 = uv1; float pixel = (1 - pixel_size) * 250 + 25; uv2 = round(uv2 * pixel) / pixel; - vec3 c = gauss(previous, uv2 * vec2(1 / ratio, 1) + .5, 3, 0.005 * blur).xyz; + 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; } - // c = mix(c, 1 - c, step(noise_f(uv0 * 10 + vec2(iTime * 0.1, 0), 5), 0.5)); + // c = mix(c, 1 - c, step(noise_f(uv0 * 10 + vec2(iTime * .1, 0), 5), .5)); return fx_master(c0, c, seed, m0); } // FX 6 : dithering -subroutine(fx_stage_sub) vec4 fx_6(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0) +vec4 fx_6(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0) { // start @@ -168,7 +164,7 @@ subroutine(fx_stage_sub) vec4 fx_6(vec2 vUV, sampler2D previous, sampler2D feedb if (pixel_size_trigger) { uv2 = floor(uv2 * k1) / k1; } - vec3 c = gauss(previous, uv2 * vec2(1 / ratio, 1) + .5, 3, 0.005 * blur).xyz; + vec3 c = gauss(previous, uv2 * vec2(1 / ratio, 1) + .5, 3, .005 * blur).xyz; float k3 = pow(2, 5 - floor(quantize * 5)); if (quantize_trigger) { c *= k3; @@ -184,7 +180,7 @@ subroutine(fx_stage_sub) vec4 fx_6(vec2 vUV, sampler2D previous, sampler2D feedb } // FX 7 : tv -subroutine(fx_stage_sub) vec4 fx_7(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0) +vec4 fx_7(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0) { // start @@ -203,13 +199,13 @@ subroutine(fx_stage_sub) vec4 fx_7(vec2 vUV, sampler2D previous, sampler2D feedb vec3 c0 = texture(previous, uv0).xyz; vec2 uv2 = uv1; - float k1 = lens_v * 0.5; + float k1 = lens_v * .5; 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) - 0.5) * k * 0.1)).x, - reframe_b(previous, uv2 + vec2((rand(uv0.y * 1100 + iTime) - 0.5) * k * 0.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 ); @@ -217,7 +213,7 @@ subroutine(fx_stage_sub) vec4 fx_7(vec2 vUV, sampler2D previous, sampler2D feedb } // FX 8 : kaleidoscope -subroutine(fx_stage_sub) vec4 fx_8(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0) +vec4 fx_8(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0) { // start @@ -237,9 +233,9 @@ subroutine(fx_stage_sub) vec4 fx_8(vec2 vUV, sampler2D previous, sampler2D feedb vec3 c0 = texture(previous, uv0).xyz; vec2 uv2 = uv1; - uv2 = mix(uv2, kal2(uv2 * rot(0.25), floor(axes * 9 + 1)) * vec2(1, -2) + vec2(0, -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 + 0.5 + h_scroll * 2) - 0.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); @@ -248,7 +244,7 @@ subroutine(fx_stage_sub) vec4 fx_8(vec2 vUV, sampler2D previous, sampler2D feedb #include inc_cp437.glsl // FX 9 : cp437 -subroutine(fx_stage_sub) vec4 fx_9(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0) +vec4 fx_9(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0) { // start @@ -274,21 +270,21 @@ subroutine(fx_stage_sub) vec4 fx_9(vec2 vUV, sampler2D previous, sampler2D feedb 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 * 0.75))); + 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 * 0.125).xyz * 0.2 - + reframe(previous, uv2 + vec2(1, 0) * inv_k * 0.125).xyz * 0.2 - + reframe(previous, uv2 + vec2(1, 1) * inv_k * 0.125).xyz * 0.2 - + reframe(previous, uv2 + vec2(0, 1) * inv_k * 0.125).xyz * 0.2 - + reframe(previous, uv2 + vec2(0.5, 0.5) * inv_k * 0.125).xyz * 0.2; + 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); return fx_master(c0, c, seed, m0); } // FX 10 : lens -subroutine(fx_stage_sub) vec4 fx_10(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0) +vec4 fx_10(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0) { // start @@ -316,7 +312,7 @@ subroutine(fx_stage_sub) vec4 fx_10(vec2 vUV, sampler2D previous, sampler2D feed } // FX 11 : spill -subroutine(fx_stage_sub) vec4 fx_11(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0) +vec4 fx_11(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0) { // start @@ -345,14 +341,14 @@ subroutine(fx_stage_sub) vec4 fx_11(vec2 vUV, sampler2D previous, sampler2D feed } // FX 12 : Game Of Life -subroutine(fx_stage_sub) vec4 fx_12(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0) +vec4 fx_12(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0) { return texture(previous, vUV); // TODO disabled // start vec2 uv0 = vUV.st; float ratio = iResolution.x / iResolution.y; - vec2 uv1 = (uv0 - 0.5) * vec2(ratio, 1); + vec2 uv1 = (uv0 - .5) * vec2(ratio, 1); // controls @@ -360,7 +356,7 @@ subroutine(fx_stage_sub) vec4 fx_12(vec2 vUV, sampler2D previous, sampler2D feed 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 * 0.9 + 0.05; + float threshold = f2.y * .9 + .05; float fb = magic(f3, b3, seed + 30); // logic @@ -372,13 +368,13 @@ subroutine(fx_stage_sub) vec4 fx_12(vec2 vUV, sampler2D previous, sampler2D feed float p = 1 / k1; uv2 = round(uv2 * k1) / k1; vec3 c1 = mix( - reframe(previous, uv2 + vec2(0.5, 0.5) * p).xyz, - reframe(feedback, uv2 + vec2(0.5, 0.5) * p).xyz, + reframe(previous, uv2 + vec2(.5, .5) * p).xyz, + reframe(feedback, uv2 + vec2(.5, .5) * p).xyz, fb ); vec3 c2 = mix( - reframe(previous, uv2 + vec2(1.5, 0.5) * p).xyz, - reframe(feedback, uv2 + vec2(1.5, 0.5) * p).xyz, + reframe(previous, uv2 + vec2(1.5, .5) * p).xyz, + reframe(feedback, uv2 + vec2(1.5, .5) * p).xyz, fb ); vec3 c3 = mix( @@ -387,33 +383,33 @@ subroutine(fx_stage_sub) vec4 fx_12(vec2 vUV, sampler2D previous, sampler2D feed fb ); vec3 c4 = mix( - reframe(previous, uv2 + vec2(0.5, 1.5) * p).xyz, - reframe(feedback, uv2 + vec2(0.5, 1.5) * p).xyz, + reframe(previous, uv2 + vec2(.5, 1.5) * p).xyz, + reframe(feedback, uv2 + vec2(.5, 1.5) * p).xyz, fb ); vec3 c5 = mix( - reframe(previous, uv2 + vec2(-0.5, 1.5) * p).xyz, - reframe(feedback, uv2 + vec2(-0.5, 1.5) * p).xyz, + reframe(previous, uv2 + vec2(-.5, 1.5) * p).xyz, + reframe(feedback, uv2 + vec2(-.5, 1.5) * p).xyz, fb ); vec3 c6 = mix( - reframe(previous, uv2 + vec2(-0.5, 0.5) * p).xyz, - reframe(feedback, uv2 + vec2(-0.5, 0.5) * p).xyz, + reframe(previous, uv2 + vec2(-.5, .5) * p).xyz, + reframe(feedback, uv2 + vec2(-.5, .5) * p).xyz, fb ); vec3 c7 = mix( - reframe(previous, uv2 + vec2(-0.5, -0.5) * p).xyz, - reframe(feedback, uv2 + vec2(-0.5, -0.5) * p).xyz, + reframe(previous, uv2 + vec2(-.5, -.5) * p).xyz, + reframe(feedback, uv2 + vec2(-.5, -.5) * p).xyz, fb ); vec3 c8 = mix( - reframe(previous, uv2 + vec2(0.5, -0.5) * p).xyz, - reframe(feedback, uv2 + vec2(0.5, -0.5) * p).xyz, + reframe(previous, uv2 + vec2(.5, -.5) * p).xyz, + reframe(feedback, uv2 + vec2(.5, -.5) * p).xyz, fb ); vec3 c9 = mix( - reframe(previous, uv2 + vec2(-0.5, -0.5) * p).xyz, - reframe(feedback, uv2 + vec2(-0.5, -0.5) * p).xyz, + reframe(previous, uv2 + vec2(-.5, -.5) * p).xyz, + reframe(feedback, uv2 + vec2(-.5, -.5) * p).xyz, fb ); bool alive = mean(c1) >= threshold; @@ -460,7 +456,7 @@ subroutine(fx_stage_sub) vec4 fx_12(vec2 vUV, sampler2D previous, sampler2D feed } // FX 13 : Sobel -subroutine(fx_stage_sub) vec4 fx_13(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0) +vec4 fx_13(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0) { // start @@ -472,14 +468,14 @@ subroutine(fx_stage_sub) vec4 fx_13(vec2 vUV, sampler2D previous, sampler2D feed float sx = magic(f1, b1, seed + 10) * 2; float sy = magic(f2, b2, seed + 20) * 2; - float disp = 0.005 * magic(f3, b3, seed + 30); + float disp = .005 * magic(f3, b3, seed + 30); // logic vec3 c0 = texture(previous, uv0).xyz; - const mat3x3 sobelx = {{-1, -2, -1}, {0, 0, 0}, {1, 2, 1}}; - const mat3x3 sobely = {{-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; @@ -489,7 +485,7 @@ subroutine(fx_stage_sub) vec4 fx_13(vec2 vUV, sampler2D previous, sampler2D feed } // FX 14 : Isometric -subroutine(fx_stage_sub) vec4 fx_14(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0) +vec4 fx_14(vec2 vUV, sampler2D previous, sampler2D feedback, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3, vec3 m0) { // start @@ -524,11 +520,10 @@ subroutine(fx_stage_sub) vec4 fx_14(vec2 vUV, sampler2D previous, sampler2D feed return fx_master(c0, c, seed, m0); } -// 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 texture(previous, vUV); // TODO disabled - int fx = int(randTime(seed + 100) * 14); +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); + } if (fx == 0) { return fx_1(vUV, previous, feedback, seed, b1, f1, b2, f2, b3, f3, m0); diff --git a/project/inc_magic.glsl b/project/inc_magic.glsl index bf08bab..7bb3c34 100644 --- a/project/inc_magic.glsl +++ b/project/inc_magic.glsl @@ -6,38 +6,38 @@ 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)) ); } vec2 magic_f(float i) { - return magic_f(vec2(0), vec3(0, 0, 1), i); + return magic_f(vec2(0.), vec3(0., 0., 1.), i); } vec3 magic_b(vec3 B, float i) { return vec3( - mix(B.x, step(0.2, randTime(i + 3)), min(1, B.z)), - mix(B.y, step(0.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) ); } vec3 magic_b(float i) { - return magic_b(vec3(0, 0, 1), i); + return magic_b(vec3(0., 0., 1.), 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) { - return magic_b(i).x > 0; + return magic_b(i).x > 0.; } float magic(vec2 F, vec3 B, float i) @@ -45,7 +45,7 @@ float magic(vec2 F, vec3 B, float i) vec2 f = magic_f(F, B, i); vec3 b = magic_b(B, i); - return mix(0, f.x * mix(1 - modTime(f.y), cosTime(f.y) * 0.5 + 0.5, b.y), b.x); + return mix(0., f.x * mix(1. - modTime(f.y), cosTime(f.y) * .5 + .5, b.y), b.x); } float fmagic(vec2 F, vec3 B, float i) @@ -53,12 +53,12 @@ float fmagic(vec2 F, vec3 B, float i) vec2 f = magic_f(F, B, i); vec3 b = magic_b(B, i); - return f.x * mix(1 - modTime(f.y), cosTime(f.y) * 0.5 + 0.5, b.y); + return f.x * mix(1. - modTime(f.y), cosTime(f.y) * .5 + .5, b.y); } float magic(float i) { - return magic(vec2(0), vec3(0, 0, 1), i); + return magic(vec2(0.), vec3(0., 0., 1.), i); } float magic_reverse(vec2 F, vec3 B, float i) @@ -66,12 +66,12 @@ float magic_reverse(vec2 F, vec3 B, float i) vec2 f = magic_f(F, B, i); vec3 b = magic_b(B, i); - return mix(0, f.x * mix(1 - modTime(f.y), modTime(f.y), b.y), b.x); + return mix(0., f.x * mix(1. - modTime(f.y), modTime(f.y), b.y), b.x); } float magic_reverse(float i) { - return magic_reverse(vec2(0), vec3(0, 0, 1), i); + return magic_reverse(vec2(0.), vec3(0., 0., 1.), i); } #endif diff --git a/project/inc_rand.glsl b/project/inc_rand.glsl index 138b2f9..9375b61 100644 --- a/project/inc_rand.glsl +++ b/project/inc_rand.glsl @@ -8,7 +8,7 @@ float rand(float seed){ } float rand(vec2 n){ - return rand(n.x * 1234 + n.y * 9876); + return rand(n.x * 1234. + n.y * 9876.); } #endif diff --git a/project/inc_sentences.glsl b/project/inc_sentences.glsl index 7fdb0eb..0abfd6c 100644 --- a/project/inc_sentences.glsl +++ b/project/inc_sentences.glsl @@ -2,28 +2,45 @@ #define INC_SENTENCES #define SENTENCE_COUNT 17 +#define SENTENCE_MAX_LENGTH 20 -const int sentences[SENTENCE_COUNT][20] = { - {0x66, 0x6F, 0x72, 0x67, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - {0x46, 0x4F, 0x52, 0x47, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - {0x46, 0x2E, 0x4F, 0x2E, 0x52, 0x2E, 0x47, 0x2E, 0x45, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - {0x46, 0x75, 0x73, 0x69, 0x6F, 0x6E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - {0x4F, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - {0x52, 0x65, 0x61, 0x6C, 0x2D, 0x74, 0x69, 0x6D, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - {0x47, 0x65, 0x6E, 0x65, 0x72, 0x61, 0x74, 0x69, 0x76, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - {0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - {0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6E, 0x67, 0x20, 0x79, 0x6F, 0x75, 0x20, 0x73, 0x65, 0x65, 0x00, 0x00}, - {0x50, 0x69, 0x78, 0x65, 0x6C, 0x20, 0x62, 0x79, 0x20, 0x70, 0x69, 0x78, 0x65, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - {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}, - {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}, -}; +const int sentences[] = int[SENTENCE_COUNT * SENTENCE_MAX_LENGTH]( + 0x66, 0x6F, 0x72, 0x67, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x46, 0x4F, 0x52, 0x47, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x46, 0x2E, 0x4F, 0x2E, 0x52, 0x2E, 0x47, 0x2E, 0x45, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x46, 0x75, 0x73, 0x69, 0x6F, 0x6E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x4F, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x52, 0x65, 0x61, 0x6C, 0x2D, 0x74, 0x69, 0x6D, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x47, 0x65, 0x6E, 0x65, 0x72, 0x61, 0x74, 0x69, 0x76, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x45, 0x66, 0x66, 0x65, 0x63, 0x74, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x45, 0x76, 0x65, 0x72, 0x79, 0x74, 0x68, 0x69, 0x6E, 0x67, 0x20, 0x79, 0x6F, 0x75, 0x20, 0x73, 0x65, 0x65, 0x00, 0x00, + 0x50, 0x69, 0x78, 0x65, 0x6C, 0x20, 0x62, 0x79, 0x20, 0x70, 0x69, 0x78, 0x65, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 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, + 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 +); -const int lengths[SENTENCE_COUNT] = { +const int lengths[] = int[SENTENCE_COUNT]( 5, 5, 10, 6, 2, 9, 10, 7, 18, 14, 4, 9, 10, 1, 6, 11, 11 -}; +); + +float write_sentence(vec2 uv, vec2 pos, int n) +{ + float d = 0; + int i; + + for (i = 0; i < SENTENCE_MAX_LENGTH; i++) { + if (sentences[n * SENTENCE_MAX_LENGTH + i] == 0) { + return d; + } + + d += char_at(uv, pos + vec2(i, 0), sentences[n * SENTENCE_MAX_LENGTH + i]); + } + + return d; +} #endif diff --git a/project/inc_src.glsl b/project/inc_src.glsl index c57f046..5514f63 100644 --- a/project/inc_src.glsl +++ b/project/inc_src.glsl @@ -9,8 +9,6 @@ uniform int iDemo; uniform sampler2D iTex0; -subroutine vec4 src_stage_sub(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3); - vec4 src_thru(vec2 vUV, sampler2D tex, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) { // start @@ -30,7 +28,7 @@ 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(0.5, light)); + c = mix(c + light * 2.0, c - (1 - light) * 2.0, step(.5, light)); // output @@ -38,13 +36,13 @@ vec4 src_thru(vec2 vUV, sampler2D tex, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 } // SRC 1: feedback + thru -subroutine ( src_stage_sub ) vec4 src_1(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) +vec4 src_1(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) { return src_thru(vUV, iTex0, seed, b1, f1, b2, f2, b3, f3); } // SRC 2 : lines -subroutine ( src_stage_sub ) vec4 src_2(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) +vec4 src_2(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) { // start @@ -64,14 +62,14 @@ subroutine ( src_stage_sub ) vec4 src_2(vec2 vUV, int seed, vec3 b1, vec2 f1, ve uv2.y *= cos(uv2.x * 5 * distort); uv2 *= rot(rotation + iBeats / 16); float k = thickness * 2; - uv2.y = cmod(uv2.y, k * 2 + 0.1); - float f = istep(k * 0.125 + 0.05, uv2.y) * istep(k * 0.125 + 0.01, -uv2.y); + 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); } // SRC 3 : dots -subroutine ( src_stage_sub ) vec4 src_3(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) +vec4 src_3(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) { // start @@ -92,7 +90,7 @@ subroutine ( src_stage_sub ) vec4 src_3(vec2 vUV, int seed, vec3 b1, vec2 f1, ve uv2 = lens(uv2, -k1, k1); uv2 = kal(uv2, 5); uv2 *= rot(rotation + iBeats / 16); - float k = zoom * 0.1 + 0.05; + float k = zoom * .1 + .05; uv2 = cmod(uv2, k * 2); float f = istep(k / (1 + length(uv1) * 2), length(uv2)); @@ -100,7 +98,7 @@ subroutine ( src_stage_sub ) vec4 src_3(vec2 vUV, int seed, vec3 b1, vec2 f1, ve } // // SRC 4 : circuit -// subroutine ( src_stage_sub ) vec4 src_4(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) +// vec4 src_4(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) // { // // start @@ -111,8 +109,8 @@ subroutine ( src_stage_sub ) vec4 src_3(vec2 vUV, int seed, vec3 b1, vec2 f1, ve // // controls // float z = 10 + magic(f1, b1, 123) * 20; -// float h = magic(f2, b2, seed + 20) * 0.8 + 0.1; -// float v = magic_reverse(f3, b3, seed + 30) * 0.8 + 0.1; +// float h = magic(f2, b2, seed + 20) * .8 + .1; +// float v = magic_reverse(f3, b3, seed + 30) * .8 + .1; // // logic @@ -130,30 +128,30 @@ subroutine ( src_stage_sub ) vec4 src_3(vec2 vUV, int seed, vec3 b1, vec2 f1, ve // bool up_down = up && down; // bool left_right = left && right; -// uv1 = mod(uv1, 1.0) - 0.5; +// uv1 = mod(uv1, 1.0) - .5; -// const float t = 0.1; +// const float t = .1; // float f = 0; // int c = 0; // if (up) { -// f += stripe(uv1.x, -t * 0.5, t * 0.5) * step(-t * 0.5, uv1.y); +// f += stripe(uv1.x, -t * .5, t * .5) * step(-t * .5, uv1.y); // c += 1; // } // if (down) { -// f += stripe(uv1.x, -t * 0.5, t * 0.5) * istep(t * 0.5, uv1.y); +// f += stripe(uv1.x, -t * .5, t * .5) * istep(t * .5, uv1.y); // c += 1; // } // if (left) { -// f += stripe(uv1.y, -t * 0.5, t * 0.5) * istep(t * 0.5, uv1.x); +// f += stripe(uv1.y, -t * .5, t * .5) * istep(t * .5, uv1.x); // c += 1; // } // if (right) { -// f += stripe(uv1.y, -t * 0.5, t * 0.5) * step(-t * 0.5, uv1.x); +// f += stripe(uv1.y, -t * .5, t * .5) * step(-t * .5, uv1.x); // c += 1; // } @@ -167,30 +165,30 @@ subroutine ( src_stage_sub ) vec4 src_3(vec2 vUV, int seed, vec3 b1, vec2 f1, ve // if (up_down) { // uv1.xy = uv1.yx; // } -// if (rand(s0 + 3) < 0.5) { +// 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 * 0.5), vec2(-t * 2.5, t * 2), t * 0.75); -// f += line(uv1, vec2(-t * 2.5, t * 2), vec2(-t * 1.5, -t * 2), t * 0.75); -// f += line(uv1, vec2(-t * 1.5, -t * 2), vec2(-t * 0.5, t * 2), t * 0.75); -// f += line(uv1, vec2(-t * 0.5, t * 2), vec2(t * 0.5, -t * 2), t * 0.75); -// f += line(uv1, vec2(t * 0.5, -t * 2), vec2(t * 1.5, t * 2), t * 0.75); -// f += line(uv1, vec2(t * 1.5, t * 2), vec2(t * 2.5, -t * 2), t * 0.75); -// f += line(uv1, vec2(t * 2.5, -t * 2), vec2(t * 3.25, t * 0.5), t * 0.75); +// 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 * 0.5)); -// f += rect(uv1, vec2(t * 2, 0), vec2(t, t * 0.5)); -// f += rect(uv1, vec2(t, 0), vec2(t * 0.5, t * 3.5)); -// f += rect(uv1, vec2(-t, 0), vec2(t * 0.5, t * 3.5)); +// 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 * 0.5, t * 3)); -// f += rect(uv1, vec2(-t * 2.5, 0), vec2(t * 0.5, t * 3)); +// 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)); @@ -203,7 +201,7 @@ subroutine ( src_stage_sub ) vec4 src_3(vec2 vUV, int seed, vec3 b1, vec2 f1, ve // 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 * 0.5, uv1.y); +// 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))); @@ -222,9 +220,9 @@ subroutine ( src_stage_sub ) vec4 src_3(vec2 vUV, int seed, vec3 b1, vec2 f1, ve // if (k < 10) { // f -= rect(uv1, vec2(0), vec2(t * 3)); // f = max(0, f); -// f += rect(uv1, vec2(-t * 3, 0), vec2(t * 0.5, t * 3)); -// f += line(uv1, vec2(t * 0.25, t * 3.25), vec2(-t * 3, t), t); -// f += line(uv1, vec2(t * 0.25, -t * 3.25), vec2(-t * 3, -t), t); +// 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); // } // } @@ -232,7 +230,7 @@ subroutine ( src_stage_sub ) vec4 src_3(vec2 vUV, int seed, vec3 b1, vec2 f1, ve // } // SRC 4 : bacteria -subroutine ( src_stage_sub ) vec4 src_4(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) +vec4 src_4(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) { // start @@ -250,7 +248,7 @@ subroutine ( src_stage_sub ) vec4 src_4(vec2 vUV, int seed, vec3 b1, vec2 f1, ve uv1 *= zoom; - vec4 data = voronoi(uv1, 1, seed + 40, iBeats * 0.25); + vec4 data = voronoi(uv1, 1, seed + 40, iBeats * .25); float f = ease(data.x) + ease(data.y); @@ -260,7 +258,7 @@ subroutine ( src_stage_sub ) vec4 src_4(vec2 vUV, int seed, vec3 b1, vec2 f1, ve } // SRC 5 : noise -subroutine ( src_stage_sub ) vec4 src_5(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) +vec4 src_5(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) { // start @@ -282,15 +280,15 @@ subroutine ( src_stage_sub ) vec4 src_5(vec2 vUV, int seed, vec3 b1, vec2 f1, ve 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)) * 0.5 + 1; + f = sin(f * PI * (details * 20)) * .5 + 1; int nf = int(noise_factor * 6); - f *= mix(1, noise_f(uv2, nf - 1), step(0.0, float(nf))); + f *= mix(1, noise_f(uv2, nf - 1), step(.0, float(nf))); return vec4(f); } // SRC 6 : video in 1 + thru -subroutine ( src_stage_sub ) vec4 src_6(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) +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); } @@ -298,7 +296,7 @@ subroutine ( src_stage_sub ) vec4 src_6(vec2 vUV, int seed, vec3 b1, vec2 f1, ve #include inc_cp437.glsl // SRC 7 : cp437 -subroutine ( src_stage_sub ) vec4 src_7(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) +vec4 src_7(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) { // start @@ -321,7 +319,7 @@ subroutine ( src_stage_sub ) vec4 src_7(vec2 vUV, int seed, vec3 b1, vec2 f1, ve 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 * 0.75))); + 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); @@ -334,7 +332,7 @@ subroutine ( src_stage_sub ) vec4 src_7(vec2 vUV, int seed, vec3 b1, vec2 f1, ve #include inc_sentences.glsl -subroutine ( src_stage_sub ) vec4 src_8(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) +vec4 src_8(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) { // start @@ -353,17 +351,17 @@ subroutine ( src_stage_sub ) vec4 src_8(vec2 vUV, int seed, vec3 b1, vec2 f1, ve vec2 uv2 = uv1; uv2 *= (1 + zoom) * 12; - uv2.y += 0.5; + uv2.y += .5; int s = int(sentence * (SENTENCE_COUNT - 1)); - uv2.x += floor(uv2.y) * (h_delta - 0.5) * 2; + 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_20(uv2, vec2(-float(lengths[s]) * 0.5, 0), sentences[s]); + float f = write_sentence(uv2, vec2(-float(lengths[s]) * .5, 0), s); return vec4(f); } // 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) +vec4 src_9(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) { // start @@ -383,22 +381,22 @@ subroutine ( src_stage_sub ) vec4 src_9(vec2 vUV, int seed, vec3 b1, vec2 f1, ve vec2 uv2 = uv1; uv2.x += h_shift; uv2 *= 15; - uv2.y += 0.5; + uv2.y += .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 += 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_20(uv3, vec2(-slen * 0.5, 0), sentences[s]); + float f = write_sentence(uv3, vec2(-slen * .5, 0), s); - f *= (1 - abs(floor(uv2.y) * 0.125)) * (1 - abs(floor(uv2.y) * 0.125)); + f *= (1 - abs(floor(uv2.y) * .125)) * (1 - abs(floor(uv2.y) * .125)); return vec4(f); } // SRC 10 : isometric grid -subroutine ( src_stage_sub ) vec4 src_10(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) +vec4 src_10(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) { // start @@ -410,8 +408,8 @@ subroutine ( src_stage_sub ) vec4 src_10(vec2 vUV, int seed, vec3 b1, vec2 f1, v 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) * 0.5; - float thick = 0.1; + float max_elevation = magic(f3, b3, seed + 30) * .5; + float thick = .1; // logic @@ -437,7 +435,7 @@ subroutine ( src_stage_sub ) vec4 src_10(vec2 vUV, int seed, vec3 b1, vec2 f1, v float e3 = (rand(floor(u3)) * 2 - 1) * max_elevation; float e4 = (rand(floor(u4)) * 2 - 1) * max_elevation; - uv3 = mod(uv3, 1.0) - 0.5; + uv3 = mod(uv3, 1.0) - .5; float f = 0; @@ -450,13 +448,13 @@ subroutine ( src_stage_sub ) vec4 src_10(vec2 vUV, int seed, vec3 b1, vec2 f1, v } // SRC 11 : video in 2 + thru -subroutine ( src_stage_sub ) vec4 src_11(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) +vec4 src_11(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); } // SRC 12 : Scales -subroutine ( src_stage_sub ) vec4 src_12(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) +vec4 src_12(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) { // start @@ -490,7 +488,7 @@ subroutine ( src_stage_sub ) vec4 src_12(vec2 vUV, int seed, vec3 b1, vec2 f1, v 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(0.5, saw((length(mod(uv3, 1)) + shape + 0.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)); @@ -499,7 +497,7 @@ subroutine ( src_stage_sub ) vec4 src_12(vec2 vUV, int seed, vec3 b1, vec2 f1, v } // SRC 13 : Credenza -subroutine ( src_stage_sub ) vec4 src_13(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) +vec4 src_13(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) { // start @@ -510,7 +508,7 @@ subroutine ( src_stage_sub ) vec4 src_13(vec2 vUV, int seed, vec3 b1, vec2 f1, v // controls float zoom = 5 + magic(f1, b1, seed + 10) * 15; - float shape = 0.1 + magic(f2, b2, seed + 20) * 0.9; + float shape = .1 + magic(f2, b2, seed + 20) * .9; float repeat = 1 + magic(f3, b3, seed + 30) * 10; // logic @@ -525,13 +523,13 @@ subroutine ( src_stage_sub ) vec4 src_13(vec2 vUV, int seed, vec3 b1, vec2 f1, v float f = istep(1, length(uv2)) * istep(1, length(1 - uv2)); - f *= istep(0.5, saw((length(uv2) + shape + 0.5) * repeat)) * istep(0.5, saw((length(1 - uv2) + shape + 0.5) * repeat)); + f *= istep(.5, saw((length(uv2) + shape + .5) * repeat)) * istep(.5, saw((length(1 - uv2) + shape + .5) * repeat)); return vec4(f); } // SRC 14 : Cursor -subroutine ( src_stage_sub ) vec4 src_14(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) +vec4 src_14(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) { // start @@ -541,10 +539,10 @@ subroutine ( src_stage_sub ) vec4 src_14(vec2 vUV, int seed, vec3 b1, vec2 f1, v // controls - float size = magic(f1, b1, seed + 10) * 2 + 0.1; - float dx = (fmagic(f2, b2, seed + 20) * (1 - size * 0.06) - 0.5) * ratio; + 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 * 0.17) - 0.5; + float dy = fmagic(f3, b3, seed + 30) * (1 - size * .17) - .5; bool flip_y = magic_trigger(b3, seed + 30); // logic @@ -567,19 +565,20 @@ subroutine ( src_stage_sub ) vec4 src_14(vec2 vUV, int seed, vec3 b1, vec2 f1, v float f = istep(0, (uv2.x * 2 + uv2.y) * (uv2.x * 2 - uv2.y)) * istep(0, uv2.y); - uv2.y += 0.1; + uv2.y += .1; f -= istep(0, (uv2.x + uv2.y * 3) * (uv2.x - uv2.y * 3)) * istep(0, uv2.y); - f += rect(uv2, vec2(0, -0.04), vec2(0.01, 0.04)); + f += rect(uv2, vec2(0, -.04), vec2(.01, .04)); return vec4(f); } -// 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) +vec4 src_stage(int src, vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) { - int src = int(randTime(seed + 100) * 14); + if (src == 15) { + src = int(randTime(seed + 100) * 14); + } if (src == 0) { return src_1(vUV, seed, b1, f1, b2, f2, b3, f3); diff --git a/project/inc_time.glsl b/project/inc_time.glsl index 0546a03..53de926 100644 --- a/project/inc_time.glsl +++ b/project/inc_time.glsl @@ -21,33 +21,33 @@ float randTime(float seed){ float divider(float x) { - if (x < 0.1) return 0; - if (x < 0.2) return 0.125; - if (x < 0.3) return 0.25; - if (x < 0.4) return 0.5; - if (x < 0.6) return 1; - if (x < 0.8) return 2; - return 4; + if (x < .1) return 0.; + if (x < .2) return .125; + if (x < .3) return .25; + if (x < .4) return .5; + if (x < .6) return 1.; + if (x < .8) return 2.; + return 4.; } float modTime(float k, float k2) { - return mod(divider(k) * iBeats * k2 / 4, 1); + return mod(divider(k) * iBeats * k2 / 4., 1.); } float modTime(float k) { - return modTime(k, 1.0); + return modTime(k, 1.); } float sinTime(float k) { - return sin(modTime(k, 0.5) * 2 * PI); + return sin(modTime(k, .5) * 2. * PI); } float cosTime(float k) { - return cos(modTime(k, 0.5) * 2 * PI); + return cos(modTime(k, .5) * 2. * PI); } #endif