From 442d8c3f2e2246187468bcebcb4de287181785d4 Mon Sep 17 00:00:00 2001 From: Chris Lord Date: Thu, 3 Feb 2011 14:36:55 +0000 Subject: [PATCH] offscreen-effect: Use actor's opacity_override when redirecting painting Override the actor's paint opacity so that it will appear fully opaque in the offscreen surface. This avoids multiple multiplications of an actor's opacity. Fixes http://bugzilla.clutter-project.org/show_bug.cgi?id=2541 --- clutter/clutter-offscreen-effect.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/clutter/clutter-offscreen-effect.c b/clutter/clutter-offscreen-effect.c index b6e690097..db8da6a8e 100644 --- a/clutter/clutter-offscreen-effect.c +++ b/clutter/clutter-offscreen-effect.c @@ -251,6 +251,12 @@ clutter_offscreen_effect_pre_paint (ClutterEffect *effect) cogl_push_matrix (); + /* Override the actor's opacity to fully opaque - we paint the offscreen + * texture with the actor's paint opacity, so we need to do this to avoid + * multiplying the opacity twice. + */ + _clutter_actor_set_opacity_override (priv->actor, 0xff); + return TRUE; } @@ -307,6 +313,9 @@ clutter_offscreen_effect_post_paint (ClutterEffect *effect) cogl_matrix_translate (&modelview, priv->x_offset, priv->y_offset, 0.0f); cogl_set_modelview_matrix (&modelview); + /* Remove the opacity override */ + _clutter_actor_set_opacity_override (priv->actor, -1); + /* paint the target material; this is virtualized for * sub-classes that require special hand-holding */