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



commit f72f431a99a584fd666916d7ea9bc5ff1935580b
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 4337f70..6c58e76 100644
--- a/src/compositor/meta-background.c
+++ b/src/compositor/meta-background.c
@@ -500,7 +500,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,
@@ -508,6 +509,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));
 
@@ -525,6 +534,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);
@@ -545,6 +557,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]