[Cogl] [PATCH 08/13] atlas: defer checks until allocation

Robert Bragg robert at sixbynine.org
Wed Dec 11 10:31:29 PST 2013


From: Robert Bragg <robert at linux.intel.com>

This defers checking the internal format and whether accelerated
migration is supported until allocating the texture.
---
 cogl/cogl-atlas-texture.c | 48 +++++++++++++++++++++++------------------------
 1 file changed, 24 insertions(+), 24 deletions(-)

diff --git a/cogl/cogl-atlas-texture.c b/cogl/cogl-atlas-texture.c
index ce7a9ea..5fde979 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 */
-- 
1.8.3.1



More information about the Cogl mailing list