[cairo] [PATCH 2/3] gl: Track the VBO size as a property of the ctx

Bryce Harrington bryce at osg.samsung.com
Thu Jul 31 18:51:34 PDT 2014


Change suggested by Chris Wilson.  This will enable setting different
vbo sizes for GL vs. EGL.

Signed-off-by: Bryce Harrington <bryce at osg.samsung.com>
---
 src/cairo-gl-composite.c |    3 ++-
 src/cairo-gl-device.c    |    4 +++-
 src/cairo-gl-info.c      |   22 ++++++++++------------
 src/cairo-gl-private.h   |    3 ++-
 4 files changed, 17 insertions(+), 15 deletions(-)

diff --git a/src/cairo-gl-composite.c b/src/cairo-gl-composite.c
index 65b0f26..b50f9a7 100644
--- a/src/cairo-gl-composite.c
+++ b/src/cairo-gl-composite.c
@@ -875,7 +875,8 @@ _cairo_gl_composite_prepare_buffer (cairo_gl_context_t *ctx,
 	ctx->primitive_type = primitive_type;
     }
 
-    if (ctx->vb_offset + n_vertices * ctx->vertex_size > _cairo_gl_get_vbo_size())
+    assert(ctx->vbo_size > 0);
+    if (ctx->vb_offset + n_vertices * ctx->vertex_size > ctx->vbo_size)
 	_cairo_gl_composite_flush (ctx);
 }
 
diff --git a/src/cairo-gl-device.c b/src/cairo-gl-device.c
index dc2b6d6..7235d9a 100644
--- a/src/cairo-gl-device.c
+++ b/src/cairo-gl-device.c
@@ -297,7 +297,9 @@ _cairo_gl_context_init (cairo_gl_context_t *ctx)
     if (unlikely (status))
         return status;
 
-    ctx->vb = malloc (_cairo_gl_get_vbo_size());
+    ctx->vbo_size = _cairo_gl_get_vbo_size();
+
+    ctx->vb = malloc (ctx->vbo_size);
     if (unlikely (ctx->vb == NULL)) {
 	    _cairo_cache_fini (&ctx->gradients);
 	    return _cairo_error (CAIRO_STATUS_NO_MEMORY);
diff --git a/src/cairo-gl-info.c b/src/cairo-gl-info.c
index c47033e..66b0b50 100644
--- a/src/cairo-gl-info.c
+++ b/src/cairo-gl-info.c
@@ -73,21 +73,19 @@ _cairo_gl_get_flavor (void)
     return flavor;
 }
 
-long
+unsigned long
 _cairo_gl_get_vbo_size (void)
 {
-    static long vbo_size = -1;
+    unsigned long vbo_size;
 
-    if (vbo_size < 0) {
-        const char *env = getenv ("CAIRO_GL_VBO_SIZE");
-        if (env == NULL) {
-            vbo_size = CAIRO_GL_VBO_SIZE_DEFAULT;
-	} else {
-	    errno = 0;
-	    vbo_size = strtol (env, NULL, 10);
-	    assert (errno == 0);
-	    assert (vbo_size > 0);
-	}
+    const char *env = getenv ("CAIRO_GL_VBO_SIZE");
+    if (env == NULL) {
+        vbo_size = CAIRO_GL_VBO_SIZE_DEFAULT;
+    } else {
+	errno = 0;
+	vbo_size = strtol (env, NULL, 10);
+	assert (errno == 0);
+	assert (vbo_size > 0);
     }
 
     return vbo_size;
diff --git a/src/cairo-gl-private.h b/src/cairo-gl-private.h
index 79b67a5..c1104b6 100644
--- a/src/cairo-gl-private.h
+++ b/src/cairo-gl-private.h
@@ -362,6 +362,7 @@ struct _cairo_gl_context {
     cairo_gl_operand_t operands[2];
     cairo_bool_t spans;
 
+    unsigned int vbo_size;
     unsigned int vb_offset;
     unsigned int vertex_size;
     cairo_region_t *clip_region;
@@ -703,7 +704,7 @@ _cairo_gl_get_version (void);
 cairo_private cairo_gl_flavor_t
 _cairo_gl_get_flavor (void);
 
-cairo_private long
+cairo_private unsigned long
 _cairo_gl_get_vbo_size (void);
 
 cairo_private cairo_bool_t
-- 
1.7.9.5



More information about the cairo mailing list