#version 330 core
 
layout(location=0) out vec4 vFragColor;	//wyjście shadera fragmentów

//wejście z shadera wierzchołków
smooth in vec2 vUV;						//współrzędne tekstury 2D

//uniformy shadera
uniform sampler2D textureMap;			//obraz do deformacji
uniform float twirl_amount;				//moc filtra

void main()
{
	//przesunięcie początku współrzędnych tekstury na środek obrazu
	vec2 uv = vUV-0.5;
	
	//obliczanie kąta na podstawie przesuniętych współrzędnych kartezjańskich
   float angle = atan(uv.y, uv.x);

   //obliczanie promieniana podstawie przesuniętych współrzędnych kartezjańskich
   float radius = length(uv);

   //zwiększanie kąta o iloczym promienia i mocy filtra
   angle+= radius*twirl_amount; 

   //powrót do współrzędnych kartezjańskich
   vec2 shifted = radius* vec2(cos(angle), sin(angle));

   //przesunięcie początku współrzędnych tekstury do położenia pierwotnego
   vFragColor = texture(textureMap, (shifted+0.5)); 
}