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

// 0 = time
// 1 = mouse X
// 2 = mouse Y
// 3 = Thickness (0.1 to 1.0)
// 4 = PI factor
uniform float		aaa_fu_float[8];

// 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)
{
	float thick = clamp(aaa_fu_float[3], 0.01, 1.0);

	float u = gl_TexCoord[0].s;

	float fft = texture2D(aaa_tex2d[0], vec2(u, 0.25)).x;
	float wav = texture2D(aaa_tex2d[0], vec2(u, 0.75)).x;

	vec2 uv = gl_TexCoord[0].st - 0.5;
	vec2 wv = uv + vec2(0.0, wav-0.5);

	float f = pow( abs(fft * tan(aaa_fu_float[0] - uv.y / wv.y)), 0.1 );
	float h = pow( abs(wv.x - pow(abs(uv.y), cos(fft * PI * aaa_fu_float[4]))), f );
	float g = abs( thick / (sin(wv.y) * h) );

	vec3 c = g * clamp(vec3(fft, fract(fft) / fract(wav), g * wav), 0.0, 1.0);


	vec4 src = (texture2D(aaa_tex2d[0], gl_TexCoord[0].st)) * aaa_fu_vec4[0]  * aaa_fu_src;
	vec4 fx  = (vec4(c, 1.0)) * aaa_fu_vec4[1]  * aaa_fu_out;

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