cogl-atlas: Try the next size when there would be less than 6% waste

Previously when the atlas needs to be migrated it would start by
trying with the same size as the existing atlas if there is enough
space for the new texture. However even if the atlas is completely
sorted there will always be some amount of waste so when the atlas
needs to grow it would usually end up redundantly trying the same size
when it is very unlikely to fit. This patch changes it so that there
must be at least 6% waste available after the new texture is added
otherwise it will start with the next atlas size.
This commit is contained in:
Neil Roberts 2010-08-06 18:42:43 +01:00
parent c6b6f619a9
commit 0aaea4a93a

View File

@ -496,11 +496,13 @@ _cogl_atlas_reserve_space (CoglAtlas *atlas,
map_width = _cogl_rectangle_map_get_width (atlas->map);
map_height = _cogl_rectangle_map_get_height (atlas->map);
/* If there is enough space in the existing for the new
rectangle in the existing atlas we'll start with the same
size, otherwise we'll immediately double it */
if (_cogl_rectangle_map_get_remaining_space (atlas->map) <
width * height)
/* If there is enough space in for the new rectangle in the
existing atlas with at least 6% waste we'll start with the
same size, otherwise we'll immediately double it */
if ((map_width * map_height -
_cogl_rectangle_map_get_remaining_space (atlas->map) +
width * height) * 53 / 50 >
map_width * map_height)
_cogl_atlas_get_next_size (&map_width, &map_height);
}
else