atlas: defer checks until allocation
This defers checking the internal format and whether accelerated migration is supported until allocating the texture. Reviewed-by: Neil Roberts <neil@linux.intel.com> (cherry picked from commit 83b05cbe3969789bc3ec78480c0937a6722efbf1)
This commit is contained in:
parent
46f5239664
commit
bab33bf0f3
@ -658,32 +658,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);
|
||||
@ -713,6 +689,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 */
|
||||
|
Loading…
Reference in New Issue
Block a user