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
This commit is contained in:
Adel Gadllah 2014-07-24 15:39:26 +02:00
parent 6c22759d29
commit 37652ca2cf

View File

@ -498,7 +498,8 @@ set_brightness (MetaBackground *self,
priv->brightness = brightness; 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); ensure_pipeline (self);
cogl_pipeline_set_uniform_1f (priv->pipeline, cogl_pipeline_set_uniform_1f (priv->pipeline,
@ -506,6 +507,14 @@ set_brightness (MetaBackground *self,
"brightness"), "brightness"),
priv->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)); clutter_content_invalidate (CLUTTER_CONTENT (self));
@ -523,6 +532,9 @@ set_vignette_sharpness (MetaBackground *self,
priv->vignette_sharpness = sharpness; priv->vignette_sharpness = sharpness;
if (!clutter_feature_available (CLUTTER_FEATURE_SHADERS_GLSL))
return;
if (priv->effects & META_BACKGROUND_EFFECTS_VIGNETTE) if (priv->effects & META_BACKGROUND_EFFECTS_VIGNETTE)
{ {
ensure_pipeline (self); ensure_pipeline (self);
@ -543,6 +555,9 @@ add_vignette (MetaBackground *self)
MetaBackgroundPrivate *priv = self->priv; MetaBackgroundPrivate *priv = self->priv;
static CoglSnippet *snippet = NULL; static CoglSnippet *snippet = NULL;
if (!clutter_feature_available (CLUTTER_FEATURE_SHADERS_GLSL))
return;
ensure_pipeline (self); ensure_pipeline (self);
/* Cogl automatically caches pipelines with no eviction policy, /* Cogl automatically caches pipelines with no eviction policy,