linux-presets/gui/gnome/autocustom-gnome-macos/res/extensions/search-light@icedman.github.../effects/blur_effect.glsl

41 lines
1.5 KiB
Plaintext
Raw Normal View History

2024-07-08 22:46:35 +02:00
uniform sampler2D tex;
uniform float red;
uniform float green;
uniform float blue;
uniform float blend;
uniform vec2 textureSize; // Size of the texture being sampled
// Function to perform a simple blur
vec4 blur(sampler2D texture, vec2 texCoord) {
vec4 sum = vec4(0.0);
float blurSize = 0.05; // Adjust this for different blur strengths
// Sample neighboring pixels and average their colors
sum += texture2D(texture, texCoord + vec2(-blurSize, -blurSize));
sum += texture2D(texture, texCoord + vec2(0.0, -blurSize));
sum += texture2D(texture, texCoord + vec2(blurSize, -blurSize));
sum += texture2D(texture, texCoord + vec2(-blurSize, 0.0));
sum += texture2D(texture, texCoord);
sum += texture2D(texture, texCoord + vec2(blurSize, 0.0));
sum += texture2D(texture, texCoord + vec2(-blurSize, blurSize));
sum += texture2D(texture, texCoord + vec2(0.0, blurSize));
sum += texture2D(texture, texCoord + vec2(blurSize, blurSize));
return sum / 9.0; // Adjust divisor for different blur strengths
}
void main() {
vec2 texCoord = cogl_tex_coord_in[0].st;
vec4 original = texture2D(tex, texCoord);
if (original.a >= 0.5) {
vec4 blurred = blur(tex, texCoord);
// blurred.a = original.a;
vec3 pix_color = blurred.rgb;
vec3 color = vec3(red * blurred.a, green * blurred.a, blue * blurred.a);
vec3 finalColor = mix(pix_color, color, blend * 0.75);
cogl_color_out = vec4(finalColor, (blurred.a + original.a)/2);
} else {
cogl_color_out = original;
}
}