atlas-texture: Keep reference on potential destination atlas
When a new CoglAtlasTexture tries to fit into an existing CoglAtlas it should make sure the atlas stays valid while it expands. https://bugzilla.gnome.org/show_bug.cgi?id=728064 Reviewed-by: Neil Roberts <neil@linux.intel.com> (cherry picked from commit 2eec9758f67e9073371c2edd63379324849373c4)
This commit is contained in:
parent
22378d572b
commit
5556241b67
@ -746,15 +746,25 @@ allocate_space (CoglAtlasTexture *atlas_tex,
|
||||
|
||||
/* 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 */
|
||||
if (_cogl_atlas_reserve_space (atlas = l->data,
|
||||
/* Add two pixels for the border */
|
||||
width + 2, height + 2,
|
||||
atlas_tex))
|
||||
{
|
||||
cogl_object_ref (atlas);
|
||||
break;
|
||||
}
|
||||
{
|
||||
/* We need to take a reference on the atlas before trying to
|
||||
* reserve space because in some circumstances atlas migration
|
||||
* can cause the atlas to be freed */
|
||||
atlas = cogl_object_ref (l->data);
|
||||
/* Try to make some space in the atlas for the texture */
|
||||
if (_cogl_atlas_reserve_space (atlas,
|
||||
/* Add two pixels for the border */
|
||||
width + 2, height + 2,
|
||||
atlas_tex))
|
||||
{
|
||||
/* keep the atlas reference */
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
cogl_object_unref (atlas);
|
||||
}
|
||||
}
|
||||
|
||||
/* If we couldn't find a suitable atlas then start another */
|
||||
if (l == NULL)
|
||||
|
Loading…
Reference in New Issue
Block a user