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);
 | 
						|
}  |