30 lines
963 B
GLSL
30 lines
963 B
GLSL
#version 450
|
|
|
|
layout(location = 0) out vec4 FragColor;
|
|
layout(location = 0) in vec2 TexCoords;
|
|
layout(set = 0, binding = 0) uniform sampler2D bloomImage;
|
|
|
|
layout(push_constant) uniform PassConfig {
|
|
int horizontal;
|
|
float GAMMA_CONST;
|
|
float Exposure;
|
|
float blur_radius;
|
|
vec2 bloomSize;
|
|
} config;
|
|
|
|
const float weight[5] = float[](0.227027, 0.1945946, 0.1216216, 0.054054, 0.016216);
|
|
|
|
vec3 safeBloomSample(vec2 uv) {
|
|
return max(texture(bloomImage, uv).rgb, vec3(0.0));
|
|
}
|
|
|
|
void main() {
|
|
vec2 tex_offset = config.blur_radius / vec2(textureSize(bloomImage, 0));
|
|
vec2 direction = config.horizontal != 0 ? vec2(tex_offset.x, 0.0) : vec2(0.0, tex_offset.y);
|
|
vec3 result = safeBloomSample(TexCoords) * weight[0];
|
|
for (int i = 1; i < 5; i++) {
|
|
result += safeBloomSample(TexCoords + direction * i) * weight[i];
|
|
result += safeBloomSample(TexCoords - direction * i) * weight[i];
|
|
}
|
|
FragColor = vec4(result, 1.0);
|
|
}
|