#version 430 core

uniform float fGlobalTime; // in seconds
uniform vec2 v2Resolution; // viewport resolution (in pixels)

uniform sampler1D texFFT; // towards 0.0 is bass / lower freq, towards 1.0 is higher / treble freq
uniform sampler1D texFFTSmoothed; // this one has longer falloff and less harsh transients
uniform sampler2D texBricks;
uniform sampler2D texGrunge;
uniform sampler2D texMono;
uniform sampler2D texNoise;
uniform sampler2D texNormal;
uniform sampler2D texPaper;
uniform sampler2D texPooBrain;

layout(location = 0) out vec4 out_color; // out_color must be written in order to see anything
/*
vec4 plas( vec2 v, float time )
{
  float c = 0.5 + sin( v.x * 10.0 ) + cos( sin( time + v.y ) * 20.0 );
  return vec4( sin(c * 0.2 + cos(time)), c * 0.15, cos( c * 0.1 + time / .4 ) * .25, 1.0 );
}*/

vec2 r2d(in vec2 v, in float a){
return vec2(v.x * cos(a) - v.y * sin(a),v.x * cos(a) + v.y * sin(a));
}

void main(void)
{

  vec2 uv = gl_FragCoord.xy / v2Resolution.xy;
  
  out_color = vec4(vec3(0.), 1.0);

  uv.x += 1.2;

  for (float i = fract(fGlobalTime); i < 1.; i += 0.1) {
    float fft = texture(texFFT, uv.x+i*0.01).x * 1.2;
    uv.x += fft * 10.;
    vec2 ruv = r2d(uv,0.9 + fft * 10.);// fft * 2. + fGlobalTime);

    if (ruv.y - .2 - pow(uv.x, ruv.y - i) + i * 2.2 < fft) {
        if (i < 0.3)
          out_color.r += 0.33;
        else if (i < 0.6)
          out_color.g += 0.33;
        else
          out_color.b += 0.333;
    }
  }
  if (out_color.r < 0.1) {
  out_color = texture2D(texPooBrain, gl_FragCoord.xy / v2Resolution.xy);
}
}