From 060543466c4cb55557734fc03b40e09ecb086e16 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Sun, 7 May 2017 03:00:10 +0200 Subject: [PATCH] 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 --- src/compositor/meta-shadow-factory.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/compositor/meta-shadow-factory.c b/src/compositor/meta-shadow-factory.c index cd006008b..33b9741bc 100644 --- a/src/compositor/meta-shadow-factory.c +++ b/src/compositor/meta-shadow-factory.c @@ -220,11 +220,7 @@ meta_shadow_paint (MetaShadow *shadow, int dest_x[4]; int dest_y[4]; int n_x, n_y; - - cogl_pipeline_set_color4ub (shadow->pipeline, - opacity, opacity, opacity, opacity); - - cogl_set_source (shadow->pipeline); + gboolean source_updated = FALSE; if (shadow->scale_width) { @@ -300,6 +296,17 @@ meta_shadow_paint (MetaShadow *shadow, else 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 * region in order to find an exact intersection and * generating more geometry - we make the assumption that