#define r iResolution
#define t iTime
#define ic0 iChannel0

void mainImage(out vec4 fragColor, in vec2 fragCoord)
{
	vec2 uv = fragCoord.xy / r.x;
    float s1 = .5 + .5 * min(texture(ic0, vec2(.1, 0.) ).x * 1.5, 1.);
    float s2 = .5 + .5 * min(texture(ic0, vec2(.4, 0.) ).x * 1.5, 1.);
    float s3 = .5 + .5 * min(texture(ic0, vec2(.6, 0.) ).x * 1.5, 1.);
    float s4 = .5 + .5 * min(texture(ic0, vec2(.9, 0.) ).x * 1.5, 1.);
    
    vec2 p1 = vec2(0., 0.);
    vec2 p2 = vec2(0., r.y / r.x);
    vec2 p3 = vec2(1., r.y / r.x);
    vec2 p4 = vec2(1., 0.);
       
    float c1 = .5 + .5 * sin(distance(uv, p1) * 10. * s1 + t + s1 / 4.);
    float c2 = .5 + .5 * sin(distance(uv, p2) * 10. * s2 + t + s2 / 4.);
    float c3 = .5 + .5 * sin(distance(uv, p3) * 10. * s3 + t + s3 / 4.);
    float c4 = .5 + .5 * sin(distance(uv, p4) * 25. * s4 + t * 3. + s4 / 4.);
           
	fragColor = vec4(c1 + c4 * .33, c2 + c4 * .33, c3 + c4 * .33, 1.);
}
