Use exponential growth for util::atlas

This commit is contained in:
Nikita Lisitsa 2022-05-23 20:26:01 +03:00
parent 1b075bf40c
commit 25356b84bd

View file

@ -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;
};
}