ScreenShield: unbreak blurring the background

It was missing a uniform, so it had no effect besides desaturation.

https://bugzilla.gnome.org/show_bug.cgi?id=682536
This commit is contained in:
Giovanni Campagna 2012-11-07 19:04:12 +01:00
parent 989d0a5682
commit 7bed964ab2

View File

@ -51,10 +51,11 @@ const SHORT_FADE_TIME = 0.3;
function sample(offx, offy) { function sample(offx, offy) {
return 'texel += texture2D (sampler, tex_coord.st + pixel_step * ' + return 'texel += texture2D (sampler, tex_coord.st + pixel_step * ' +
'vec2 (' + offx + ',' + offy + ') * 2.0);\n' 'vec2 (' + offx + ',' + offy + '));\n'
} }
const GLSL_BLUR_EFFECT_DECLARATIONS = ' \ const GLSL_BLUR_EFFECT_DECLARATIONS = ' \
uniform vec2 pixel_step;\n \ uniform vec2 pixel_step;\n \
uniform float desaturation;\n \
vec4 apply_blur(in sampler2D sampler, in vec2 tex_coord) {\n \ vec4 apply_blur(in sampler2D sampler, in vec2 tex_coord) {\n \
vec4 texel;\n \ vec4 texel;\n \
texel = texture2D (sampler, tex_coord.st);\n' texel = texture2D (sampler, tex_coord.st);\n'
@ -62,7 +63,6 @@ vec4 apply_blur(in sampler2D sampler, in vec2 tex_coord) {\n \
+ sample( 0.0, -1.0) + sample( 0.0, -1.0)
+ sample(+1.0, -1.0) + sample(+1.0, -1.0)
+ sample(-1.0, 0.0) + sample(-1.0, 0.0)
+ sample( 0.0, 0.0)
+ sample(+1.0, 0.0) + sample(+1.0, 0.0)
+ sample(-1.0, +1.0) + sample(-1.0, +1.0)
+ sample( 0.0, +1.0) + sample( 0.0, +1.0)
@ -70,7 +70,7 @@ vec4 apply_blur(in sampler2D sampler, in vec2 tex_coord) {\n \
texel /= 9.0;\n \ texel /= 9.0;\n \
return texel;\n \ return texel;\n \
}\n \ }\n \
vec3 desaturate (const vec3 color, const float desaturation)\n \ vec3 desaturate (const vec3 color)\n \
{\n \ {\n \
const vec3 gray_conv = vec3 (0.299, 0.587, 0.114);\n \ const vec3 gray_conv = vec3 (0.299, 0.587, 0.114);\n \
vec3 gray = vec3 (dot (gray_conv, color));\n \ vec3 gray = vec3 (dot (gray_conv, color));\n \
@ -78,7 +78,7 @@ vec3 desaturate (const vec3 color, const float desaturation)\n \
}'; }';
const GLSL_BLUR_EFFECT_CODE = ' \ const GLSL_BLUR_EFFECT_CODE = ' \
cogl_texel = apply_blur(cogl_sampler, cogl_tex_coord.st);\n \ cogl_texel = apply_blur(cogl_sampler, cogl_tex_coord.st);\n \
cogl_texel.rgb = desaturate(cogl_texel.rgb, 0.6);\n'; cogl_texel.rgb = desaturate(cogl_texel.rgb);\n';
const Clock = new Lang.Class({ const Clock = new Lang.Class({
@ -409,6 +409,12 @@ const ScreenShield = new Lang.Class({
GLSL_BLUR_EFFECT_DECLARATIONS, GLSL_BLUR_EFFECT_DECLARATIONS,
GLSL_BLUR_EFFECT_CODE, GLSL_BLUR_EFFECT_CODE,
true); true);
backgroundActor.set_uniform_float('desaturation',
1, 1, [0.6]);
backgroundActor.connect('notify::size', function(actor) {
actor.set_uniform_float('pixel_step', 2, 1, [1/actor.width, 1/actor.height]);
});
this._background = new St.Bin({ style_class: 'screen-shield-background', this._background = new St.Bin({ style_class: 'screen-shield-background',
child: backgroundActor }); child: backgroundActor });
this._lockScreenGroup.add_actor(this._background); this._lockScreenGroup.add_actor(this._background);