diff options
author | Robert Bragg <robert@linux.intel.com> | 2013-06-24 11:50:56 +0100 |
---|---|---|
committer | Robert Bragg <robert@linux.intel.com> | 2013-12-02 15:31:19 +0000 |
commit | d8c01216e57e4549082a93efeafb1e6f199ddd91 (patch) | |
tree | 3bed9487a33d554c397de369237b44addbdd4db2 | |
parent | c7840b3cbc9a6aeaa91673bd694ad373f92d89a4 (diff) | |
download | cogl-d8c01216e57e4549082a93efeafb1e6f199ddd91.tar.gz |
atlas: defer checks until allocation
This defers checking the internal format and whether accelerated
migration is supported until allocating the texture.
-rw-r--r-- | cogl/cogl-atlas-texture.c | 48 |
1 files changed, 24 insertions, 24 deletions
diff --git a/cogl/cogl-atlas-texture.c b/cogl/cogl-atlas-texture.c index ce7a9eab..5fde9794 100644 --- a/cogl/cogl-atlas-texture.c +++ b/cogl/cogl-atlas-texture.c @@ -654,32 +654,8 @@ cogl_atlas_texture_new_with_size (CoglContext *ctx, * data structure */ _COGL_RETURN_VAL_IF_FAIL (width > 0 && height > 0, NULL); - /* If we can't use FBOs then it will be too slow to migrate textures - and we shouldn't use the atlas */ - if (!cogl_has_feature (ctx, COGL_FEATURE_ID_OFFSCREEN)) - { - _cogl_set_error (error, - COGL_SYSTEM_ERROR, - COGL_SYSTEM_ERROR_UNSUPPORTED, - "Atlasing disabled because migrations " - "would be too slow"); - return NULL; - } - COGL_NOTE (ATLAS, "Adding texture of size %ix%i", width, height); - /* If the texture is in a strange format then we won't use it */ - if (!_cogl_atlas_texture_can_use_format (internal_format)) - { - COGL_NOTE (ATLAS, "Texture can not be added because the " - "format is unsupported"); - _cogl_set_error (error, - COGL_TEXTURE_ERROR, - COGL_TEXTURE_ERROR_FORMAT, - "Texture format unsuitable for atlasing"); - return NULL; - } - /* We need to allocate the texture now because we need the pointer to set as the data for the rectangle in the atlas */ atlas_tex = g_new (CoglAtlasTexture, 1); @@ -709,6 +685,30 @@ _cogl_atlas_texture_allocate (CoglTexture *tex, CoglAtlas *atlas; GSList *l; + /* If the texture is in a strange format then we won't use it */ + if (!_cogl_atlas_texture_can_use_format (atlas_tex->format)) + { + COGL_NOTE (ATLAS, "Texture can not be added because the " + "format is unsupported"); + _cogl_set_error (error, + COGL_TEXTURE_ERROR, + COGL_TEXTURE_ERROR_FORMAT, + "Texture format unsuitable for atlasing"); + return FALSE; + } + + /* If we can't use FBOs then it will be too slow to migrate textures + and we shouldn't use the atlas */ + if (!cogl_has_feature (ctx, COGL_FEATURE_ID_OFFSCREEN)) + { + _cogl_set_error (error, + COGL_SYSTEM_ERROR, + COGL_SYSTEM_ERROR_UNSUPPORTED, + "Atlasing disabled because migrations " + "would be too slow"); + return FALSE; + } + /* Look for an existing atlas that can hold the texture */ for (l = ctx->atlases; l; l = l->next) /* Try to make some space in the atlas for the texture */ |