Use exponential growth for util::atlas
This commit is contained in:
parent
1b075bf40c
commit
25356b84bd
1 changed files with 11 additions and 2 deletions
|
|
@ -48,16 +48,24 @@ namespace psemek::util
|
|||
std::size_t part_height = data.height() + padding_ * 2;
|
||||
|
||||
atlas_part part;
|
||||
part.begin[0] = array_.width();
|
||||
part.begin[0] = free_start_;
|
||||
part.end[0] = part.begin[0] + part_width;
|
||||
part.begin[1] = 0;
|
||||
part.end[1] = part_height;
|
||||
|
||||
std::size_t new_width = array_.width() + part_width;
|
||||
std::size_t new_width = std::max(array_.width(), free_start_ + part_width);
|
||||
std::size_t new_height = std::max(array_.height(), part_height);
|
||||
|
||||
if (new_width > array_.width())
|
||||
new_width = std::max(new_width, array_.width() * 2);
|
||||
|
||||
if (new_height > array_.height())
|
||||
new_height = std::max(new_height, array_.height() * 2);
|
||||
|
||||
array_.resize({new_width, new_height}, default_value_);
|
||||
|
||||
free_start_ += part_width;
|
||||
|
||||
for (std::size_t y = 0; y < part_height; ++y)
|
||||
{
|
||||
for (std::size_t x = 0; x < part_width; ++x)
|
||||
|
|
@ -109,6 +117,7 @@ namespace psemek::util
|
|||
padding_mode const padding_mode_;
|
||||
std::map<Key, atlas_part, Compare> data_;
|
||||
util::array<T, 2> array_;
|
||||
std::size_t free_start_ = 0;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue