#define PI 3.14159265359
float modFloat(float a, float b) {
  return a - b * floor(a / b);
}
vec4 invertColor(vec4 color) {
    return vec4(1.0 - color.r, 1.0 - color.g, 1.0 - color.b, color.a);
}
vec3 palette( float t ) {
    vec3 a = vec3(0.5, 0.5, 0.5);
    vec3 b = vec3(0.5, 0.5, 0.5);
    vec3 c = vec3(1.0, 1.0, 1.0);
    vec3 d = vec3(0.26,0.516,0.357);

    return a + b*cos( 6.28318*(c*t+d) );
}

void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
    // Normalized pixel coordinates (from 0 to 1)
    vec2 uv = (fragCoord*2.0-iResolution.xy)/iResolution.y;
      vec2 uv0 = uv;

    uv=fract(uv)-0.5;
    float t=iTime/1.0;
    for (float i = 0.0; i < 3.0; i++) {
    float n= PI*(4.0+15.0*sin(t/20.0)*cos(t/10.0))*i;
    float m=PI*(2.0+12.0*sin(t/10.0)*cos(t/10.0))*i;
    float v= cos(n*uv0.x)* cos(m*uv0.y) - cos(m*uv0.x) *cos(n*uv0.y);
    float th=step(0.1,v);

    // Time varying pixel color
    vec3 col = palette(v);
    // Output to screen
    fragColor = vec4(col,1.0);
        invertColor(fragColor);
}
}
