Browse Source

Trade: direct access to MeshAttributeData array in MeshData.

Again useful for MeshTools algos.
pull/371/head
Vladimír Vondruš 6 years ago
parent
commit
d0542267ac
  1. 12
      src/Magnum/Trade/MeshData.h
  2. 5
      src/Magnum/Trade/Test/MeshDataTest.cpp

12
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 */ /** @brief Taking a view to a r-value instance is not allowed */
Containers::ArrayView<char> mutableIndexData() && = delete; Containers::ArrayView<char> 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<const MeshAttributeData> attributeData() const { return _attributes; }
/** /**
* @brief Raw vertex data * @brief Raw vertex data
* *

5
src/Magnum/Trade/Test/MeshDataTest.cpp

@ -489,6 +489,7 @@ void MeshDataTest::construct() {
CORRADE_COMPARE(data.indexDataFlags(), DataFlag::Owned|DataFlag::Mutable); CORRADE_COMPARE(data.indexDataFlags(), DataFlag::Owned|DataFlag::Mutable);
CORRADE_COMPARE(data.vertexDataFlags(), DataFlag::Owned|DataFlag::Mutable); CORRADE_COMPARE(data.vertexDataFlags(), DataFlag::Owned|DataFlag::Mutable);
CORRADE_COMPARE(data.primitive(), MeshPrimitive::Triangles); CORRADE_COMPARE(data.primitive(), MeshPrimitive::Triangles);
CORRADE_VERIFY(!data.attributeData().empty());
CORRADE_COMPARE(static_cast<const void*>(data.indexData()), indexView.data()); CORRADE_COMPARE(static_cast<const void*>(data.indexData()), indexView.data());
CORRADE_COMPARE(static_cast<const void*>(data.vertexData()), vertexView.data()); CORRADE_COMPARE(static_cast<const void*>(data.vertexData()), vertexView.data());
CORRADE_COMPARE(static_cast<void*>(data.mutableIndexData()), indexView.data()); CORRADE_COMPARE(static_cast<void*>(data.mutableIndexData()), indexView.data());
@ -684,6 +685,7 @@ void MeshDataTest::constructAttributeless() {
CORRADE_COMPARE(data.indexDataFlags(), DataFlag::Owned|DataFlag::Mutable); CORRADE_COMPARE(data.indexDataFlags(), DataFlag::Owned|DataFlag::Mutable);
CORRADE_COMPARE(data.vertexDataFlags(), DataFlag::Owned|DataFlag::Mutable); CORRADE_COMPARE(data.vertexDataFlags(), DataFlag::Owned|DataFlag::Mutable);
CORRADE_COMPARE(data.primitive(), MeshPrimitive::TriangleStrip); CORRADE_COMPARE(data.primitive(), MeshPrimitive::TriangleStrip);
CORRADE_VERIFY(!data.attributeData());
CORRADE_COMPARE(data.vertexData(), nullptr); CORRADE_COMPARE(data.vertexData(), nullptr);
CORRADE_COMPARE(data.importerState(), &importerState); CORRADE_COMPARE(data.importerState(), &importerState);
@ -879,6 +881,7 @@ void MeshDataTest::constructAttributelessNotOwned() {
CORRADE_COMPARE(data.indexDataFlags(), instanceData.dataFlags); CORRADE_COMPARE(data.indexDataFlags(), instanceData.dataFlags);
CORRADE_COMPARE(data.vertexDataFlags(), DataFlag::Owned|DataFlag::Mutable); CORRADE_COMPARE(data.vertexDataFlags(), DataFlag::Owned|DataFlag::Mutable);
CORRADE_COMPARE(data.primitive(), MeshPrimitive::TriangleStrip); CORRADE_COMPARE(data.primitive(), MeshPrimitive::TriangleStrip);
CORRADE_VERIFY(!data.attributeData());
CORRADE_COMPARE(data.vertexData(), nullptr); CORRADE_COMPARE(data.vertexData(), nullptr);
if(instanceData.dataFlags & DataFlag::Mutable) if(instanceData.dataFlags & DataFlag::Mutable)
CORRADE_COMPARE(data.mutableVertexData(), nullptr); CORRADE_COMPARE(data.mutableVertexData(), nullptr);
@ -908,6 +911,7 @@ void MeshDataTest::constructIndexlessAttributeless() {
CORRADE_COMPARE(data.indexDataFlags(), DataFlag::Owned|DataFlag::Mutable); CORRADE_COMPARE(data.indexDataFlags(), DataFlag::Owned|DataFlag::Mutable);
CORRADE_COMPARE(data.vertexDataFlags(), DataFlag::Owned|DataFlag::Mutable); CORRADE_COMPARE(data.vertexDataFlags(), DataFlag::Owned|DataFlag::Mutable);
CORRADE_COMPARE(data.primitive(), MeshPrimitive::TriangleStrip); CORRADE_COMPARE(data.primitive(), MeshPrimitive::TriangleStrip);
CORRADE_VERIFY(!data.attributeData());
CORRADE_COMPARE(data.indexData(), nullptr); CORRADE_COMPARE(data.indexData(), nullptr);
CORRADE_COMPARE(data.vertexData(), nullptr); CORRADE_COMPARE(data.vertexData(), nullptr);
CORRADE_COMPARE(data.importerState(), &importerState); CORRADE_COMPARE(data.importerState(), &importerState);
@ -921,6 +925,7 @@ void MeshDataTest::constructIndexlessAttributelessZeroVertices() {
int importerState; int importerState;
MeshData data{MeshPrimitive::TriangleStrip, 0, &importerState}; MeshData data{MeshPrimitive::TriangleStrip, 0, &importerState};
CORRADE_COMPARE(data.primitive(), MeshPrimitive::TriangleStrip); CORRADE_COMPARE(data.primitive(), MeshPrimitive::TriangleStrip);
CORRADE_VERIFY(!data.attributeData());
CORRADE_COMPARE(data.indexData(), nullptr); CORRADE_COMPARE(data.indexData(), nullptr);
CORRADE_COMPARE(data.vertexData(), nullptr); CORRADE_COMPARE(data.vertexData(), nullptr);
CORRADE_COMPARE(data.importerState(), &importerState); CORRADE_COMPARE(data.importerState(), &importerState);

Loading…
Cancel
Save