#version 460 core
out vec4 FragColor;

in vec2 TexCoords;

uniform sampler2D screenTexure;
const float offset = 1.0/ 300.0;

void main(){
    FragColor = texture(screenTexure, TexCoords);

   // Inversion filter
   //FragColor =  vec4( vec3 (1.0 - texture(screenTexure, TexCoords) ), 1.0) ;


    //grayscale
    /*
    FragColor = texture(screenTexure, TexCoords);
    float average = (FragColor.r + FragColor.g + FragColor.b) / 3.0;
    FragColor = vec4(average, average, average, 1.0);
    */

   // physically accurate grayscale 
   /* FragColor = texture(screenTexure, TexCoords);
    float average = 0.2126 * FragColor.r + 0.7152 * FragColor.g +  0.0722 * FragColor.b;
    FragColor = vec4(average,average,average, 1.0);*/

   vec2 offset[9] = vec2[] (
    vec2(-offset, offset),  // top-left
    vec2(0.0f, offset),     // top-center
    vec2(offset, offset),   // top-right
    vec2(-offset, 0.0f),    // center-left
    vec2(0.0f, 0.0f),       // center-center
    vec2(offset, 0.0f),     // center-right
    vec2(-offset, -offset), // bottom-left
    vec2(0.0f, -offset),    // bottom-center
    vec2(offset, -offset)   // bottom-right
   );

    // sharpen
   /*float kernel[9] = float[](
    -1, -1, -1,
    -1,  9, -1,
    -1, -1, -1
   );*/

    // blur
    /* float kernel[9] = float[](
     1.0 /16, 2.0 /16, 1.0 /16,
     2.0 /16, 4.0 /16, 2.0 /16,
     1.0 /16, 2.0 /16, 1.0 /16
   );*/

   // Edge-detection
  /* float kernel[9] = float[] (
    1, 1, 1,
    1, -8, 1,
    1, 1, 1
   );

   vec3 sampleTex[9];
   for (int i= 0; i < 9; i++) {
        sampleTex[i] = vec3(texture(screenTexure, TexCoords.st + offset[i]));
   }

   vec3 col = vec3(0.0);
   for (int i = 0; i < 9; i++) {
     col += sampleTex[i] * kernel[i];
   }

   FragColor = vec4(col, 1.0);
*/ 


}