This commit is contained in:
2026-08-27 18:20:26 +02:00
parent a926cd6799
commit 029f9d4d0a
17 changed files with 359 additions and 368 deletions
+71 -72
View File
@@ -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);