diff --git a/project/frag1.glsl b/project/frag1.glsl index 09a5dd6..e5e6a99 100644 --- a/project/frag1.glsl +++ b/project/frag1.glsl @@ -12,7 +12,8 @@ out vec4 fragColor; uniform int iSeed1; uniform int iState1; uniform vec3 iGroup1_1[6]; +uniform sampler2D iTex1; void main() { - 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); + fragColor = src_stage(iState1, vUV, iTex1, 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 f5aaa1b..d28e8f5 100644 --- a/project/frag2.glsl +++ b/project/frag2.glsl @@ -12,7 +12,8 @@ out vec4 fragColor; uniform int iSeed2; uniform int iState2; uniform vec3 iGroup1_2[6]; +uniform sampler2D iTex2; void main() { - 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); + fragColor = src_stage(iState2, vUV, iTex2, 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/inc_src.glsl b/project/inc_src.glsl index b706ab0..7791eb3 100644 --- a/project/inc_src.glsl +++ b/project/inc_src.glsl @@ -39,13 +39,13 @@ vec4 src_thru(vec2 vUV, sampler2D tex, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 } // SRC 1: feedback + thru -vec4 src_1(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) +vec4 src_1(vec2 vUV, sampler2D self, 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 -vec4 src_2(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) +vec4 src_2(vec2 vUV, sampler2D self, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) { // start @@ -72,7 +72,7 @@ vec4 src_2(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 } // SRC 3 : dots -vec4 src_3(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) +vec4 src_3(vec2 vUV, sampler2D self, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) { // start @@ -102,7 +102,7 @@ vec4 src_3(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 // SRC 4 : bacteria -vec4 src_4(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) +vec4 src_4(vec2 vUV, sampler2D self, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) { // start @@ -130,7 +130,7 @@ vec4 src_4(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 } // SRC 5 : noise -vec4 src_5(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) +vec4 src_5(vec2 vUV, sampler2D self, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) { // start @@ -168,7 +168,7 @@ vec4 src_5(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 } // SRC 6 : cp437 -vec4 src_6(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) +vec4 src_6(vec2 vUV, sampler2D self, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) { // start @@ -202,8 +202,7 @@ vec4 src_6(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 } // SRC 7 : sentences - -vec4 src_7(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) +vec4 src_7(vec2 vUV, sampler2D self, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) { // start @@ -232,7 +231,7 @@ vec4 src_7(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 } // SRC 8 : sentences repeat -vec4 src_8(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) +vec4 src_8(vec2 vUV, sampler2D self, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) { // start @@ -267,7 +266,7 @@ vec4 src_8(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 } // SRC 9 : dungeon -vec4 src_9(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) +vec4 src_9(vec2 vUV, sampler2D self, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) { // start @@ -301,14 +300,14 @@ vec4 src_9(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 } // SRC 10 : -vec4 src_10(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) +vec4 src_10(vec2 vUV, sampler2D self, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) { // TODO - return src_1(vUV, seed, b1, f1, b2, f2, b3, f3); + return src_1(vUV, self, seed, b1, f1, b2, f2, b3, f3); } // SRC 11 : isometric grid -vec4 src_11(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) +vec4 src_11(vec2 vUV, sampler2D self, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) { // start @@ -360,7 +359,7 @@ vec4 src_11(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec } // SRC 12 : Scales -vec4 src_12(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) +vec4 src_12(vec2 vUV, sampler2D self, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) { // start @@ -403,7 +402,7 @@ vec4 src_12(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec } // SRC 13 : Credenza -vec4 src_13(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) +vec4 src_13(vec2 vUV, sampler2D self, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) { // start @@ -434,47 +433,85 @@ vec4 src_13(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec return vec4(f); } -// SRC 14 : -vec4 src_14(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) +// SRC 14 : Fire +vec4 src_14(vec2 vUV, sampler2D self, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) { - // TODO - 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 * vec2(ratio, 1.); + + // controls + + float zoom = magic(f1, b1, seed + 10.) * 200. + 50.; + float cooling = (magic(f2, b2, seed + 20.) * 3. + 1.) * 4. / zoom; + float ball_size = magic(f3, b3, seed + 30.) * 0.8 / ratio + 0.05; + float ball_trigger = magic_b(b3, seed + 30.).x; + + // logic + + vec2 uv2 = uv1 * zoom; + + uv2 = vec2(ivec2(uv1 * zoom)); + + float rand_pos = rand(uv2 + seed); + + vec2 src_uv = uv2 - vec2(round(rand_pos), 1) + 0.5; + + float src = mix( + 1., + mix( + 0., + texture(self, (src_uv / zoom) * vec2(iResolution.y / iResolution.x, 1.)).x, + mix(1., step(0, src_uv.x) * step(0, src_uv.y), ball_trigger) + ), + mix( + step(0, src_uv.y), + 1. - h_circle(uv2, vec2(0.5 * ratio, 0.5) * zoom, ball_size * zoom, 0.05 * zoom), + ball_trigger + ) + ); + + float f = max(0., src - cooling * (rand(uv2 + int(iBeats * 16.) + seed + 10) - 0.33)); + + return vec4(f); } -vec4 src_stage(int src, vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) +vec4 src_stage(int src, vec2 vUV, sampler2D self, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3) { if (src >= 15) { src = int(randTime(seed + 100.) * 14.) + 1; } if (src == 1) { - return src_1(vUV, seed, b1, f1, b2, f2, b3, f3); + return src_1(vUV, self, seed, b1, f1, b2, f2, b3, f3); } else if (src == 2) { - return src_2(vUV, seed, b1, f1, b2, f2, b3, f3); + return src_2(vUV, self, seed, b1, f1, b2, f2, b3, f3); } else if (src == 3) { - return src_3(vUV, seed, b1, f1, b2, f2, b3, f3); + return src_3(vUV, self, seed, b1, f1, b2, f2, b3, f3); } else if (src == 4) { - return src_4(vUV, seed, b1, f1, b2, f2, b3, f3); + return src_4(vUV, self, seed, b1, f1, b2, f2, b3, f3); } else if (src == 5) { - return src_5(vUV, seed, b1, f1, b2, f2, b3, f3); + return src_5(vUV, self, seed, b1, f1, b2, f2, b3, f3); } else if (src == 6) { - return src_6(vUV, seed, b1, f1, b2, f2, b3, f3); + return src_6(vUV, self, seed, b1, f1, b2, f2, b3, f3); } else if (src == 7) { - return src_7(vUV, seed, b1, f1, b2, f2, b3, f3); + return src_7(vUV, self, seed, b1, f1, b2, f2, b3, f3); } else if (src == 8) { - return src_8(vUV, seed, b1, f1, b2, f2, b3, f3); + return src_8(vUV, self, seed, b1, f1, b2, f2, b3, f3); } else if (src == 9) { - return src_9(vUV, seed, b1, f1, b2, f2, b3, f3); + return src_9(vUV, self, seed, b1, f1, b2, f2, b3, f3); } else if (src == 10) { - return src_10(vUV, seed, b1, f1, b2, f2, b3, f3); + return src_10(vUV, self, seed, b1, f1, b2, f2, b3, f3); } else if (src == 11) { - return src_11(vUV, seed, b1, f1, b2, f2, b3, f3); + return src_11(vUV, self, seed, b1, f1, b2, f2, b3, f3); } else if (src == 12) { - return src_12(vUV, seed, b1, f1, b2, f2, b3, f3); + return src_12(vUV, self, seed, b1, f1, b2, f2, b3, f3); } else if (src == 13) { - return src_13(vUV, seed, b1, f1, b2, f2, b3, f3); + return src_13(vUV, self, seed, b1, f1, b2, f2, b3, f3); } else { - return src_14(vUV, seed, b1, f1, b2, f2, b3, f3); + return src_14(vUV, self, seed, b1, f1, b2, f2, b3, f3); } }