From d0542267ac81827729d2a137a0d4f63c5799355e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Sun, 12 Jan 2020 19:48:17 +0100 Subject: [PATCH] Trade: direct access to MeshAttributeData array in MeshData. Again useful for MeshTools algos. --- src/Magnum/Trade/MeshData.h | 12 ++++++++++++ src/Magnum/Trade/Test/MeshDataTest.cpp | 5 +++++ 2 files changed, 17 insertions(+) diff --git a/src/Magnum/Trade/MeshData.h b/src/Magnum/Trade/MeshData.h index ec854f501..e44a027ae 100644 --- a/src/Magnum/Trade/MeshData.h +++ b/src/Magnum/Trade/MeshData.h @@ -611,6 +611,18 @@ class MAGNUM_TRADE_EXPORT MeshData { /** @brief Taking a view to a r-value instance is not allowed */ Containers::ArrayView mutableIndexData() && = delete; + /** + * @brief Raw attribute metadata + * + * Useful mainly for passing particular attributes to @ref MeshTools + * algorithms, everything is otherwise exposed directly through various + * `attribute*()` getters. Returns @cpp nullptr @ce if the mesh has no + * attributes. + * @see @ref attributeCount(), @ref attributeName(), + * @ref attributeFormat(), @ref attribute() + */ + Containers::ArrayView attributeData() const { return _attributes; } + /** * @brief Raw vertex data * diff --git a/src/Magnum/Trade/Test/MeshDataTest.cpp b/src/Magnum/Trade/Test/MeshDataTest.cpp index cf192eedf..be430b8aa 100644 --- a/src/Magnum/Trade/Test/MeshDataTest.cpp +++ b/src/Magnum/Trade/Test/MeshDataTest.cpp @@ -489,6 +489,7 @@ void MeshDataTest::construct() { CORRADE_COMPARE(data.indexDataFlags(), DataFlag::Owned|DataFlag::Mutable); CORRADE_COMPARE(data.vertexDataFlags(), DataFlag::Owned|DataFlag::Mutable); CORRADE_COMPARE(data.primitive(), MeshPrimitive::Triangles); + CORRADE_VERIFY(!data.attributeData().empty()); CORRADE_COMPARE(static_cast(data.indexData()), indexView.data()); CORRADE_COMPARE(static_cast(data.vertexData()), vertexView.data()); CORRADE_COMPARE(static_cast(data.mutableIndexData()), indexView.data()); @@ -684,6 +685,7 @@ void MeshDataTest::constructAttributeless() { CORRADE_COMPARE(data.indexDataFlags(), DataFlag::Owned|DataFlag::Mutable); CORRADE_COMPARE(data.vertexDataFlags(), DataFlag::Owned|DataFlag::Mutable); CORRADE_COMPARE(data.primitive(), MeshPrimitive::TriangleStrip); + CORRADE_VERIFY(!data.attributeData()); CORRADE_COMPARE(data.vertexData(), nullptr); CORRADE_COMPARE(data.importerState(), &importerState); @@ -879,6 +881,7 @@ void MeshDataTest::constructAttributelessNotOwned() { CORRADE_COMPARE(data.indexDataFlags(), instanceData.dataFlags); CORRADE_COMPARE(data.vertexDataFlags(), DataFlag::Owned|DataFlag::Mutable); CORRADE_COMPARE(data.primitive(), MeshPrimitive::TriangleStrip); + CORRADE_VERIFY(!data.attributeData()); CORRADE_COMPARE(data.vertexData(), nullptr); if(instanceData.dataFlags & DataFlag::Mutable) CORRADE_COMPARE(data.mutableVertexData(), nullptr); @@ -908,6 +911,7 @@ void MeshDataTest::constructIndexlessAttributeless() { CORRADE_COMPARE(data.indexDataFlags(), DataFlag::Owned|DataFlag::Mutable); CORRADE_COMPARE(data.vertexDataFlags(), DataFlag::Owned|DataFlag::Mutable); CORRADE_COMPARE(data.primitive(), MeshPrimitive::TriangleStrip); + CORRADE_VERIFY(!data.attributeData()); CORRADE_COMPARE(data.indexData(), nullptr); CORRADE_COMPARE(data.vertexData(), nullptr); CORRADE_COMPARE(data.importerState(), &importerState); @@ -921,6 +925,7 @@ void MeshDataTest::constructIndexlessAttributelessZeroVertices() { int importerState; MeshData data{MeshPrimitive::TriangleStrip, 0, &importerState}; CORRADE_COMPARE(data.primitive(), MeshPrimitive::TriangleStrip); + CORRADE_VERIFY(!data.attributeData()); CORRADE_COMPARE(data.indexData(), nullptr); CORRADE_COMPARE(data.vertexData(), nullptr); CORRADE_COMPARE(data.importerState(), &importerState);