72 lines
1.4 KiB
GLSL
72 lines
1.4 KiB
GLSL
#version 450 core
|
|
|
|
//the texture coordinates of the screen
|
|
in vec2 textureCoords;
|
|
|
|
// shader outputs
|
|
layout (location = 0) out vec4 frag;
|
|
|
|
|
|
//
|
|
//Uniforms
|
|
//
|
|
|
|
// color accumulation buffer
|
|
layout (binding = 0) uniform sampler2D screenTexture;
|
|
|
|
//Controls whether blur is applied or not
|
|
uniform int applyBlur;
|
|
|
|
|
|
|
|
//
|
|
//Consts
|
|
//
|
|
|
|
//How far to pull pixels from
|
|
const float offset = 1.0 / 300.0;
|
|
|
|
//offsets for kernel sampling
|
|
const vec2 kernelOffsets[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
|
|
);
|
|
|
|
const float blurKernel[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
|
|
);
|
|
|
|
|
|
|
|
//
|
|
//main
|
|
//
|
|
void main(){
|
|
vec3 outputColor = vec3(texture(screenTexture,textureCoords.st));
|
|
|
|
//kernel samples
|
|
vec3 sampleTex[9];
|
|
|
|
//
|
|
//Blur
|
|
if(applyBlur > 0){
|
|
for(int i = 0; i < 9; i++){
|
|
sampleTex[i] = vec3(texture(screenTexture, textureCoords.st + kernelOffsets[i]));
|
|
}
|
|
outputColor = vec3(0.0);
|
|
for(int i = 0; i < 9; i++){
|
|
outputColor = outputColor + sampleTex[i] * blurKernel[i];
|
|
}
|
|
}
|
|
|
|
frag = vec4(outputColor, 1.0);
|
|
} |