[Cogl] [PATCH 1/4] bitmap: Store a pointer to the context
Robert Bragg
robert at sixbynine.org
Wed Apr 4 09:19:44 PDT 2012
Reviewed-by: Robert Bragg <robert at linux.intel.com>
On Wed, Apr 4, 2012 at 5:13 PM, Neil Roberts <neil at linux.intel.com> wrote:
> This adds a context member to CoglBitmap which stores the context it
> was created with. That way it can be used in texture constructors
> which use a bitmap. There is also an internal private function to get
> the context out of the bitmap which all of the texture constructors
> now use. _cogl_texture_3d_new_from_bitmap has had its context
> parameter removed so that it more closely matches the other bitmap
> constructors.
> ---
> cogl/cogl-atlas-texture.c | 2 --
> cogl/cogl-bitmap-private.h | 3 +++
> cogl/cogl-bitmap.c | 22 ++++++++++++++++------
> cogl/cogl-context.c | 3 +--
> cogl/cogl-texture-2d-sliced.c | 5 +++--
> cogl/cogl-texture-2d.c | 5 +++--
> cogl/cogl-texture-3d-private.h | 3 +--
> cogl/cogl-texture-3d.c | 9 +++++----
> cogl/cogl-texture-rectangle.c | 5 +++--
> 9 files changed, 35 insertions(+), 22 deletions(-)
>
> diff --git a/cogl/cogl-atlas-texture.c b/cogl/cogl-atlas-texture.c
> index 2701b87..d0be83d 100644
> --- a/cogl/cogl-atlas-texture.c
> +++ b/cogl/cogl-atlas-texture.c
> @@ -735,8 +735,6 @@ _cogl_atlas_texture_new_from_bitmap (CoglBitmap *bmp,
> int bmp_height;
> CoglPixelFormat bmp_format;
>
> - _COGL_GET_CONTEXT (ctx, COGL_INVALID_HANDLE);
> -
> _COGL_RETURN_VAL_IF_FAIL (cogl_is_bitmap (bmp), COGL_INVALID_HANDLE);
>
> bmp_width = cogl_bitmap_get_width (bmp);
> diff --git a/cogl/cogl-bitmap-private.h b/cogl/cogl-bitmap-private.h
> index fc93406..b46ba73 100644
> --- a/cogl/cogl-bitmap-private.h
> +++ b/cogl/cogl-bitmap-private.h
> @@ -142,4 +142,7 @@ _cogl_bitmap_bind (CoglBitmap *bitmap,
> void
> _cogl_bitmap_unbind (CoglBitmap *bitmap);
>
> +CoglContext *
> +_cogl_bitmap_get_context (CoglBitmap *bitmap);
> +
> #endif /* __COGL_BITMAP_H */
> diff --git a/cogl/cogl-bitmap.c b/cogl/cogl-bitmap.c
> index b0c6ec7..b81c681 100644
> --- a/cogl/cogl-bitmap.c
> +++ b/cogl/cogl-bitmap.c
> @@ -38,6 +38,10 @@
> struct _CoglBitmap
> {
> CoglHandleObject _parent;
> +
> + /* Pointer back to the context that this bitmap was created with */
> + CoglContext *context;
> +
> CoglPixelFormat format;
> int width;
> int height;
> @@ -73,6 +77,9 @@ _cogl_bitmap_free (CoglBitmap *bmp)
> if (bmp->buffer)
> cogl_object_unref (bmp->buffer);
>
> + if (bmp->context)
> + cogl_object_unref (bmp->context);
> +
> g_slice_free (CoglBitmap, bmp);
> }
>
> @@ -104,10 +111,8 @@ _cogl_bitmap_copy (CoglBitmap *src_bmp)
> int width = cogl_bitmap_get_width (src_bmp);
> int height = cogl_bitmap_get_height (src_bmp);
>
> - _COGL_GET_CONTEXT (ctx, NULL);
> -
> dst_bmp =
> - _cogl_bitmap_new_with_malloc_buffer (ctx,
> + _cogl_bitmap_new_with_malloc_buffer (src_bmp->context,
> width, height,
> src_format);
>
> @@ -188,6 +193,7 @@ cogl_bitmap_new_for_data (CoglContext *context,
> g_return_val_if_fail (cogl_is_context (context), NULL);
>
> bmp = g_slice_new (CoglBitmap);
> + bmp->context = cogl_object_ref (context);
> bmp->format = format;
> bmp->width = width;
> bmp->height = height;
> @@ -235,9 +241,7 @@ _cogl_bitmap_new_shared (CoglBitmap *shared_bmp,
> {
> CoglBitmap *bmp;
>
> - _COGL_GET_CONTEXT (ctx, NULL);
> -
> - bmp = cogl_bitmap_new_for_data (ctx,
> + bmp = cogl_bitmap_new_for_data (shared_bmp->context,
> width, height,
> format,
> rowstride,
> @@ -474,3 +478,9 @@ _cogl_bitmap_unbind (CoglBitmap *bitmap)
> else
> _cogl_bitmap_unmap (bitmap);
> }
> +
> +CoglContext *
> +_cogl_bitmap_get_context (CoglBitmap *bitmap)
> +{
> + return bitmap->context;
> +}
> diff --git a/cogl/cogl-context.c b/cogl/cogl-context.c
> index 8ed3103..937ea13 100644
> --- a/cogl/cogl-context.c
> +++ b/cogl/cogl-context.c
> @@ -405,8 +405,7 @@ cogl_context_new (CoglDisplay *display,
> /* If 3D or rectangle textures aren't supported then these should
> just silently return NULL */
> context->default_gl_texture_3d_tex =
> - _cogl_texture_3d_new_from_bitmap (context,
> - default_texture_bitmap,
> + _cogl_texture_3d_new_from_bitmap (default_texture_bitmap,
> 1, /* height */
> 1, /* depth */
> COGL_PIXEL_FORMAT_RGBA_8888_PRE,
> diff --git a/cogl/cogl-texture-2d-sliced.c b/cogl/cogl-texture-2d-sliced.c
> index 90c9a9e..275088f 100644
> --- a/cogl/cogl-texture-2d-sliced.c
> +++ b/cogl/cogl-texture-2d-sliced.c
> @@ -880,11 +880,12 @@ _cogl_texture_2d_sliced_new_from_bitmap (CoglBitmap *bmp,
> GLenum gl_format;
> GLenum gl_type;
> int width, height;
> -
> - _COGL_GET_CONTEXT (ctx, NULL);
> + CoglContext *ctx;
>
> _COGL_RETURN_VAL_IF_FAIL (cogl_is_bitmap (bmp), NULL);
>
> + ctx = _cogl_bitmap_get_context (bmp);
> +
> width = cogl_bitmap_get_width (bmp);
> height = cogl_bitmap_get_height (bmp);
>
> diff --git a/cogl/cogl-texture-2d.c b/cogl/cogl-texture-2d.c
> index a3f0426..b14c615 100644
> --- a/cogl/cogl-texture-2d.c
> +++ b/cogl/cogl-texture-2d.c
> @@ -225,11 +225,12 @@ _cogl_texture_2d_new_from_bitmap (CoglBitmap *bmp,
> GLenum gl_format;
> GLenum gl_type;
> guint8 *data;
> -
> - _COGL_GET_CONTEXT (ctx, COGL_INVALID_HANDLE);
> + CoglContext *ctx;
>
> _COGL_RETURN_VAL_IF_FAIL (bmp != NULL, COGL_INVALID_HANDLE);
>
> + ctx = _cogl_bitmap_get_context (bmp);
> +
> internal_format =
> _cogl_texture_determine_internal_format (cogl_bitmap_get_format (bmp),
> internal_format);
> diff --git a/cogl/cogl-texture-3d-private.h b/cogl/cogl-texture-3d-private.h
> index b1cc7d8..7b3f9cd 100644
> --- a/cogl/cogl-texture-3d-private.h
> +++ b/cogl/cogl-texture-3d-private.h
> @@ -81,8 +81,7 @@ struct _CoglTexture3D
> * there was an error.
> */
> CoglTexture3D *
> -_cogl_texture_3d_new_from_bitmap (CoglContext *context,
> - CoglBitmap *bmp,
> +_cogl_texture_3d_new_from_bitmap (CoglBitmap *bmp,
> unsigned int height,
> unsigned int depth,
> CoglPixelFormat internal_format,
> diff --git a/cogl/cogl-texture-3d.c b/cogl/cogl-texture-3d.c
> index 83ef3ad..4e9621e 100644
> --- a/cogl/cogl-texture-3d.c
> +++ b/cogl/cogl-texture-3d.c
> @@ -236,8 +236,7 @@ cogl_texture_3d_new_with_size (CoglContext *ctx,
> }
>
> CoglTexture3D *
> -_cogl_texture_3d_new_from_bitmap (CoglContext *ctx,
> - CoglBitmap *bmp,
> +_cogl_texture_3d_new_from_bitmap (CoglBitmap *bmp,
> unsigned int height,
> unsigned int depth,
> CoglPixelFormat internal_format,
> @@ -251,6 +250,9 @@ _cogl_texture_3d_new_from_bitmap (CoglContext *ctx,
> GLenum gl_format;
> GLenum gl_type;
> guint8 *data;
> + CoglContext *ctx;
> +
> + ctx = _cogl_bitmap_get_context (bmp);
>
> bmp_width = cogl_bitmap_get_width (bmp);
> bmp_format = cogl_bitmap_get_format (bmp);
> @@ -396,8 +398,7 @@ cogl_texture_3d_new_from_data (CoglContext *context,
> rowstride,
> (guint8 *) data);
>
> - ret = _cogl_texture_3d_new_from_bitmap (context,
> - bitmap,
> + ret = _cogl_texture_3d_new_from_bitmap (bitmap,
> height,
> depth,
> internal_format,
> diff --git a/cogl/cogl-texture-rectangle.c b/cogl/cogl-texture-rectangle.c
> index e4db54d..a4d3dd9 100644
> --- a/cogl/cogl-texture-rectangle.c
> +++ b/cogl/cogl-texture-rectangle.c
> @@ -230,11 +230,12 @@ _cogl_texture_rectangle_new_from_bitmap (CoglBitmap *bmp,
> GLenum gl_intformat;
> GLenum gl_format;
> GLenum gl_type;
> -
> - _COGL_GET_CONTEXT (ctx, NULL);
> + CoglContext *ctx;
>
> _COGL_RETURN_VAL_IF_FAIL (cogl_is_bitmap (bmp), NULL);
>
> + ctx = _cogl_bitmap_get_context (bmp);
> +
> internal_format =
> _cogl_texture_determine_internal_format (cogl_bitmap_get_format (bmp),
> internal_format);
> --
> 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