From 7155d7e043e8d855ffe62bc844af6bacea21f851 Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Mon, 13 Jan 2014 13:24:30 -0500 Subject: [PATCH] Properly set the number of components on the CoglTextureRectangle We need to set the number of components on the CoglTextureRectangle to prevent wasting too much GPU memory. As we need to do this before we call cogl_texture_set_region, just remove the meta_texture_rectangle_new wrapper, and make callers call cogl_texture_rectangle_new_with_size directly. --- src/compositor/meta-texture-rectangle.c | 30 ------------------------- src/compositor/meta-texture-rectangle.h | 7 ------ src/compositor/meta-texture-tower.c | 12 ++++------ src/compositor/meta-window-actor.c | 15 ++++++++++--- 4 files changed, 16 insertions(+), 48 deletions(-) diff --git a/src/compositor/meta-texture-rectangle.c b/src/compositor/meta-texture-rectangle.c index 450155d95..cd585b51f 100644 --- a/src/compositor/meta-texture-rectangle.c +++ b/src/compositor/meta-texture-rectangle.c @@ -26,36 +26,6 @@ #include #include "meta-texture-rectangle.h" -CoglTexture * -meta_texture_rectangle_new (unsigned int width, - unsigned int height, - CoglPixelFormat format, - unsigned int rowstride, - const guint8 *data) -{ - ClutterBackend *backend = - clutter_get_default_backend (); - CoglContext *context = - clutter_backend_get_cogl_context (backend); - CoglTextureRectangle *tex_rect; - - tex_rect = cogl_texture_rectangle_new_with_size (context, width, height); - if (tex_rect == NULL) - return NULL; - - if (data) - cogl_texture_set_region (COGL_TEXTURE (tex_rect), - 0, 0, /* src_x/y */ - 0, 0, /* dst_x/y */ - width, height, /* dst_width/height */ - width, height, /* width/height */ - format, - rowstride, - data); - - return COGL_TEXTURE (tex_rect); -} - static void texture_rectangle_check_cb (CoglTexture *sub_texture, const float *sub_texture_coords, diff --git a/src/compositor/meta-texture-rectangle.h b/src/compositor/meta-texture-rectangle.h index 7b84229f5..ba2624f52 100644 --- a/src/compositor/meta-texture-rectangle.h +++ b/src/compositor/meta-texture-rectangle.h @@ -28,13 +28,6 @@ G_BEGIN_DECLS -CoglTexture * -meta_texture_rectangle_new (unsigned int width, - unsigned int height, - CoglPixelFormat format, - unsigned int rowstride, - const guint8 *data); - gboolean meta_texture_rectangle_check (CoglTexture *texture); diff --git a/src/compositor/meta-texture-tower.c b/src/compositor/meta-texture-tower.c index a53147f3f..0fd5f5f70 100644 --- a/src/compositor/meta-texture-tower.c +++ b/src/compositor/meta-texture-tower.c @@ -355,14 +355,10 @@ texture_tower_create_texture (MetaTextureTower *tower, if ((!is_power_of_two (width) || !is_power_of_two (height)) && meta_texture_rectangle_check (tower->textures[level - 1])) { - tower->textures[level] = - meta_texture_rectangle_new (width, height, - /* data format */ - TEXTURE_FORMAT, - /* rowstride */ - width * 4, - /* data */ - NULL); + ClutterBackend *backend = clutter_get_default_backend (); + CoglContext *context = clutter_backend_get_cogl_context (backend); + + tower->textures[level] = cogl_texture_rectangle_new_with_size (context, width, height); } else { diff --git a/src/compositor/meta-window-actor.c b/src/compositor/meta-window-actor.c index d5c1a4e8b..f45bd53ad 100644 --- a/src/compositor/meta-window-actor.c +++ b/src/compositor/meta-window-actor.c @@ -2172,9 +2172,18 @@ build_and_scan_frame_mask (MetaWindowActor *self, if (meta_texture_rectangle_check (paint_tex)) { - mask_texture = meta_texture_rectangle_new (tex_width, tex_height, - COGL_PIXEL_FORMAT_A_8, - stride, mask_data); + ClutterBackend *backend = clutter_get_default_backend (); + CoglContext *context = clutter_backend_get_cogl_context (backend); + + mask_texture = COGL_TEXTURE (cogl_texture_rectangle_new_with_size (context, tex_width, tex_height)); + cogl_texture_set_components (mask_texture, COGL_TEXTURE_COMPONENTS_A); + cogl_texture_set_region (mask_texture, + 0, 0, /* src_x/y */ + 0, 0, /* dst_x/y */ + tex_width, tex_height, /* dst_width/height */ + tex_width, tex_height, /* width/height */ + COGL_PIXEL_FORMAT_A_8, + stride, mask_data); } else {