// Name: Water
// Author: diatribes
// URL: https://www.shadertoy.com/view/tXjXDy
#version 330 core
precision highp float;

out vec4 FragColor;
in vec2 vUV;
uniform vec2 iResolution;
uniform float iTime;

/*
    -2 by @FabriceNeyret2

    thanks!!  :D

    If it doesn't display correctly, change line 17 "r/r" to "vec3(1)"
*/

void mainImage( out vec4 o, vec2 u ) {
    float s=.002, i=0., n;  // FIXED: Initialize i=0
    vec3 r = vec3(iResolution.xy, iResolution.x/iResolution.y);
    vec3 p = vec3(0);
    u = (u-r.xy/2.)/r.y-.3;

    o = vec4(0);  // FIXED: Initialize output to black

    for(; i < 32. && s > .001; i++) {
        // Clamp only extreme overflow values, let normal brightness through
        vec4 term = vec4(5,2,1,0)/max(length(u-.1), 0.001);
        o += min(term, vec4(100.0));
        for (p += vec3(u*s,s), s = 1. + p.y, n =.01; n < 1.; n+=n) {
            s += abs(dot(sin(p.z+iTime+p / n), vec3(1))) * n*.1;
        }
    }
    o = tanh(o/5e2);
}

void main() {
    vec2 fragCoordPixels = vUV * iResolution;
    vec4 outColor;
    mainImage(outColor, fragCoordPixels);
    FragColor = outColor;
}
