diff --git a/libs/util/include/psemek/util/atlas.hpp b/libs/util/include/psemek/util/atlas.hpp index 75e33724..c93139d6 100644 --- a/libs/util/include/psemek/util/atlas.hpp +++ b/libs/util/include/psemek/util/atlas.hpp @@ -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 data_; util::array array_; + std::size_t free_start_ = 0; }; }