
// Uniform variables for texturing
uniform sampler2D 	aaa_tex2d[4];


// 0 = time
// 1 = mouse X
// 2 = mouse Y
// 3 = frequency
// 4 = repeat depth
uniform float		aaa_fu_float[6];

// 0 = iterations
uniform int			aaa_fu_int[4];


// balance between texture and effect
uniform float		aaa_fu_src;
uniform float		aaa_fu_out;


// Colors factors
// 0 = src colors
// 1 = out color
uniform vec4		aaa_fu_vec4[8];


void main(void)
{
	vec2 uv = gl_TexCoord[0].st - 0.5;

	float time = aaa_fu_float[0] * 1.0;

	vec3 color = vec3(0.0);

	for (float i=0.0; i<aaa_fu_float[3] + 1.0; i++)
	{
		float freq = texture2D(aaa_tex2d[0], vec2(i / aaa_fu_float[3], 0.0)).x * 7.0;

		vec2 p = vec2(uv);

		p.x += i * 0.4 + freq * 0.03 / cos(time*aaa_fu_float[4]);
		p.y += sin(p.x * 10.0 / sin(time*aaa_fu_float[4])) * cos(p.x * 2.0) * freq * 0.2 * ((i + 1.0) / aaa_fu_float[3]);
		float intensity = abs(0.01 / p.y) * clamp(freq, 0.35, 2.0);

		color += vec3(intensity) * (3.0/aaa_fu_float[3]);

		// Nice but stays in blue spectrum ;)
		//color += vec3(1.0 * intensity * (i / 5.0), 0.5 * intensity, 1.75 * intensity) * (3.0/aaa_fu_float[3]);
	}

	vec4 srcColor = texture2D(aaa_tex2d[0], gl_TexCoord[0].st);

	vec4 src = (srcColor * aaa_fu_src) * aaa_fu_vec4[0];
	vec4 fx  = (vec4(color, 1.0) * srcColor * aaa_fu_out) * aaa_fu_vec4[0];

	gl_FragColor = vec4( (src + fx) );
}











