[gnome-shell] st_theme_node_prerender_shadow: guard against failure to allocate a texture
- From: Owen Taylor <otaylor src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] st_theme_node_prerender_shadow: guard against failure to allocate a texture
- Date: Tue, 27 Oct 2015 19:52:36 +0000 (UTC)
commit 8b7464c6487faeab7ad4862d8ac20b2b421036ca
Author: Owen W. Taylor <otaylor fishsoup net>
Date: Mon Oct 26 13:35:49 2015 -0400
st_theme_node_prerender_shadow: guard against failure to allocate a texture
If we are trying to render a shadow at a size that is very large in one
direction, but small in the other direction (so that we don't 9-slice
the texture), then allocating the backing texture for the offscreen
buffer may fail due to texture-size limits. Don't crash in that case.
https://bugzilla.gnome.org/show_bug.cgi?id=757150
src/st/st-theme-node-drawing.c | 9 ++++++---
1 files changed, 6 insertions(+), 3 deletions(-)
---
diff --git a/src/st/st-theme-node-drawing.c b/src/st/st-theme-node-drawing.c
index 95386dc..9ce5683 100644
--- a/src/st/st-theme-node-drawing.c
+++ b/src/st/st-theme-node-drawing.c
@@ -2162,7 +2162,7 @@ st_theme_node_prerender_shadow (StThemeNodePaintState *state)
guint border_radius[4];
int max_borders[4];
int center_radius, corner_id;
- CoglHandle buffer, offscreen;
+ CoglHandle buffer, offscreen = COGL_INVALID_HANDLE;
/* Get infos from the node */
if (state->alloc_width < node->box_shadow_min_width ||
@@ -2203,7 +2203,8 @@ st_theme_node_prerender_shadow (StThemeNodePaintState *state)
state->box_shadow_height,
COGL_TEXTURE_NO_SLICING,
COGL_PIXEL_FORMAT_ANY);
- offscreen = cogl_offscreen_new_with_texture (buffer);
+ if (buffer != COGL_INVALID_HANDLE)
+ offscreen = cogl_offscreen_new_with_texture (buffer);
if (offscreen != COGL_INVALID_HANDLE)
{
@@ -2220,7 +2221,9 @@ st_theme_node_prerender_shadow (StThemeNodePaintState *state)
state->box_shadow_pipeline = _st_create_shadow_pipeline (st_theme_node_get_box_shadow (node),
buffer);
}
- cogl_handle_unref (buffer);
+
+ if (buffer != COGL_INVALID_HANDLE)
+ cogl_handle_unref (buffer);
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]