compositor: Avoid changing pipeline/source if shadow is not being painted

Avoids some context invalidations in cogl.

https://bugzilla.gnome.org/show_bug.cgi?id=782344


(cherry picked from commit 3c6a518d40)
This commit is contained in:
Carlos Garnacho 2017-05-07 01:00:10 +00:00 committed by Marco Trevisan
parent 0f9eb6566f
commit 4af8d9d475

View File

@ -220,9 +220,7 @@ meta_shadow_paint (MetaShadow *shadow,
int dest_x[4]; int dest_x[4];
int dest_y[4]; int dest_y[4];
int n_x, n_y; int n_x, n_y;
gboolean source_updated = FALSE;
cogl_pipeline_set_color4ub (shadow->pipeline,
opacity, opacity, opacity, opacity);
cogl_set_source (shadow->pipeline); cogl_set_source (shadow->pipeline);
@ -300,6 +298,17 @@ meta_shadow_paint (MetaShadow *shadow,
else else
overlap = CAIRO_REGION_OVERLAP_IN; overlap = CAIRO_REGION_OVERLAP_IN;
if (overlap == CAIRO_REGION_OVERLAP_OUT)
continue;
if (!source_updated)
{
cogl_pipeline_set_color4ub (shadow->pipeline,
opacity, opacity, opacity, opacity);
cogl_set_source (shadow->pipeline);
source_updated = TRUE;
}
/* There's quite a bit of overhead from allocating a new /* There's quite a bit of overhead from allocating a new
* region in order to find an exact intersection and * region in order to find an exact intersection and
* generating more geometry - we make the assumption that * generating more geometry - we make the assumption that