[gnome-shell] st-shadows: Use a template material when creating shadows
- From: Florian Müllner <fmuellner src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] st-shadows: Use a template material when creating shadows
- Date: Mon, 13 Sep 2010 16:12:25 +0000 (UTC)
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]