summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Bragg <robert@linux.intel.com>2013-06-24 11:50:56 +0100
committerRobert Bragg <robert@linux.intel.com>2013-12-02 15:31:19 +0000
commitd8c01216e57e4549082a93efeafb1e6f199ddd91 (patch)
tree3bed9487a33d554c397de369237b44addbdd4db2
parentc7840b3cbc9a6aeaa91673bd694ad373f92d89a4 (diff)
downloadcogl-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.c48
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 */