[gnome-shell] st-shadows: Use a template material when creating shadows



commit 1034798969ff69bf6467941e1bc7b3b81bc92fee
Author: Florian Müllner <fmuellner gnome org>
Date:   Sat Sep 11 23:54:27 2010 +0200

    st-shadows: Use a template material when creating shadows
    
    To avoid recompiling shadows each time a new shadow is created,
    use a copy of a static template material.
    
    See http://bugzilla.clutter-project.org/show_bug.cgi?id=2280#c5.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=629383

 src/st/st-private.c |   24 +++++++++++++++---------
 1 files changed, 15 insertions(+), 9 deletions(-)
---
diff --git a/src/st/st-private.c b/src/st/st-private.c
index 2376352..264ed72 100644
--- a/src/st/st-private.c
+++ b/src/st/st-private.c
@@ -364,6 +364,8 @@ CoglHandle
 _st_create_shadow_material (StShadow   *shadow_spec,
                             CoglHandle  src_texture)
 {
+  static CoglHandle shadow_material_template = COGL_INVALID_HANDLE;
+
   CoglHandle  material;
   CoglHandle  texture;
   guchar     *pixels_in, *pixels_out;
@@ -483,17 +485,21 @@ _st_create_shadow_material (StShadow   *shadow_spec,
   g_free (pixels_in);
   g_free (pixels_out);
 
-  material = cogl_material_new ();
-
-  cogl_material_set_layer (material, 0, texture);
+  if (G_UNLIKELY (shadow_material_template == COGL_INVALID_HANDLE))
+    {
+      shadow_material_template = cogl_material_new ();
+
+      /* We set up the material to blend the shadow texture with the combine
+       * constant, but defer setting the latter until painting, so that we can
+       * take the actor's overall opacity into account. */
+      cogl_material_set_layer_combine (shadow_material_template, 0,
+                                       "RGBA = MODULATE (CONSTANT, TEXTURE[A])",
+                                       NULL);
+    }
 
-  /* We set up the material to blend the shadow texture with the combine
-   * constant, but defer setting the latter until painting, so that we can
-   * take the actor's overall opacity into account. */
-  cogl_material_set_layer_combine (material, 0,
-                                   "RGBA = MODULATE (CONSTANT, TEXTURE[A])",
-                                   NULL);
+  material = cogl_material_copy (shadow_material_template);
 
+  cogl_material_set_layer (material, 0, texture);
 
   cogl_handle_unref (texture);
 



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