[Cogl] [PATCH 2/2] Add a context member to CoglPath

Robert Bragg robert at sixbynine.org
Mon Apr 16 10:13:30 PDT 2012


Cool, both of these patches look good to me.

Reviewed-by: Robert Bragg <robert at linux.intel.com>

On Mon, Apr 16, 2012 at 1:21 PM, Neil Roberts <neil at linux.intel.com> wrote:
> cogl_path_new now takes a CoglContext pointer which it keeps a pointer
> to instead of relying on the global context.
> ---
>  cogl-pango/cogl-pango-display-list.c |    4 +++-
>  cogl/cogl-path-private.h             |    2 ++
>  cogl/cogl-path.c                     |   24 +++++++++++-------------
>  cogl/cogl-path.h                     |    4 +++-
>  tests/conform/test-path.c            |   10 +++++-----
>  5 files changed, 24 insertions(+), 20 deletions(-)
>
> diff --git a/cogl-pango/cogl-pango-display-list.c b/cogl-pango/cogl-pango-display-list.c
> index 6800c6c..72df3f4 100644
> --- a/cogl-pango/cogl-pango-display-list.c
> +++ b/cogl-pango/cogl-pango-display-list.c
> @@ -440,6 +440,8 @@ _cogl_pango_display_list_render (CoglPangoDisplayList *dl,
>             float points[8];
>             CoglPath *path;
>
> +            _COGL_GET_CONTEXT (ctx, NO_RETVAL);
> +
>             points[0] =  node->d.trapezoid.x_11;
>             points[1] =  node->d.trapezoid.y_1;
>             points[2] =  node->d.trapezoid.x_12;
> @@ -449,7 +451,7 @@ _cogl_pango_display_list_render (CoglPangoDisplayList *dl,
>             points[6] =  node->d.trapezoid.x_21;
>             points[7] =  node->d.trapezoid.y_1;
>
> -            path = cogl_path_new ();
> +            path = cogl_path_new (ctx);
>             cogl_path_polygon (path, points, 4);
>             cogl_path_fill (path);
>             cogl_object_unref (path);
> diff --git a/cogl/cogl-path-private.h b/cogl/cogl-path-private.h
> index fd2e1de..c64aa4b 100644
> --- a/cogl/cogl-path-private.h
> +++ b/cogl/cogl-path-private.h
> @@ -70,6 +70,8 @@ struct _CoglPathData
>  {
>   unsigned int         ref_count;
>
> +  CoglContext         *context;
> +
>   CoglPathFillRule     fill_rule;
>
>   GArray              *path_nodes;
> diff --git a/cogl/cogl-path.c b/cogl/cogl-path.c
> index 571114b..ec22a2d 100644
> --- a/cogl/cogl-path.c
> +++ b/cogl/cogl-path.c
> @@ -96,6 +96,8 @@ _cogl_path_data_unref (CoglPathData *data)
>
>       g_array_free (data->path_nodes, TRUE);
>
> +      cogl_object_unref (data->context);
> +
>       g_slice_free (CoglPathData, data);
>     }
>  }
> @@ -122,6 +124,7 @@ _cogl_path_modify (CoglPath *path)
>       path->data->fill_attribute_buffer = NULL;
>       path->data->stroke_attribute_buffer = NULL;
>       path->data->ref_count = 1;
> +      cogl_object_ref (path->data->context);
>
>       _cogl_path_data_unref (old_data);
>     }
> @@ -209,8 +212,6 @@ _cogl_path_stroke_nodes (CoglPath *path)
>   int path_num = 0;
>   CoglPathNode *node;
>
> -  _COGL_GET_CONTEXT (ctx, NO_RETVAL);
> -
>   source = cogl_get_source ();
>
>   if (cogl_pipeline_get_n_layers (source) != 0)
> @@ -276,9 +277,8 @@ _cogl_path_fill_nodes_with_clipped_rectangle (CoglPath *path)
>  {
>   CoglFramebuffer *fb;
>
> -  _COGL_GET_CONTEXT (ctx, NO_RETVAL);
> -
> -  if (!(ctx->private_feature_flags & COGL_PRIVATE_FEATURE_STENCIL_BUFFER))
> +  if (!(path->data->context->private_feature_flags &
> +        COGL_PRIVATE_FEATURE_STENCIL_BUFFER))
>     {
>       static gboolean seen_warning = FALSE;
>
> @@ -868,7 +868,7 @@ cogl_path_rel_curve_to (CoglPath *path,
>  }
>
>  CoglPath *
> -cogl_path_new (void)
> +cogl_path_new (CoglContext *context)
>  {
>   CoglPath *path;
>   CoglPathData *data;
> @@ -877,6 +877,7 @@ cogl_path_new (void)
>   data = path->data = g_slice_new (CoglPathData);
>
>   data->ref_count = 1;
> +  data->context = cogl_object_ref (context);
>   data->fill_rule = COGL_PATH_FILL_RULE_EVEN_ODD;
>   data->path_nodes = g_array_new (FALSE, FALSE, sizeof (CoglPathNode));
>   data->last_path = 0;
> @@ -1267,8 +1268,6 @@ _cogl_path_build_fill_attribute_buffer (CoglPath *path)
>   CoglPathData *data = path->data;
>   int i;
>
> -  _COGL_GET_CONTEXT (ctx, NO_RETVAL);
> -
>   /* If we've already got a vbo then we don't need to do anything */
>   if (data->fill_attribute_buffer)
>     return;
> @@ -1354,7 +1353,7 @@ _cogl_path_build_fill_attribute_buffer (CoglPath *path)
>   gluDeleteTess (tess.glu_tess);
>
>   data->fill_attribute_buffer =
> -    cogl_attribute_buffer_new (ctx,
> +    cogl_attribute_buffer_new (data->context,
>                                sizeof (CoglPathTesselatorVertex) *
>                                tess.vertices->len,
>                                tess.vertices->data);
> @@ -1375,7 +1374,7 @@ _cogl_path_build_fill_attribute_buffer (CoglPath *path)
>                         2, /* n_components */
>                         COGL_ATTRIBUTE_TYPE_FLOAT);
>
> -  data->fill_vbo_indices = cogl_indices_new (ctx,
> +  data->fill_vbo_indices = cogl_indices_new (data->context,
>                                              tess.indices_type,
>                                              tess.indices->data,
>                                              tess.indices->len);
> @@ -1394,14 +1393,13 @@ _cogl_path_build_stroke_attribute_buffer (CoglPath *path)
>   floatVec2 *buffer_p;
>   unsigned int i;
>
> -  _COGL_GET_CONTEXT (ctx, NO_RETVAL);
> -
>   /* If we've already got a cached vbo then we don't need to do anything */
>   if (data->stroke_attribute_buffer)
>     return;
>
>   data->stroke_attribute_buffer =
> -    cogl_attribute_buffer_new (ctx, data->path_nodes->len * sizeof (floatVec2),
> +    cogl_attribute_buffer_new (data->context,
> +                               data->path_nodes->len * sizeof (floatVec2),
>                                NULL);
>
>   buffer = COGL_BUFFER (data->stroke_attribute_buffer);
> diff --git a/cogl/cogl-path.h b/cogl/cogl-path.h
> index 5ab976f..c0973cf 100644
> --- a/cogl/cogl-path.h
> +++ b/cogl/cogl-path.h
> @@ -29,6 +29,7 @@
>  #define __COGL_PATH_H__
>
>  #include <cogl/cogl-types.h>
> +#include <cogl/cogl-context.h>
>
>  G_BEGIN_DECLS
>
> @@ -57,6 +58,7 @@ typedef struct _CoglPath CoglPath;
>
>  /**
>  * cogl_path_new:
> + * @context: A #CoglContext pointer
>  *
>  * Creates a new, empty path object. The default fill rule is
>  * %COGL_PATH_FILL_RULE_EVEN_ODD.
> @@ -67,7 +69,7 @@ typedef struct _CoglPath CoglPath;
>  * Since: 2.0
>  */
>  CoglPath *
> -cogl_path_new (void);
> +cogl_path_new (CoglContext *context);
>
>  /**
>  * cogl_path_copy:
> diff --git a/tests/conform/test-path.c b/tests/conform/test-path.c
> index 67f433e..b5f604e 100644
> --- a/tests/conform/test-path.c
> +++ b/tests/conform/test-path.c
> @@ -76,7 +76,7 @@ paint (TestState *state)
>
>   /* Create a path filling just a quarter of a block. It will use two
>      rectangles so that we have a sub path in the path */
> -  path_a = cogl_path_new ();
> +  path_a = cogl_path_new (test_ctx);
>   cogl_path_rectangle (path_a,
>                        BLOCK_SIZE * 3 / 4, BLOCK_SIZE / 2,
>                        BLOCK_SIZE, BLOCK_SIZE);
> @@ -86,7 +86,7 @@ paint (TestState *state)
>   draw_path_at (path_a, 0, 0);
>
>   /* Create another path filling the whole block */
> -  path_b = cogl_path_new ();
> +  path_b = cogl_path_new (test_ctx);
>   cogl_path_rectangle (path_b, 0, 0, BLOCK_SIZE, BLOCK_SIZE);
>   draw_path_at (path_b, 1, 0);
>
> @@ -129,7 +129,7 @@ paint (TestState *state)
>
>   /* Draw a self-intersecting path. The part that intersects should be
>      inverted */
> -  path_a = cogl_path_new ();
> +  path_a = cogl_path_new (test_ctx);
>   cogl_path_rectangle (path_a, 0, 0, BLOCK_SIZE, BLOCK_SIZE);
>   cogl_path_line_to (path_a, 0, BLOCK_SIZE / 2);
>   cogl_path_line_to (path_a, BLOCK_SIZE / 2, BLOCK_SIZE / 2);
> @@ -140,7 +140,7 @@ paint (TestState *state)
>
>   /* Draw two sub paths. Where the paths intersect it should be
>      inverted */
> -  path_a = cogl_path_new ();
> +  path_a = cogl_path_new (test_ctx);
>   cogl_path_rectangle (path_a, 0, 0, BLOCK_SIZE, BLOCK_SIZE);
>   cogl_path_rectangle (path_a,
>                        BLOCK_SIZE / 2, BLOCK_SIZE / 2, BLOCK_SIZE, BLOCK_SIZE);
> @@ -148,7 +148,7 @@ paint (TestState *state)
>   cogl_object_unref (path_a);
>
>   /* Draw a clockwise outer path */
> -  path_a = cogl_path_new ();
> +  path_a = cogl_path_new (test_ctx);
>   cogl_path_move_to (path_a, 0, 0);
>   cogl_path_line_to (path_a, BLOCK_SIZE, 0);
>   cogl_path_line_to (path_a, BLOCK_SIZE, BLOCK_SIZE);
> --
> 1.7.3.16.g9464b
>
> _______________________________________________
> Cogl mailing list
> Cogl at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/cogl


More information about the Cogl mailing list