#version 430 layout (binding = 0) uniform sampler2D colorSamp; layout (binding = 1) uniform sampler2D ssaoSamp; layout (binding = 2) uniform sampler2D shadowSamp; uniform bool useSSAO; in vec2 varTex; out vec4 color; void main() { if(useSSAO) { color = vec4(texture(colorSamp, varTex).xyz * (texture(ssaoSamp, varTex).r + 0.5), 1.0); } else { color = vec4(texture(colorSamp, varTex).xyz, 1.0); } vec2 texelSize = 1.0 / vec2(textureSize(shadowSamp, 0)); float result = 0.0; const int radius = 5; for(int x = -radius; x < radius; x++) { for(int y = -radius; y < radius; y++) { vec2 offset = vec2(float(x), float(y)) * texelSize; result += texture(shadowSamp, varTex + offset).r; } } result /= (radius * radius * 4); result = result * 0.5 + 0.5; color *= result; }