
precision mediump float;

uniform float iGlobalTime;
uniform float iIntensity;
uniform vec2 iResolution;

#define MAX_ITER 8
void main( void ) {
	vec2 p = (gl_FragCoord.xy/iResolution.xy)*3.0- vec2(15.0);
	vec2 i = p;
	float c = 3.0;
	float inten = .05;

	for (int n = 0; n < MAX_ITER; n++)
	{
		float t = time/5. * (1.0 - (3.0 / float(n+1)));
		i = p + vec2(cos(t - i.x) + sin(t + i.y), sin(t - i.y) + cos(t + i.x));
		c += 1.0/length(vec2(p.x / (2.*sin(i.x+t)/inten),p.y / (cos(i.y+t)/inten)));
	}
	c /= float(MAX_ITER);
	c = 1.5-sqrt(pow(c,3.0+iIntensity));
	gl_FragColor = vec4(vec3(c*c*c*c*0.5,c*c*c*c*0.5,c*c*c*c*0.5), 1.0);

}