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

// Size of Texture for each texture unit
uniform vec2		aaa_tex_size[];

// 0 = time
// 1 = mouse X
// 2 = mouse Y
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 )
{
  //vec2 aaa_tex_size[0] = vec2(800, 600);

  vec2 uPos = gl_TexCoord[0].st;

  uPos.x -= 10.5;
  uPos.y -= -0.0;

  vec4 color = vec4(0.0, 0.0, 0.0, 1.0);

  float vertColor = 0.0;

  for( float i = 0.0; i < 10.0; ++i )
  {
    float t = aaa_fu_float[0] * (0.75);

    uPos.y -= ( (sin(cos( uPos.y*(i+2.0) + t+i/2.0)) * 0.2) - (tan(cos( uPos.y*(i+0.25) + t+i/0.25)) * 0.15));
    uPos.x += ( (tan(cos( uPos.x*(i+2.0) + t+i/2.0)) * 0.2) - (sin(cos( uPos.y*(i+0.25) + t+i/0.25)) * 0.15));

    uPos.y -= ( (sin(cos( uPos.y*(i+2.0) + t+i/2.0)) * 0.2) - (tan(cos( uPos.y*(i+0.25) + t+i/0.25)) * 0.15));
    uPos.x += ( (tan(cos( uPos.x*(i+2.0) + t+i/2.0)) * 0.2) - (sin(tan( uPos.y*(i+0.25) + t+i/0.25)) * 0.15));

    float fTemp = abs(1.0 / (uPos.y * uPos.x) / 800.0);

    vertColor *= fTemp;

    color.xyz += vec3( min(fTemp, 10.0) * sin(t), fTemp*i/55.0, sin(fTemp*(1.0-i)/10.0) );

    uPos = ((gl_FragCoord.xy - (aaa_tex_size[0])) / min(aaa_tex_size[0].y,aaa_tex_size[0].x) * 1.0) * vec2(aaa_fu_float[1], aaa_fu_float[2]);
  }

  color.a = (color.r + color.g + color.b) * 1.;

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

	gl_FragColor = src + fx;
/*
    gl_FragColor.a  = 1.0;
    gl_FragColor.r  = aaa_fu_src;
    gl_FragColor.g  = 1.0;
    gl_FragColor.b  = aaa_fu_out;
*/
}