[mutter/gnome-3-10] background: Do not assume GLSL is available



commit 72ec20e48f085af729c5b0afdd78d259694a052a
Author: Adel Gadllah <adel gadllah gmail com>
Date:   Thu Jul 24 15:39:26 2014 +0200

    background: Do not assume GLSL is available
    
    Some hardware does not support it causing crashes in cogl during paint.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=733623

 src/compositor/meta-background.c |   17 ++++++++++++++++-
 1 files changed, 16 insertions(+), 1 deletions(-)
---
diff --git a/src/compositor/meta-background.c b/src/compositor/meta-background.c
index 6eee159..ae6f459 100644
--- a/src/compositor/meta-background.c
+++ b/src/compositor/meta-background.c
@@ -501,7 +501,8 @@ set_brightness (MetaBackground *self,
 
   priv->brightness = brightness;
 
-  if (priv->effects & META_BACKGROUND_EFFECTS_VIGNETTE)
+  if (clutter_feature_available (CLUTTER_FEATURE_SHADERS_GLSL) &&
+      priv->effects & META_BACKGROUND_EFFECTS_VIGNETTE)
     {
       ensure_pipeline (self);
       cogl_pipeline_set_uniform_1f (priv->pipeline,
@@ -509,6 +510,14 @@ set_brightness (MetaBackground *self,
                                                                         "brightness"),
                                     priv->brightness);
     }
+  else
+    {
+      ensure_pipeline (self);
+      CoglColor blend_color;
+      cogl_color_init_from_4f (&blend_color, brightness, brightness, brightness, 1.0);
+      cogl_pipeline_set_layer_combine (priv->pipeline, 1, "RGB=MODULATE(PREVIOUS, CONSTANT) 
A=REPLACE(PREVIOUS)", NULL);
+      cogl_pipeline_set_layer_combine_constant (priv->pipeline, 1, &blend_color);
+    }
 
   clutter_content_invalidate (CLUTTER_CONTENT (self));
 
@@ -526,6 +535,9 @@ set_vignette_sharpness (MetaBackground *self,
 
   priv->vignette_sharpness = sharpness;
 
+  if (!clutter_feature_available (CLUTTER_FEATURE_SHADERS_GLSL))
+    return;
+
   if (priv->effects & META_BACKGROUND_EFFECTS_VIGNETTE)
     {
       ensure_pipeline (self);
@@ -546,6 +558,9 @@ add_vignette (MetaBackground *self)
   MetaBackgroundPrivate *priv = self->priv;
   static CoglSnippet *snippet = NULL;
 
+  if (!clutter_feature_available (CLUTTER_FEATURE_SHADERS_GLSL))
+    return;
+
   ensure_pipeline (self);
 
   /* Cogl automatically caches pipelines with no eviction policy,


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]