diff --git a/cogl/cogl-texture-rectangle.c b/cogl/cogl-texture-rectangle.c index c7f49b634..02bdb5f1b 100644 --- a/cogl/cogl-texture-rectangle.c +++ b/cogl/cogl-texture-rectangle.c @@ -193,46 +193,16 @@ _cogl_texture_rectangle_create_base (CoglContext *ctx, CoglTextureRectangle * cogl_texture_rectangle_new_with_size (CoglContext *ctx, int width, - int height, - CoglPixelFormat internal_format, - CoglError **error) + int height) { - CoglTextureLoader *loader; - CoglTextureRectangle *tex_rect; - - /* Since no data, we need some internal format */ - if (internal_format == COGL_PIXEL_FORMAT_ANY) - internal_format = COGL_PIXEL_FORMAT_RGBA_8888_PRE; - - loader = _cogl_texture_create_loader (); + CoglTextureLoader *loader = _cogl_texture_create_loader (); loader->src_type = COGL_TEXTURE_SOURCE_TYPE_SIZED; loader->src.sized.width = width; loader->src.sized.height = height; - tex_rect = _cogl_texture_rectangle_create_base (ctx, width, height, - internal_format, loader); - - /* XXX: This api has been changed for Cogl 2.0 on the master branch - * to not take a CoglError to allow the storage to be allocated - * lazily but since Mutter uses this api we are currently - * maintaining the semantics of immediately allocating the storage - */ - - /* By default tex->premultiplied is set to TRUE and tex->components - * get initialized according to a given source-format in - * _cogl_texture_init(). Since this api has an internal-format - * argument for compatibility we need to make sure the - * ->premultiplied and ->components state are initialized according - * to the users given @internal_format. */ - _cogl_texture_set_internal_format (COGL_TEXTURE (tex_rect), internal_format); - - if (!cogl_texture_allocate (COGL_TEXTURE (tex_rect), error)) - { - cogl_object_unref (tex_rect); - return NULL; - } - - return tex_rect; + return _cogl_texture_rectangle_create_base (ctx, width, height, + COGL_PIXEL_FORMAT_RGBA_8888_PRE, + loader); } static CoglBool diff --git a/cogl/cogl-texture-rectangle.h b/cogl/cogl-texture-rectangle.h index df3cbeb6f..421e33171 100644 --- a/cogl/cogl-texture-rectangle.h +++ b/cogl/cogl-texture-rectangle.h @@ -81,13 +81,11 @@ cogl_is_texture_rectangle (void *object); * @ctx: A #CoglContext pointer * @width: The texture width to allocate * @height: The texture height to allocate - * @internal_format: The desired internal texture format - * @error: An optional CoglError pointer for reporting exceptions * - * Allocates a new #CoglTextureRectangle texture with a given @width, - * @height and @internal_format. This texture is a low-level texture - * that the GPU can sample from directly unlike high-level textures - * such as #CoglTexture2DSliced and #CoglAtlasTexture. + * Creates a new #CoglTextureRectangle texture with a given @width, + * and @height. This texture is a low-level texture that the GPU can + * sample from directly unlike high-level textures such as + * #CoglTexture2DSliced and #CoglAtlasTexture. * * Unlike for #CoglTexture2D textures, coordinates for * #CoglTextureRectangle textures should not be normalized. So instead @@ -102,15 +100,15 @@ cogl_is_texture_rectangle (void *object); * first check for the %COGL_FEATURE_ID_TEXTURE_RECTANGLE feature * using cogl_has_feature(). * - * For compatibility, unlike other texture constructors, this - * api allocates texture storage synchronously and returns %NULL on - * failure so it is not possible to configure rectangle textures - * created with this api before allocation. + * The storage for the texture is not allocated before this function + * returns. You can call cogl_texture_allocate() to explicitly + * allocate the underlying storage or preferably let Cogl + * automatically allocate storage lazily when it may know more about + * how the texture is going to be used and can optimize how it is + * allocated. * - * Return value: (transfer full): A pointer to a newly allocated - * #CoglTextureRectangle texture or if the size was too large - * or there wasn't enough memory %NULL is returned and @error - * set. + * Returns value: (transfer full): A pointer to a new #CoglTextureRectangle + * object with no storage allocated yet. * * Since: 1.10 * Stability: unstable @@ -118,9 +116,7 @@ cogl_is_texture_rectangle (void *object); CoglTextureRectangle * cogl_texture_rectangle_new_with_size (CoglContext *ctx, int width, - int height, - CoglPixelFormat internal_format, - CoglError **error); + int height); /** * cogl_texture_rectangle_new_from_bitmap: diff --git a/cogl/winsys/cogl-winsys-glx.c b/cogl/winsys/cogl-winsys-glx.c index 74ba46ffe..9b8677fb3 100644 --- a/cogl/winsys/cogl-winsys-glx.c +++ b/cogl/winsys/cogl-winsys-glx.c @@ -2504,13 +2504,11 @@ _cogl_winsys_texture_pixmap_x11_update (CoglTexturePixmapX11 *tex_pixmap, glx_tex_pixmap->glx_tex = COGL_TEXTURE ( cogl_texture_rectangle_new_with_size (ctx, tex->width, - tex->height, - texture_format, - &error)); + tex->height)); _cogl_texture_set_internal_format (tex, texture_format); - if (glx_tex_pixmap->glx_tex) + if (cogl_texture_allocate (glx_tex_pixmap->glx_tex, &error)) COGL_NOTE (TEXTURE_PIXMAP, "Created a texture rectangle for %p", tex_pixmap); else diff --git a/tests/conform/test-texture-no-allocate.c b/tests/conform/test-texture-no-allocate.c index 02c28d5bd..b0199a988 100644 --- a/tests/conform/test-texture-no-allocate.c +++ b/tests/conform/test-texture-no-allocate.c @@ -74,9 +74,7 @@ test_texture_no_allocate (void) { CoglTextureRectangle *texture_rect = cogl_texture_rectangle_new_with_size (test_ctx, - 64, 64, - COGL_PIXEL_FORMAT_RGBA_8888_PRE, - NULL /* error */); + 64, 64); cogl_object_unref (texture_rect); } }