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;
|
std::size_t part_height = data.height() + padding_ * 2;
|
||||||
|
|
||||||
atlas_part part;
|
atlas_part part;
|
||||||
part.begin[0] = array_.width();
|
part.begin[0] = free_start_;
|
||||||
part.end[0] = part.begin[0] + part_width;
|
part.end[0] = part.begin[0] + part_width;
|
||||||
part.begin[1] = 0;
|
part.begin[1] = 0;
|
||||||
part.end[1] = part_height;
|
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);
|
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_);
|
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 y = 0; y < part_height; ++y)
|
||||||
{
|
{
|
||||||
for (std::size_t x = 0; x < part_width; ++x)
|
for (std::size_t x = 0; x < part_width; ++x)
|
||||||
|
|
@ -109,6 +117,7 @@ namespace psemek::util
|
||||||
padding_mode const padding_mode_;
|
padding_mode const padding_mode_;
|
||||||
std::map<Key, atlas_part, Compare> data_;
|
std::map<Key, atlas_part, Compare> data_;
|
||||||
util::array<T, 2> array_;
|
util::array<T, 2> array_;
|
||||||
|
std::size_t free_start_ = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue