diff --git a/doc/changelog.dox b/doc/changelog.dox index cd5ea5a03..b6bc3b172 100644 --- a/doc/changelog.dox +++ b/doc/changelog.dox @@ -171,6 +171,11 @@ See also: isn't available on ES3 or desktop GL, but NVidia drivers are known to emit it, which is why it got added. +@subsubsection changelog-latest-changes-math Math library + +- Added @ref Math::castInto() overloads for casting between @ref UnsignedByte + and @ref UnsignedShort or @ref Byte and @ref Short + @subsubsection changelog-latest-changes-meshtools MeshTools library - Added a `--bounds` option to @ref magnum-sceneconverter "magnum-sceneconverter", diff --git a/src/Magnum/Math/PackingBatch.cpp b/src/Magnum/Math/PackingBatch.cpp index 4c3c972b5..e30baeda6 100644 --- a/src/Magnum/Math/PackingBatch.cpp +++ b/src/Magnum/Math/PackingBatch.cpp @@ -272,6 +272,22 @@ void castInto(const Corrade::Containers::StridedArrayView2D& src, con castIntoImplementation(src, dst); } +void castInto(const Corrade::Containers::StridedArrayView2D& src, const Corrade::Containers::StridedArrayView2D& dst) { + castIntoImplementation(src, dst); +} + +void castInto(const Corrade::Containers::StridedArrayView2D& src, const Corrade::Containers::StridedArrayView2D& dst) { + castIntoImplementation(src, dst); +} + +void castInto(const Corrade::Containers::StridedArrayView2D& src, const Corrade::Containers::StridedArrayView2D& dst) { + castIntoImplementation(src, dst); +} + +void castInto(const Corrade::Containers::StridedArrayView2D& src, const Corrade::Containers::StridedArrayView2D& dst) { + castIntoImplementation(src, dst); +} + static_assert(sizeof(HalfMantissaTable) + sizeof(HalfOffsetTable) + sizeof(HalfExponentTable) == 8576, "improper size of half->float conversion tables"); diff --git a/src/Magnum/Math/PackingBatch.h b/src/Magnum/Math/PackingBatch.h index a51aa468a..60d934178 100644 --- a/src/Magnum/Math/PackingBatch.h +++ b/src/Magnum/Math/PackingBatch.h @@ -324,6 +324,30 @@ MAGNUM_EXPORT void castInto(const Corrade::Containers::StridedArrayView2D& src, const Corrade::Containers::StridedArrayView2D& dst); +/** + * @overload + * @m_since_latest + */ +MAGNUM_EXPORT void castInto(const Corrade::Containers::StridedArrayView2D& src, const Corrade::Containers::StridedArrayView2D& dst); + +/** + * @overload + * @m_since_latest + */ +MAGNUM_EXPORT void castInto(const Corrade::Containers::StridedArrayView2D& src, const Corrade::Containers::StridedArrayView2D& dst); + +/** + * @overload + * @m_since_latest + */ +MAGNUM_EXPORT void castInto(const Corrade::Containers::StridedArrayView2D& src, const Corrade::Containers::StridedArrayView2D& dst); + +/** + * @overload + * @m_since_latest + */ +MAGNUM_EXPORT void castInto(const Corrade::Containers::StridedArrayView2D& src, const Corrade::Containers::StridedArrayView2D& dst); + /* Since 1.8.17, the original short-hand group closing doesn't work anymore. FFS. */ /** diff --git a/src/Magnum/Math/Test/PackingBatchTest.cpp b/src/Magnum/Math/Test/PackingBatchTest.cpp index bcbca3446..42fb9792b 100644 --- a/src/Magnum/Math/Test/PackingBatchTest.cpp +++ b/src/Magnum/Math/Test/PackingBatchTest.cpp @@ -54,8 +54,8 @@ struct PackingBatchTest: Corrade::TestSuite::Tester { template void castUnsignedFloat(); template void castSignedFloat(); - template void castUnsignedInteger(); - template void castSignedInteger(); + template void castUnsignedInteger(); + template void castSignedInteger(); template void assertionsPackUnpack(); void assertionsPackUnpackHalf(); @@ -82,10 +82,12 @@ PackingBatchTest::PackingBatchTest() { &PackingBatchTest::castSignedFloat, &PackingBatchTest::castSignedFloat, - &PackingBatchTest::castUnsignedInteger, - &PackingBatchTest::castUnsignedInteger, - &PackingBatchTest::castSignedInteger, - &PackingBatchTest::castSignedInteger, + &PackingBatchTest::castUnsignedInteger, + &PackingBatchTest::castUnsignedInteger, + &PackingBatchTest::castUnsignedInteger, + &PackingBatchTest::castSignedInteger, + &PackingBatchTest::castSignedInteger, + &PackingBatchTest::castSignedInteger, &PackingBatchTest::assertionsPackUnpack, &PackingBatchTest::assertionsPackUnpack, @@ -100,8 +102,10 @@ PackingBatchTest::PackingBatchTest() { &PackingBatchTest::assertionsCast, &PackingBatchTest::assertionsCast, &PackingBatchTest::assertionsCast, + &PackingBatchTest::assertionsCast, &PackingBatchTest::assertionsCast, - &PackingBatchTest::assertionsCast}); + &PackingBatchTest::assertionsCast, + &PackingBatchTest::assertionsCast}); } typedef Math::Constants Constants; @@ -493,21 +497,19 @@ template void PackingBatchTest::castSignedFloat() { Corrade::TestSuite::Compare::Container); } -template void PackingBatchTest::castUnsignedInteger() { - setTestCaseTemplateName(TypeTraits::name()); +template void PackingBatchTest::castUnsignedInteger() { + setTestCaseTemplateName({TypeTraits::name(), TypeTraits::name()}); struct Data { Math::Vector2 src; - Vector2ui dst; + Math::Vector2 dst; } data[]{ {{0, 89}, {}}, {{149, 22}, {}}, {{13, 255}, {}} }; - /* GCC 4.8 doesn't like constexpr here (cannot initialize aggregate of type - ‘const Vector2 [3]’ with a compound literal), wtf */ - const Vector2ui expectedTargetType[] { + constexpr Math::Vector2 expectedTargetType[] { {0, 89}, {149, 22}, {13, 255} @@ -520,34 +522,32 @@ template void PackingBatchTest::castUnsignedInteger() { }; Corrade::Containers::StridedArrayView1D> src{data, &data[0].src, 3, sizeof(Data)}; - Corrade::Containers::StridedArrayView1D dst{data, &data[0].dst, 3, sizeof(Data)}; + Corrade::Containers::StridedArrayView1D> dst{data, &data[0].dst, 3, sizeof(Data)}; castInto(Corrade::Containers::arrayCast<2, T>(src), - Corrade::Containers::arrayCast<2, UnsignedInt>(dst)); + Corrade::Containers::arrayCast<2, U>(dst)); CORRADE_COMPARE_AS(dst, Corrade::Containers::stridedArrayView(expectedTargetType), Corrade::TestSuite::Compare::Container); /* Test the other way around as well */ - castInto(Corrade::Containers::arrayCast<2, UnsignedInt>(dst), + castInto(Corrade::Containers::arrayCast<2, U>(dst), Corrade::Containers::arrayCast<2, T>(src)); CORRADE_COMPARE_AS(src, Corrade::Containers::stridedArrayView(expectedOriginalType), Corrade::TestSuite::Compare::Container); } -template void PackingBatchTest::castSignedInteger() { - setTestCaseTemplateName(TypeTraits::name()); +template void PackingBatchTest::castSignedInteger() { + setTestCaseTemplateName({TypeTraits::name(), TypeTraits::name()}); struct Data { Math::Vector2 src; - Vector2i dst; + Math::Vector2 dst; } data[]{ {{0, -89}, {}}, {{-119, 22}, {}}, {{13, 127}, {}} }; - /* GCC 4.8 doesn't like constexpr here (cannot initialize aggregate of type - ‘const Vector2 [3]’ with a compound literal), wtf */ - const Vector2i expectedTargetType[] { + constexpr Math::Vector2 expectedTargetType[] { {0, -89}, {-119, 22}, {13, 127} @@ -560,14 +560,14 @@ template void PackingBatchTest::castSignedInteger() { }; Corrade::Containers::StridedArrayView1D> src{data, &data[0].src, 3, sizeof(Data)}; - Corrade::Containers::StridedArrayView1D dst{data, &data[0].dst, 3, sizeof(Data)}; + Corrade::Containers::StridedArrayView1D> dst{data, &data[0].dst, 3, sizeof(Data)}; castInto(Corrade::Containers::arrayCast<2, T>(src), - Corrade::Containers::arrayCast<2, Int>(dst)); + Corrade::Containers::arrayCast<2, U>(dst)); CORRADE_COMPARE_AS(dst, Corrade::Containers::stridedArrayView(expectedTargetType), Corrade::TestSuite::Compare::Container); /* Test the other way around as well */ - castInto(Corrade::Containers::arrayCast<2, Int>(dst), + castInto(Corrade::Containers::arrayCast<2, U>(dst), Corrade::Containers::arrayCast<2, T>(src)); CORRADE_COMPARE_AS(src, Corrade::Containers::stridedArrayView(expectedOriginalType), Corrade::TestSuite::Compare::Container);