[patch] gl: set tex_with in cairo_gl_gradient_t instead in cairo_entry.size

"Henry (Yu) Song - SISA" <[email protected]>
Newsgroups gmane.comp.lib.cairo
Message-ID <3955FA337689574EB32F94B12A7E6E9E2482E538@sisaex01sj>
From 18e714f260f18e6ae13979a289b6f7892d7f82c2 Mon Sep 17 00:00:00 2001
From: Henry Song <[email protected]>
Date: Mon, 5 Nov 2012 13:16:18 -0800
Subject: [PATCH] gl: add tex_width in cairo_gl_gradient_t structure, there is
 no need to set cache_entry.size to be tex_width, this makes
 it unlikely overflows gradient cache

---
 src/cairo-gl-gradient-private.h |    1 +
 src/cairo-gl-gradient.c         |    3 ++-
 src/cairo-gl-operand.c          |    2 +-
 3 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/cairo-gl-gradient-private.h b/src/cairo-gl-gradient-private.h
index 77f9bbd..c76c7b2 100644
--- a/src/cairo-gl-gradient-private.h
+++ b/src/cairo-gl-gradient-private.h
@@ -69,6 +69,7 @@ typedef struct _cairo_gl_gradient {
     cairo_reference_count_t       ref_count;
     cairo_device_t               *device; /* NB: we don't hold a reference */
     GLuint                        tex;
+    int                           tex_width;
     unsigned int              n_stops;
     const cairo_gradient_stop_t  *stops;
     cairo_gradient_stop_t         stops_embedded[1];
diff --git a/src/cairo-gl-gradient.c b/src/cairo-gl-gradient.c
index 1c1f972..3ceb3ed 100644
--- a/src/cairo-gl-gradient.c
+++ b/src/cairo-gl-gradient.c
@@ -258,7 +258,8 @@ _cairo_gl_gradient_create (cairo_gl_context_t           *ctx,

     CAIRO_REFERENCE_COUNT_INIT (&gradient->ref_count, 2);
     gradient->cache_entry.hash = hash;
-    gradient->cache_entry.size = tex_width;
+    gradient->cache_entry.size = sizeof (cairo_gl_gradient_t *);
+    gradient->tex_width = tex_width;
     gradient->device = &ctx->base;
     gradient->n_stops = n_stops;
     gradient->stops = gradient->stops_embedded;
diff --git a/src/cairo-gl-operand.c b/src/cairo-gl-operand.c
index ee6c08e..e9191aa 100644
--- a/src/cairo-gl-operand.c
+++ b/src/cairo-gl-operand.c
@@ -686,7 +686,7 @@ _cairo_gl_operand_bind_to_shader (cairo_gl_context_t *ctx,
         height = operand->texture.surface->height;
         }
         else {
-        width = operand->gradient.gradient->cache_entry.size,
+        width = operand->gradient.gradient->tex_width,
         height = 1;
         }
         strcpy (custom_part, "_texdims");
--
1.7.9.5

-- 
cairo mailing list
[email protected]
http://lists.cairographics.org/mailman/listinfo/cairo
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.