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
This commit is contained in:
parent
862f1ea18c
commit
1034798969
@ -364,6 +364,8 @@ CoglHandle
|
|||||||
_st_create_shadow_material (StShadow *shadow_spec,
|
_st_create_shadow_material (StShadow *shadow_spec,
|
||||||
CoglHandle src_texture)
|
CoglHandle src_texture)
|
||||||
{
|
{
|
||||||
|
static CoglHandle shadow_material_template = COGL_INVALID_HANDLE;
|
||||||
|
|
||||||
CoglHandle material;
|
CoglHandle material;
|
||||||
CoglHandle texture;
|
CoglHandle texture;
|
||||||
guchar *pixels_in, *pixels_out;
|
guchar *pixels_in, *pixels_out;
|
||||||
@ -483,17 +485,21 @@ _st_create_shadow_material (StShadow *shadow_spec,
|
|||||||
g_free (pixels_in);
|
g_free (pixels_in);
|
||||||
g_free (pixels_out);
|
g_free (pixels_out);
|
||||||
|
|
||||||
material = cogl_material_new ();
|
if (G_UNLIKELY (shadow_material_template == COGL_INVALID_HANDLE))
|
||||||
|
{
|
||||||
cogl_material_set_layer (material, 0, texture);
|
shadow_material_template = cogl_material_new ();
|
||||||
|
|
||||||
/* We set up the material to blend the shadow texture with the combine
|
/* 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
|
* constant, but defer setting the latter until painting, so that we can
|
||||||
* take the actor's overall opacity into account. */
|
* take the actor's overall opacity into account. */
|
||||||
cogl_material_set_layer_combine (material, 0,
|
cogl_material_set_layer_combine (shadow_material_template, 0,
|
||||||
"RGBA = MODULATE (CONSTANT, TEXTURE[A])",
|
"RGBA = MODULATE (CONSTANT, TEXTURE[A])",
|
||||||
NULL);
|
NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
material = cogl_material_copy (shadow_material_template);
|
||||||
|
|
||||||
|
cogl_material_set_layer (material, 0, texture);
|
||||||
|
|
||||||
cogl_handle_unref (texture);
|
cogl_handle_unref (texture);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user