41 lines
1.5 KiB
GLSL
Executable File
41 lines
1.5 KiB
GLSL
Executable File
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;
|
|
}
|
|
} |