68 lines
1.8 KiB
GLSL
68 lines
1.8 KiB
GLSL
#version 310 es
|
|
precision mediump float;
|
|
|
|
const vec2 bloomDir = vec2(0.0f, 1.0f);
|
|
float weights[3] = float[3](0.227027029f, 0.31621623f, 0.07027027f);
|
|
|
|
struct BloomUniforms {
|
|
float radius;
|
|
float dim;
|
|
};
|
|
|
|
layout (binding = 0) uniform BloomUniforms_1 {
|
|
float radius;
|
|
float dim;
|
|
} bloom;
|
|
uniform highp sampler2D bloomTexture;
|
|
|
|
|
|
struct FragmentInput {
|
|
vec2 texCoord;
|
|
};
|
|
|
|
vec4 getGaussianBlur(vec2 texCoord) {
|
|
vec2 texelRadius = (vec2(bloom.radius) / vec2(textureSize(bloomTexture, 0)));
|
|
vec2 tint_symbol = (bloomDir * texelRadius);
|
|
vec4 sum = vec4(0.0f);
|
|
sum = (sum + (texture(bloomTexture, texCoord) * weights[0]));
|
|
sum = (sum + (texture(bloomTexture, (texCoord + (tint_symbol * 1.0f))) * weights[1]));
|
|
sum = (sum + (texture(bloomTexture, (texCoord - (tint_symbol * 1.0f))) * weights[1]));
|
|
sum = (sum + (texture(bloomTexture, (texCoord + (tint_symbol * 2.0f))) * weights[2]));
|
|
sum = (sum + (texture(bloomTexture, (texCoord - (tint_symbol * 2.0f))) * weights[2]));
|
|
return vec4(sum.rgb, 1.0f);
|
|
}
|
|
|
|
uniform highp sampler2D prevTexture;
|
|
|
|
struct tint_symbol_3 {
|
|
vec2 texCoord;
|
|
};
|
|
struct tint_symbol_4 {
|
|
vec4 value;
|
|
};
|
|
|
|
vec4 fragmentMain_inner(FragmentInput tint_symbol_1) {
|
|
vec4 blurColor = getGaussianBlur(tint_symbol_1.texCoord);
|
|
vec4 dimColor = (texture(prevTexture, tint_symbol_1.texCoord) * bloom.dim);
|
|
return (blurColor + dimColor);
|
|
}
|
|
|
|
tint_symbol_4 fragmentMain(tint_symbol_3 tint_symbol_2) {
|
|
FragmentInput tint_symbol_5 = FragmentInput(tint_symbol_2.texCoord);
|
|
vec4 inner_result = fragmentMain_inner(tint_symbol_5);
|
|
tint_symbol_4 wrapper_result = tint_symbol_4(vec4(0.0f, 0.0f, 0.0f, 0.0f));
|
|
wrapper_result.value = inner_result;
|
|
return wrapper_result;
|
|
}
|
|
in vec2 texCoord;
|
|
out vec4 value;
|
|
void main() {
|
|
tint_symbol_3 inputs;
|
|
inputs.texCoord = texCoord;
|
|
tint_symbol_4 outputs;
|
|
outputs = fragmentMain(inputs);
|
|
value = outputs.value;
|
|
}
|
|
|
|
|