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

// Dimension of textures : 0, 1, 2, 3 dimension, -1 if unused per Tex Unit
uniform	int			aaa_tex_dim[4];

// Size of Texture for each texture unit
uniform vec2		aaa_tex_0_size;

// 0 = time
// 1 = mouse X
// 2 = mouse Y
// 3 = Thickness
uniform float		aaa_pu_float[6];


void main(void)
{
	const float	PI = 3.14159265359;

	float u = gl_FragCoord.x / aaa_tex_0_size.x;
	
	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_FragCoord.xy / aaa_tex_0_size.xy * 2.0 - 1.0;
	vec2 wv = uv + vec2(0.0, wav - 0.5);

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

	vec3 c = g * clamp(vec3(fft, fract(fft) / fract(wav), g * wav), 0.0, 1.0);
	
	gl_FragColor = vec4(c, 1.);
}
