diff options
| author | talha <talha@talhaamir.xyz> | 2024-04-11 01:51:35 +0500 | 
|---|---|---|
| committer | talha <talha@talhaamir.xyz> | 2024-04-11 01:51:35 +0500 | 
| commit | 56b932fe77b313e7c7ca2c5b359dc84348667602 (patch) | |
| tree | 7ce0acf9bbd854b60609d4bca0853db761a8db3e /source/shaders | |
| parent | dcf84e28b5367dfa737cc2dfbf8d4c1afbf21cba (diff) | |
Completed framebuffers (chapter also gave a brief intro to kernels)
Diffstat (limited to 'source/shaders')
| -rw-r--r-- | source/shaders/fbo.fs.glsl | 72 | ||||
| -rw-r--r-- | source/shaders/fbo.vs.glsl | 10 | 
2 files changed, 82 insertions, 0 deletions
| diff --git a/source/shaders/fbo.fs.glsl b/source/shaders/fbo.fs.glsl new file mode 100644 index 0000000..afb9e08 --- /dev/null +++ b/source/shaders/fbo.fs.glsl @@ -0,0 +1,72 @@ +#version 330 core + +in vec2 TexCoords; +uniform sampler2D TexId; +out vec4 FragColor; + +vec4 filter_color_invert(vec4 color) +{ +  vec4 res = vec4(vec3(1.0) - vec3(color), 1.0); +  return res; +} + +vec4 filter_color_grayscale(vec4 color) +{ +  // we will need to average the colors +  // float average = (color.x + color.y + color.z) / 3.0f; +  // in reality, human our most sensitive towards green and least to blue, so will need to weight those +  float average = 0.2126 * color.r + 0.7152 * color.g + 0.0722 * color.b; +  vec4 res = vec4(vec3(average), 1.0); + +  return res; +} + +// @note: different kernels for experimentation +const float kernel_sharpen[9] = float[]( +    -1, -1, -1, +    -1,  9, -1, +    -1, -1, -1 +); + +const float kernel_blur[9] = float[]( +    1.0/16.0, 2.0/16.0, 1.0/16.0, +    2.0/16.0, 4.0/16.0, 2.0/16.0, +    1.0/16.0, 2.0/16.0, 1.0/16.0 +); + +const float kernel_edge_detection[9] = float[]( +    1,  1,  1, +    1, -8,  1, +    1,  1,  1 +); + +vec4 filter_kernal_effects()  +{ +  const float offset = 1.0/300.0; +  vec2 offsets[9] = vec2[]( +    vec2(-offset,  offset),    // top left +    vec2(      0,  offset),    // top center +    vec2( offset,  offset),    // top right +    vec2(-offset,       0),    // center left +    vec2(      0,       0),    // center center +    vec2( offset,       0),    // center right +    vec2(-offset, -offset),    // bot left +    vec2(      0, -offset),    // bot center +    vec2( offset, -offset)    // bot right +  ); + +  float kernal[9] = kernel_edge_detection; +  vec3 kernalValue = vec3(0.0); +  vec3 sampleTex[9]; +  for (int i=0; i<9; i++) { +    sampleTex[i] = vec3(texture(TexId, TexCoords + offsets[i])); +    kernalValue += (kernal[i] * sampleTex[i]); +  } + +  vec4 res = vec4(kernalValue, 1.0); +  return res; +} + +void main() { +    FragColor = filter_kernal_effects(); +} diff --git a/source/shaders/fbo.vs.glsl b/source/shaders/fbo.vs.glsl new file mode 100644 index 0000000..82d7211 --- /dev/null +++ b/source/shaders/fbo.vs.glsl @@ -0,0 +1,10 @@ +#version 330 core +layout(location=0) in vec3 aPos; +layout(location=1) in vec2 aTex; + +out vec2 TexCoords; + +void main() { +  gl_Position = vec4(aPos.x, aPos.y, 0.0f, 1.0f); +  TexCoords = aTex; +}; | 
