From cb3ac834855ca9b45af04ec4a07447b4a76ef587 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Thu, 16 Jun 2022 15:25:22 +0200 Subject: [PATCH] TextureTools: take a strided view in atlasArrayPowerOfTwo(). Together with the parent commit, it's now possible to do THE UNTHINKABLE: Containers::Array inputImages = ...; auto out = TextureTools::atlasArrayPowerOfTwo({2048, 2048}, stridedArrayView(inputImages).slice(&Trade::ImageData2D::size)); An actual use case, in fact. Because why not. --- src/Magnum/TextureTools/Atlas.cpp | 5 +++-- src/Magnum/TextureTools/Atlas.h | 2 +- src/Magnum/TextureTools/Test/AtlasTest.cpp | 1 + 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/Magnum/TextureTools/Atlas.cpp b/src/Magnum/TextureTools/Atlas.cpp index d38e4b9b4..a5b573894 100644 --- a/src/Magnum/TextureTools/Atlas.cpp +++ b/src/Magnum/TextureTools/Atlas.cpp @@ -28,6 +28,7 @@ #include #include #include +#include #include #include "Magnum/Math/Functions.h" @@ -64,7 +65,7 @@ std::vector atlas(const Vector2i& atlasSize, const std::vector> atlasArrayPowerOfTwo(const Vector2i& layerSize, const Containers::ArrayView sizes) { +Containers::Pair> atlasArrayPowerOfTwo(const Vector2i& layerSize, const Containers::StridedArrayView1D sizes) { CORRADE_ASSERT(layerSize.product() && layerSize.x() == layerSize.y() && (layerSize & (layerSize - Vector2i{1})).isZero(), "TextureTools::atlasArrayPowerOfTwo(): expected layer size to be a non-zero power-of-two square, got" << Debug::packed << layerSize, {}); @@ -140,7 +141,7 @@ Containers::Pair> atlasArrayPowerOfTwo(const Ve } Containers::Pair> atlasArrayPowerOfTwo(const Vector2i& layerSize, const std::initializer_list sizes) { - return atlasArrayPowerOfTwo(layerSize, Containers::arrayView(sizes)); + return atlasArrayPowerOfTwo(layerSize, Containers::stridedArrayView(sizes)); } }} diff --git a/src/Magnum/TextureTools/Atlas.h b/src/Magnum/TextureTools/Atlas.h index f3063465c..039a9cb1a 100644 --- a/src/Magnum/TextureTools/Atlas.h +++ b/src/Magnum/TextureTools/Atlas.h @@ -72,7 +72,7 @@ atlasing in a single @f$ \mathcal{O}(n) @f$ operation. Due to the sort involved, a temporary allocation holds the sorted array and additionally @ref std::stable_sort() performs its own allocation. */ -Containers::Pair> MAGNUM_TEXTURETOOLS_EXPORT atlasArrayPowerOfTwo(const Vector2i& layerSize, Containers::ArrayView sizes); +Containers::Pair> MAGNUM_TEXTURETOOLS_EXPORT atlasArrayPowerOfTwo(const Vector2i& layerSize, Containers::StridedArrayView1D sizes); /** * @overload diff --git a/src/Magnum/TextureTools/Test/AtlasTest.cpp b/src/Magnum/TextureTools/Test/AtlasTest.cpp index 577467928..594d30af7 100644 --- a/src/Magnum/TextureTools/Test/AtlasTest.cpp +++ b/src/Magnum/TextureTools/Test/AtlasTest.cpp @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include