42 lines
997 B
GLSL
42 lines
997 B
GLSL
#version 440
|
|
|
|
layout(location = 0) in vec2 qt_TexCoord0;
|
|
layout(location = 0) out vec4 fragColor;
|
|
|
|
layout(std140, binding = 0) uniform buf {
|
|
mat4 qt_Matrix;
|
|
float qt_Opacity;
|
|
vec2 pixelStep;
|
|
int radius;
|
|
float deviation;
|
|
};
|
|
layout(binding = 1) uniform sampler2D src;
|
|
|
|
#define PI 3.1415926538
|
|
|
|
float gaussianWeight(vec2 coords)
|
|
{
|
|
float x2 = pow(coords.x, 2.0);
|
|
float y2 = pow(coords.y, 2.0);
|
|
float deviation2 = pow(deviation, 2.0);
|
|
|
|
return (1.0 / (2.0 * PI * deviation2)) * exp(-(x2 + y2) / (2.0 * deviation2));
|
|
}
|
|
|
|
void main(void)
|
|
{
|
|
vec4 sum = vec4(0.0);
|
|
|
|
float gaussianSum = 0.0;
|
|
for (int x = -radius; x <= radius; ++x) {
|
|
for (int y = -radius; y <= radius; ++y) {
|
|
vec2 c = qt_TexCoord0 + vec2(x, y) * pixelStep;
|
|
float w = gaussianWeight(vec2(x, y));
|
|
vec4 color = texture(src, c);
|
|
sum += color * w;
|
|
gaussianSum += w;
|
|
}
|
|
}
|
|
|
|
fragColor = sum / gaussianSum * qt_Opacity;
|
|
} |