diff --git a/src/Magnum/Trade/Test/MeshDataTest.cpp b/src/Magnum/Trade/Test/MeshDataTest.cpp index 7559e93eb..2c59d258b 100644 --- a/src/Magnum/Trade/Test/MeshDataTest.cpp +++ b/src/Magnum/Trade/Test/MeshDataTest.cpp @@ -1261,64 +1261,62 @@ void MeshDataTest::construct() { }; Containers::Array indexData{8*sizeof(UnsignedShort)}; - auto indexView = Containers::arrayCast(indexData).slice(1, 7); - indexView[0] = 0; - indexView[1] = 1; - indexView[2] = 2; - indexView[3] = 0; - indexView[4] = 2; - indexView[5] = 1; + auto indices = Containers::arrayCast(indexData).slice(1, 7); + Utility::copy({0, 1, 2, 0, 2, 1}, indices); /* Enough vertex data to fit also the case with large explicit vertex count (but fill just the first 3, as those are only tested) */ Containers::Array vertexData{17*sizeof(Vertex)}; - auto vertexView = stridedArrayView(Containers::arrayCast(vertexData)).prefix(3); - vertexView[0].position = {0.1f, 0.2f, 0.3f}; - vertexView[1].position = {0.4f, 0.5f, 0.6f}; - vertexView[2].position = {0.7f, 0.8f, 0.9f}; - vertexView[0].normal = Vector3::xAxis(); - vertexView[1].normal = Vector3::yAxis(); - vertexView[2].normal = Vector3::zAxis(); - vertexView[0].textureCoordinate = {0.000f, 0.125f}; - vertexView[1].textureCoordinate = {0.250f, 0.375f}; - vertexView[2].textureCoordinate = {0.500f, 0.625f}; - vertexView[0].id[0] = 15; - vertexView[0].id[1] = 74; - vertexView[1].id[0] = -374; - vertexView[1].id[1] = 2; - vertexView[2].id[0] = 22; - vertexView[2].id[1] = -1; + auto vertices = stridedArrayView(Containers::arrayCast(vertexData)).prefix(3); + Utility::copy({ + {{0.1f, 0.2f, 0.3f}, + Vector3::xAxis(), + {0.000f, 0.125f}, + {15, 74}}, + {{0.4f, 0.5f, 0.6f}, + Vector3::yAxis(), + {0.250f, 0.375f}, + {-374, 2}}, + {{0.7f, 0.8f, 0.9f}, + Vector3::zAxis(), + {0.500f, 0.625f}, + {22, -1}} + }, vertices); if(instanceData.vertexCount < 3) - vertexView = vertexView.prefix(instanceData.vertexCount); + vertices = vertices.prefix(instanceData.vertexCount); int importerState; - MeshIndexData indices{indexView}; - MeshAttributeData positions{MeshAttribute::Position, - vertexView.slice(&Vertex::position)}; - /* Offset-only */ - MeshAttributeData normals{MeshAttribute::Normal, - VertexFormat::Vector3, offsetof(Vertex, normal), - UnsignedInt(vertexView.size()), sizeof(Vertex)}; - MeshAttributeData textureCoordinates{MeshAttribute::TextureCoordinates, - vertexView.slice(&Vertex::textureCoordinate)}; - /* Custom & array */ - MeshAttributeData ids{meshAttributeCustom(13), - Containers::arrayCast<2, Short>(vertexView.slice(&Vertex::id))}; MeshData data{MeshPrimitive::Triangles, - std::move(indexData), indices, + std::move(indexData), MeshIndexData{indices}, /* Texture coordinates deliberately twice (though aliased) */ - std::move(vertexData), {positions, textureCoordinates, normals, textureCoordinates, ids}, instanceData.vertexCount, &importerState}; + std::move(vertexData), { + MeshAttributeData{MeshAttribute::Position, + vertices.slice(&Vertex::position)}, + MeshAttributeData{MeshAttribute::TextureCoordinates, + vertices.slice(&Vertex::textureCoordinate)}, + /* Offset-only */ + MeshAttributeData{MeshAttribute::Normal, + VertexFormat::Vector3, offsetof(Vertex, normal), + UnsignedInt(vertices.size()), sizeof(Vertex)}, + /* Texture coordinates deliberately twice (though aliased) */ + MeshAttributeData{MeshAttribute::TextureCoordinates, + vertices.slice(&Vertex::textureCoordinate)}, + /* Custom & array */ + MeshAttributeData{meshAttributeCustom(13), + Containers::arrayCast<2, Short>(vertices.slice(&Vertex::id))} + }, + instanceData.vertexCount, &importerState}; /* Basics */ 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().isEmpty()); - CORRADE_COMPARE(static_cast(data.indexData() + 2), indexView.data()); - CORRADE_COMPARE(static_cast(data.vertexData()), vertexView.data()); - CORRADE_COMPARE(static_cast(data.mutableIndexData() + 2), indexView.data()); - CORRADE_COMPARE(static_cast(data.mutableVertexData()), vertexView.data()); + CORRADE_COMPARE(static_cast(data.indexData() + 2), indices.data()); + CORRADE_COMPARE(static_cast(data.vertexData()), vertices.data()); + CORRADE_COMPARE(static_cast(data.mutableIndexData() + 2), indices.data()); + CORRADE_COMPARE(static_cast(data.mutableVertexData()), vertices.data()); CORRADE_COMPARE(data.importerState(), &importerState); /* Index access */ @@ -1576,10 +1574,11 @@ void MeshDataTest::constructZeroIndices() { char i; Containers::Array indexData{&i, 0, [](char*, std::size_t){}}; auto indices = Containers::arrayCast(indexData); - MeshAttributeData positions{MeshAttribute::Position, vertices}; MeshData data{MeshPrimitive::Triangles, std::move(indexData), MeshIndexData{indices}, - std::move(vertexData), {positions}}; + std::move(vertexData), { + MeshAttributeData{MeshAttribute::Position, vertices} + }}; CORRADE_COMPARE(data.indexDataFlags(), DataFlag::Owned|DataFlag::Mutable); CORRADE_VERIFY(data.isIndexed()); @@ -1596,9 +1595,9 @@ void MeshDataTest::constructZeroAttributes() { index array */ Containers::Array indexData{3*sizeof(UnsignedInt)}; Containers::Array vertexData{3}; - auto indexView = Containers::arrayCast(indexData); + auto indices = Containers::arrayCast(indexData); MeshData data{MeshPrimitive::Triangles, - std::move(indexData), MeshIndexData{indexView}, + std::move(indexData), MeshIndexData{indices}, std::move(vertexData), {}, 15}; CORRADE_COMPARE(data.indexCount(), 3); @@ -1613,11 +1612,12 @@ void MeshDataTest::constructZeroVertices() { /* This is a valid use case because this could be an empty slice of a well-defined indexed mesh */ Containers::Array indexData{3*sizeof(UnsignedInt)}; - auto indexView = Containers::arrayCast(indexData); - MeshAttributeData positions{MeshAttribute::Position, VertexFormat::Vector3, nullptr}; + auto indices = Containers::arrayCast(indexData); MeshData data{MeshPrimitive::Triangles, - std::move(indexData), MeshIndexData{indexView}, - nullptr, {positions}}; + std::move(indexData), MeshIndexData{indices}, + nullptr, { + MeshAttributeData{MeshAttribute::Position, VertexFormat::Vector3, nullptr} + }}; CORRADE_COMPARE(data.indexCount(), 3); CORRADE_COMPARE(data.vertexDataFlags(), DataFlag::Owned|DataFlag::Mutable); @@ -1631,14 +1631,17 @@ void MeshDataTest::constructZeroVertices() { void MeshDataTest::constructIndexless() { Containers::Array vertexData{3*sizeof(Vector2)}; - auto vertexView = Containers::arrayCast(vertexData); - vertexView[0] = {0.1f, 0.2f}; - vertexView[1] = {0.4f, 0.5f}; - vertexView[2] = {0.7f, 0.8f}; + auto vertices = Containers::arrayCast(vertexData); + Utility::copy({ + {0.1f, 0.2f}, + {0.4f, 0.5f}, + {0.7f, 0.8f} + }, vertices); int importerState; - MeshAttributeData positions{MeshAttribute::Position, vertexView}; - MeshData data{MeshPrimitive::LineLoop, std::move(vertexData), {positions}, MeshData::ImplicitVertexCount, &importerState}; + MeshData data{MeshPrimitive::LineLoop, std::move(vertexData), { + MeshAttributeData{MeshAttribute::Position, vertices} + }, MeshData::ImplicitVertexCount, &importerState}; CORRADE_COMPARE(data.indexDataFlags(), DataFlag::Owned|DataFlag::Mutable); /* These are empty so it doesn't matter, but this is a nice non-restrictive default */ @@ -1663,8 +1666,9 @@ void MeshDataTest::constructIndexless() { } void MeshDataTest::constructIndexlessZeroVertices() { - MeshAttributeData positions{MeshAttribute::Position, VertexFormat::Vector2, nullptr}; - MeshData data{MeshPrimitive::LineLoop, nullptr, {positions}}; + MeshData data{MeshPrimitive::LineLoop, nullptr, { + MeshAttributeData{MeshAttribute::Position, VertexFormat::Vector2, nullptr} + }}; CORRADE_COMPARE(data.primitive(), MeshPrimitive::LineLoop); CORRADE_COMPARE(data.indexData(), static_cast(nullptr)); CORRADE_COMPARE(data.vertexData(), static_cast(nullptr)); @@ -1677,17 +1681,13 @@ void MeshDataTest::constructIndexlessZeroVertices() { void MeshDataTest::constructAttributeless() { Containers::Array indexData{6*sizeof(UnsignedInt)}; - auto indexView = Containers::arrayCast(indexData); - indexView[0] = 0; - indexView[1] = 1; - indexView[2] = 2; - indexView[3] = 0; - indexView[4] = 2; - indexView[5] = 1; + auto indices = Containers::arrayCast(indexData); + Utility::copy({0, 1, 2, 0, 2, 1}, indices); int importerState; - MeshIndexData indices{indexView}; - MeshData data{MeshPrimitive::TriangleStrip, std::move(indexData), indices, 3, &importerState}; + MeshData data{MeshPrimitive::TriangleStrip, + std::move(indexData), MeshIndexData{indices}, + 3, &importerState}; /* These are empty so it doesn't matter, but this is a nice non-restrictive default */ CORRADE_COMPARE(data.indexDataFlags(), DataFlag::Owned|DataFlag::Mutable); @@ -1798,7 +1798,8 @@ void MeshDataTest::constructImplementationSpecificVertexFormat() { MeshAttributeData{MeshAttribute::Color, vertexFormatWrap(0xdead4), attribute}, MeshAttributeData{meshAttributeCustom(35), - vertexFormatWrap(0xdead5), attribute, 27}}}; + vertexFormatWrap(0xdead5), attribute, 27} + }}; /* Getting typeless attribute should work also */ UnsignedInt format = 0xdead1; @@ -1828,7 +1829,8 @@ void MeshDataTest::constructSpecialIndexStrides() { Containers::Array indexData{sizeof(UnsignedShort)*8}; Containers::StridedArrayView1D indices = Containers::arrayCast(indexData); Utility::copy({1, 0, 2, 0, 3, 0, 4, 0}, indices); - MeshData mesh{MeshPrimitive::Points, std::move(indexData), MeshIndexData{indices.every(2)}, 1}; + MeshData mesh{MeshPrimitive::Points, std::move(indexData), + MeshIndexData{indices.every(2)}, 1}; CORRADE_COMPARE(mesh.indexStride(), 4); @@ -1859,7 +1861,8 @@ void MeshDataTest::constructSpecialIndexStrides() { Containers::Array indexData{sizeof(UnsignedShort)}; Containers::StridedArrayView1D indices = Containers::arrayCast(indexData); indices[0] = 15; - MeshData mesh{MeshPrimitive::Points, std::move(indexData), MeshIndexData{indices.broadcasted<0>(4)}, 1}; + MeshData mesh{MeshPrimitive::Points, std::move(indexData), + MeshIndexData{indices.broadcasted<0>(4)}, 1}; CORRADE_COMPARE(mesh.indexStride(), 0); @@ -1890,7 +1893,8 @@ void MeshDataTest::constructSpecialIndexStrides() { Containers::Array indexData{sizeof(UnsignedShort)*4}; Containers::StridedArrayView1D indices = Containers::arrayCast(indexData); Utility::copy({1, 2, 3, 4}, indices); - MeshData mesh{MeshPrimitive::Points, std::move(indexData), MeshIndexData{indices.flipped<0>()}, 1}; + MeshData mesh{MeshPrimitive::Points, std::move(indexData), + MeshIndexData{indices.flipped<0>()}, 1}; CORRADE_COMPARE(mesh.indexStride(), -2); @@ -1928,7 +1932,8 @@ void MeshDataTest::constructSpecialIndexStridesImplementationSpecificIndexType() Containers::Array indexData{sizeof(UnsignedShort)*8}; Containers::StridedArrayView1D indices = Containers::arrayCast(indexData); Utility::copy({1, 0, 2, 0, 3, 0, 4, 0}, indices); - MeshData mesh{MeshPrimitive::Points, std::move(indexData), MeshIndexData{meshIndexTypeWrap(0xcaca), indices.every(2)}, 1}; + MeshData mesh{MeshPrimitive::Points, std::move(indexData), + MeshIndexData{meshIndexTypeWrap(0xcaca), indices.every(2)}, 1}; CORRADE_COMPARE(mesh.indexStride(), 4); @@ -1951,7 +1956,8 @@ void MeshDataTest::constructSpecialIndexStridesImplementationSpecificIndexType() Containers::Array indexData{sizeof(UnsignedShort)}; Containers::StridedArrayView1D indices = Containers::arrayCast(indexData); indices[0] = 15; - MeshData mesh{MeshPrimitive::Points, std::move(indexData), MeshIndexData{meshIndexTypeWrap(0xcaca), indices.broadcasted<0>(4)}, 1}; + MeshData mesh{MeshPrimitive::Points, std::move(indexData), + MeshIndexData{meshIndexTypeWrap(0xcaca), indices.broadcasted<0>(4)}, 1}; CORRADE_COMPARE(mesh.indexStride(), 0); @@ -1970,7 +1976,8 @@ void MeshDataTest::constructSpecialIndexStridesImplementationSpecificIndexType() Containers::Array indexData{sizeof(UnsignedShort)*4}; Containers::StridedArrayView1D indices = Containers::arrayCast(indexData); Utility::copy({1, 2, 3, 4}, indices); - MeshData mesh{MeshPrimitive::Points, std::move(indexData), MeshIndexData{meshIndexTypeWrap(0xcaca), indices.flipped<0>()}, 1}; + MeshData mesh{MeshPrimitive::Points, std::move(indexData), + MeshIndexData{meshIndexTypeWrap(0xcaca), indices.flipped<0>()}, 1}; CORRADE_COMPARE(mesh.indexStride(), -2); @@ -1993,8 +2000,10 @@ void MeshDataTest::constructSpecialAttributeStrides() { Utility::copy({15, 1, 2, 3, 4}, vertices); MeshData mesh{MeshPrimitive::Points, std::move(vertexData), { - MeshAttributeData{MeshAttribute::ObjectId, vertices.prefix(1).broadcasted<0>(4)}, - MeshAttributeData{MeshAttribute::ObjectId, vertices.exceptPrefix(1).flipped<0>()}, + MeshAttributeData{MeshAttribute::ObjectId, + vertices.prefix(1).broadcasted<0>(4)}, + MeshAttributeData{MeshAttribute::ObjectId, + vertices.exceptPrefix(1).flipped<0>()}, }}; CORRADE_COMPARE(mesh.attributeStride(0), 0); @@ -2049,8 +2058,10 @@ void MeshDataTest::constructSpecialAttributeStridesImplementationSpecificVertexF Utility::copy({15, 1, 2, 3, 4}, vertices); MeshData mesh{MeshPrimitive::Points, std::move(vertexData), { - MeshAttributeData{MeshAttribute::ObjectId, vertexFormatWrap(0xdead), vertices.prefix(1).broadcasted<0>(4)}, - MeshAttributeData{MeshAttribute::ObjectId, vertexFormatWrap(0xdead), vertices.exceptPrefix(1).flipped<0>()} + MeshAttributeData{MeshAttribute::ObjectId, vertexFormatWrap(0xdead), + vertices.prefix(1).broadcasted<0>(4)}, + MeshAttributeData{MeshAttribute::ObjectId, vertexFormatWrap(0xdead), + vertices.exceptPrefix(1).flipped<0>()} }}; CORRADE_COMPARE(mesh.attributeStride(0), 0); @@ -2081,23 +2092,26 @@ void MeshDataTest::constructNotOwned() { auto&& instanceData = NotOwnedData[testCaseInstanceId()]; setTestCaseDescription(instanceData.name); - UnsignedShort indexData[]{0, 1, 0}; - Vector2 vertexData[]{{0.1f, 0.2f}, {0.4f, 0.5f}}; + UnsignedShort indices[]{0, 1, 0}; + Vector2 vertices[]{{0.1f, 0.2f}, {0.4f, 0.5f}}; int importerState; - MeshIndexData indices{indexData}; - MeshAttributeData positions{MeshAttribute::Position, Containers::arrayView(vertexData)}; - MeshData data{MeshPrimitive::Triangles, instanceData.indexDataFlags, Containers::arrayView(indexData), indices, instanceData.vertexDataFlags, Containers::arrayView(vertexData), {positions}, MeshData::ImplicitVertexCount, &importerState}; + MeshData data{MeshPrimitive::Triangles, + instanceData.indexDataFlags, indices, MeshIndexData{indices}, instanceData.vertexDataFlags, vertices, { + MeshAttributeData{MeshAttribute::Position, + Containers::arrayView(vertices)} + }, + MeshData::ImplicitVertexCount, &importerState}; CORRADE_COMPARE(data.indexDataFlags(), instanceData.indexDataFlags); CORRADE_COMPARE(data.vertexDataFlags(), instanceData.vertexDataFlags); CORRADE_COMPARE(data.primitive(), MeshPrimitive::Triangles); - CORRADE_COMPARE(static_cast(data.indexData()), +indexData); - CORRADE_COMPARE(static_cast(data.vertexData()), +vertexData); + CORRADE_COMPARE(static_cast(data.indexData()), +indices); + CORRADE_COMPARE(static_cast(data.vertexData()), +vertices); if(instanceData.indexDataFlags & DataFlag::Mutable) - CORRADE_COMPARE(static_cast(data.mutableIndexData()), +indexData); + CORRADE_COMPARE(static_cast(data.mutableIndexData()), +indices); if(instanceData.vertexDataFlags & DataFlag::Mutable) - CORRADE_COMPARE(static_cast(data.mutableVertexData()), +vertexData); + CORRADE_COMPARE(static_cast(data.mutableVertexData()), +vertices); CORRADE_COMPARE(data.importerState(), &importerState); CORRADE_VERIFY(data.isIndexed()); @@ -2128,25 +2142,30 @@ void MeshDataTest::constructIndicesNotOwned() { auto&& instanceData = SingleNotOwnedData[testCaseInstanceId()]; setTestCaseDescription(instanceData.name); - UnsignedShort indexData[]{0, 1, 0}; + UnsignedShort indices[]{0, 1, 0}; Containers::Array vertexData{2*sizeof(Vector2)}; - auto vertexView = Containers::arrayCast(vertexData); - vertexView[0] = {0.1f, 0.2f}; - vertexView[1] = {0.4f, 0.5f}; + auto vertices = Containers::arrayCast(vertexData); + Utility::copy({ + {0.1f, 0.2f}, + {0.4f, 0.5f}, + }, vertices); int importerState; - MeshIndexData indices{indexData}; - MeshAttributeData positions{MeshAttribute::Position, vertexView}; - MeshData data{MeshPrimitive::Triangles, instanceData.dataFlags, Containers::arrayView(indexData), indices, std::move(vertexData), {positions}, MeshData::ImplicitVertexCount, &importerState}; + MeshData data{MeshPrimitive::Triangles, + instanceData.dataFlags, indices, MeshIndexData{indices}, + std::move(vertexData), { + MeshAttributeData{MeshAttribute::Position, vertices} + }, + MeshData::ImplicitVertexCount, &importerState}; CORRADE_COMPARE(data.indexDataFlags(), instanceData.dataFlags); CORRADE_COMPARE(data.vertexDataFlags(), DataFlag::Owned|DataFlag::Mutable); CORRADE_COMPARE(data.primitive(), MeshPrimitive::Triangles); - CORRADE_COMPARE(static_cast(data.indexData()), +indexData); - CORRADE_COMPARE(static_cast(data.vertexData()), vertexView.data()); + CORRADE_COMPARE(static_cast(data.indexData()), +indices); + CORRADE_COMPARE(static_cast(data.vertexData()), vertices.data()); if(instanceData.dataFlags & DataFlag::Mutable) - CORRADE_COMPARE(static_cast(data.mutableIndexData()), +indexData); - CORRADE_COMPARE(static_cast(data.mutableVertexData()), vertexView.data()); + CORRADE_COMPARE(static_cast(data.mutableIndexData()), +indices); + CORRADE_COMPARE(static_cast(data.mutableVertexData()), vertices.data()); CORRADE_COMPARE(data.importerState(), &importerState); CORRADE_VERIFY(data.isIndexed()); @@ -2176,25 +2195,27 @@ void MeshDataTest::constructVerticesNotOwned() { setTestCaseDescription(instanceData.name); Containers::Array indexData{3*sizeof(UnsignedShort)}; - auto indexView = Containers::arrayCast(indexData); - indexView[0] = 0; - indexView[1] = 1; - indexView[2] = 0; - Vector2 vertexData[]{{0.1f, 0.2f}, {0.4f, 0.5f}}; + auto indices = Containers::arrayCast(indexData); + Utility::copy({0, 1, 0}, indices); + Vector2 vertices[]{{0.1f, 0.2f}, {0.4f, 0.5f}}; int importerState; - MeshIndexData indices{indexView}; - MeshAttributeData positions{MeshAttribute::Position, Containers::arrayView(vertexData)}; - MeshData data{MeshPrimitive::Triangles, std::move(indexData), indices, instanceData.dataFlags, Containers::arrayView(vertexData), {positions}, MeshData::ImplicitVertexCount, &importerState}; + MeshData data{MeshPrimitive::Triangles, + std::move(indexData), MeshIndexData{indices}, + instanceData.dataFlags, vertices, { + MeshAttributeData{MeshAttribute::Position, + Containers::arrayView(vertices)} + }, + MeshData::ImplicitVertexCount, &importerState}; CORRADE_COMPARE(data.indexDataFlags(), DataFlag::Owned|DataFlag::Mutable); CORRADE_COMPARE(data.vertexDataFlags(), instanceData.dataFlags); CORRADE_COMPARE(data.primitive(), MeshPrimitive::Triangles); - CORRADE_COMPARE(static_cast(data.indexData()), indexView.data()); - CORRADE_COMPARE(static_cast(data.vertexData()), +vertexData); - CORRADE_COMPARE(static_cast(data.mutableIndexData()), indexView.data()); + CORRADE_COMPARE(static_cast(data.indexData()), indices.data()); + CORRADE_COMPARE(static_cast(data.vertexData()), +vertices); + CORRADE_COMPARE(static_cast(data.mutableIndexData()), indices.data()); if(instanceData.dataFlags & DataFlag::Mutable) - CORRADE_COMPARE(static_cast(data.mutableVertexData()), +vertexData); + CORRADE_COMPARE(static_cast(data.mutableVertexData()), +vertices); CORRADE_COMPARE(data.importerState(), &importerState); CORRADE_VERIFY(data.isIndexed()); @@ -2223,11 +2244,15 @@ void MeshDataTest::constructIndexlessNotOwned() { auto&& instanceData = SingleNotOwnedData[testCaseInstanceId()]; setTestCaseDescription(instanceData.name); - Vector2 vertexData[]{{0.1f, 0.2f}, {0.4f, 0.5f}}; + Vector2 vertices[]{{0.1f, 0.2f}, {0.4f, 0.5f}}; int importerState; - MeshAttributeData positions{MeshAttribute::Position, Containers::arrayView(vertexData)}; - MeshData data{MeshPrimitive::LineLoop, instanceData.dataFlags, vertexData, {positions}, MeshData::ImplicitVertexCount, &importerState}; + MeshData data{MeshPrimitive::LineLoop, + instanceData.dataFlags, vertices, { + MeshAttributeData{MeshAttribute::Position, + Containers::arrayView(vertices)} + }, + MeshData::ImplicitVertexCount, &importerState}; CORRADE_COMPARE(data.indexDataFlags(), DataFlag::Owned|DataFlag::Mutable); CORRADE_COMPARE(data.vertexDataFlags(), instanceData.dataFlags); @@ -2250,11 +2275,12 @@ void MeshDataTest::constructAttributelessNotOwned() { auto&& instanceData = SingleNotOwnedData[testCaseInstanceId()]; setTestCaseDescription(instanceData.name); - UnsignedShort indexData[]{0, 1, 0}; + UnsignedShort indices[]{0, 1, 0}; int importerState; - MeshIndexData indices{indexData}; - MeshData data{MeshPrimitive::TriangleStrip, instanceData.dataFlags, indexData, indices, 5, &importerState}; + MeshData data{MeshPrimitive::TriangleStrip, + instanceData.dataFlags, indices, MeshIndexData{indices}, + 5, &importerState}; CORRADE_COMPARE(data.indexDataFlags(), instanceData.dataFlags); CORRADE_COMPARE(data.vertexDataFlags(), DataFlag::Owned|DataFlag::Mutable); CORRADE_COMPARE(data.primitive(), MeshPrimitive::TriangleStrip); @@ -2283,23 +2309,23 @@ void MeshDataTest::constructAttributelessNotOwned() { #ifndef CORRADE_TARGET_32BIT void MeshDataTest::constructIndicesOver4GB() { /* For some reason 2500 doesn't trigger an assertion, 3000 does */ - Containers::ArrayView indexData{reinterpret_cast(0xdeadbeef), 3000ull*1000*1000}; + Containers::ArrayView indices{reinterpret_cast(0xdeadbeef), 3000ull*1000*1000}; - MeshIndexData indices{indexData}; - MeshData data{MeshPrimitive::Triangles, {}, indexData, indices, 5}; - CORRADE_COMPARE(data.indices().data(), indexData.begin()); - CORRADE_COMPARE(data.indices().size(), indexData.size()); + MeshData data{MeshPrimitive::Triangles, + {}, indices, MeshIndexData{indices}, 5}; + CORRADE_COMPARE(data.indices().data(), indices.begin()); + CORRADE_COMPARE(data.indices().size(), indices.size()); } void MeshDataTest::constructAttributeOver4GB() { /* For some reason 2500 doesn't trigger an assertion, 3000 does */ - Containers::ArrayView vertexData{reinterpret_cast(0xdeadbeef), 3000ull*1000*1000}; + Containers::ArrayView vertices{reinterpret_cast(0xdeadbeef), 3000ull*1000*1000}; - MeshData data{MeshPrimitive::Triangles, {}, vertexData, { - MeshAttributeData{meshAttributeCustom(15), vertexData} + MeshData data{MeshPrimitive::Triangles, {}, vertices, { + MeshAttributeData{meshAttributeCustom(15), vertices} }}; - CORRADE_COMPARE(data.attribute(0).data(), vertexData.begin()); - CORRADE_COMPARE(data.attribute(0).size(), vertexData.size()); + CORRADE_COMPARE(data.attribute(0).data(), vertices.begin()); + CORRADE_COMPARE(data.attribute(0).size(), vertices.size()); } #endif @@ -2307,10 +2333,10 @@ void MeshDataTest::constructIndexDataButNotIndexed() { CORRADE_SKIP_IF_NO_ASSERT(); Containers::Array indexData{6}; + MeshAttributeData positions{MeshAttribute::Position, VertexFormat::Vector2, nullptr}; std::ostringstream out; Error redirectError{&out}; - MeshAttributeData positions{MeshAttribute::Position, VertexFormat::Vector2, nullptr}; MeshData{MeshPrimitive::Points, std::move(indexData), MeshIndexData{}, nullptr, {positions}}; CORRADE_COMPARE(out.str(), "Trade::MeshData: indexData passed for a non-indexed mesh\n"); } @@ -2494,8 +2520,10 @@ void MeshDataTest::constructInconsitentVertexCount() { CORRADE_SKIP_IF_NO_ASSERT(); Containers::Array vertexData{136}; - MeshAttributeData positions{MeshAttribute::Position, Containers::arrayCast(vertexData).prefix(3)}; - MeshAttributeData positions2{MeshAttribute::Position, Containers::arrayCast(vertexData).prefix(2)}; + MeshAttributeData positions{MeshAttribute::Position, + Containers::arrayCast(vertexData).prefix(3)}; + MeshAttributeData positions2{MeshAttribute::Position, + Containers::arrayCast(vertexData).prefix(2)}; std::ostringstream out; Error redirectError{&out}; @@ -2569,7 +2597,8 @@ void MeshDataTest::constructNotOwnedIndexFlagOwned() { const Vector2 vertexData[]{{0.1f, 0.2f}, {0.4f, 0.5f}}; MeshIndexData indices{indexData}; - MeshAttributeData positions{MeshAttribute::Position, Containers::arrayView(vertexData)}; + MeshAttributeData positions{MeshAttribute::Position, + Containers::arrayView(vertexData)}; std::ostringstream out; Error redirectError{&out}; @@ -2585,7 +2614,8 @@ void MeshDataTest::constructNotOwnedVertexFlagOwned() { const Vector2 vertexData[]{{0.1f, 0.2f}, {0.4f, 0.5f}}; MeshIndexData indices{indexData}; - MeshAttributeData positions{MeshAttribute::Position, Containers::arrayView(vertexData)}; + MeshAttributeData positions{MeshAttribute::Position, + Containers::arrayView(vertexData)}; std::ostringstream out; Error redirectError{&out}; @@ -2618,13 +2648,12 @@ void MeshDataTest::constructVerticesNotOwnedFlagOwned() { Containers::Array indexData{3*sizeof(UnsignedShort)}; auto indexView = Containers::arrayCast(indexData); - indexView[0] = 0; - indexView[1] = 1; - indexView[2] = 0; + Utility::copy({0, 1, 0}, indexView); Vector2 vertexData[]{{0.1f, 0.2f}, {0.4f, 0.5f}}; MeshIndexData indices{indexView}; - MeshAttributeData positions{MeshAttribute::Position, Containers::arrayView(vertexData)}; + MeshAttributeData positions{MeshAttribute::Position, + Containers::arrayView(vertexData)}; std::ostringstream out; Error redirectError{&out}; @@ -2637,7 +2666,8 @@ void MeshDataTest::constructIndexlessNotOwnedFlagOwned() { CORRADE_SKIP_IF_NO_ASSERT(); const Vector2 vertexData[]{{0.1f, 0.2f}, {0.4f, 0.5f}}; - MeshAttributeData positions{MeshAttribute::Position, Containers::arrayView(vertexData)}; + MeshAttributeData positions{MeshAttribute::Position, + Containers::arrayView(vertexData)}; std::ostringstream out; Error redirectError{&out}; @@ -2681,28 +2711,31 @@ void MeshDataTest::constructCopy() { void MeshDataTest::constructMove() { Containers::Array indexData{3*sizeof(UnsignedShort)}; - auto indexView = Containers::arrayCast(indexData); - indexView[0] = 0; - indexView[1] = 1; - indexView[2] = 0; + auto indices = Containers::arrayCast(indexData); + Utility::copy({0, 1, 0}, indices); Containers::Array vertexData{2*sizeof(Vector2)}; - auto vertexView = Containers::arrayCast(vertexData); - vertexView[0] = {0.1f, 0.2f}; - vertexView[1] = {0.4f, 0.5f}; + auto vertices = Containers::arrayCast(vertexData); + Utility::copy({ + {0.1f, 0.2f}, + {0.4f, 0.5f} + }, vertices); int importerState; - MeshIndexData indices{indexView}; - MeshAttributeData positions{MeshAttribute::Position, vertexView}; - MeshData a{MeshPrimitive::Triangles, std::move(indexData), indices, std::move(vertexData), {positions}, MeshData::ImplicitVertexCount, &importerState}; + MeshData a{MeshPrimitive::Triangles, + std::move(indexData), MeshIndexData{indices}, + std::move(vertexData), { + MeshAttributeData{MeshAttribute::Position, vertices} + }, + MeshData::ImplicitVertexCount, &importerState}; MeshData b{std::move(a)}; CORRADE_COMPARE(b.indexDataFlags(), DataFlag::Owned|DataFlag::Mutable); CORRADE_COMPARE(b.vertexDataFlags(), DataFlag::Owned|DataFlag::Mutable); CORRADE_COMPARE(b.primitive(), MeshPrimitive::Triangles); - CORRADE_COMPARE(static_cast(b.indexData()), indexView.data()); - CORRADE_COMPARE(static_cast(b.vertexData()), vertexView.data()); + CORRADE_COMPARE(static_cast(b.indexData()), indices.data()); + CORRADE_COMPARE(static_cast(b.vertexData()), vertices.data()); CORRADE_COMPARE(b.importerState(), &importerState); CORRADE_VERIFY(b.isIndexed()); @@ -2726,8 +2759,8 @@ void MeshDataTest::constructMove() { CORRADE_COMPARE(c.indexDataFlags(), DataFlag::Owned|DataFlag::Mutable); CORRADE_COMPARE(c.vertexDataFlags(), DataFlag::Owned|DataFlag::Mutable); CORRADE_COMPARE(c.primitive(), MeshPrimitive::Triangles); - CORRADE_COMPARE(static_cast(c.indexData()), indexView.data()); - CORRADE_COMPARE(static_cast(c.vertexData()), vertexView.data()); + CORRADE_COMPARE(static_cast(c.indexData()), indices.data()); + CORRADE_COMPARE(static_cast(c.vertexData()), vertices.data()); CORRADE_COMPARE(c.importerState(), &importerState); CORRADE_VERIFY(c.isIndexed()); @@ -2822,9 +2855,12 @@ template void MeshDataTest::positions2DAsArray() { auto view = Containers::stridedArrayView(vertices); MeshData data{MeshPrimitive::Points, {}, vertices, { - MeshAttributeData{MeshAttribute::Position, view.slice(&Vertex::otherPosition)}, - MeshAttributeData{MeshAttribute::ObjectId, view.slice(&Vertex::objectId)}, - MeshAttributeData{MeshAttribute::Position, view.slice(&Vertex::position)} + MeshAttributeData{MeshAttribute::Position, + view.slice(&Vertex::otherPosition)}, + MeshAttributeData{MeshAttribute::ObjectId, + view.slice(&Vertex::objectId)}, + MeshAttributeData{MeshAttribute::Position, + view.slice(&Vertex::position)} }}; CORRADE_COMPARE_AS(data.positions2DAsArray(1), Containers::arrayView({ {2.0f, 1.0f}, {0.0f, -1.0f}, {-2.0f, 3.0f} @@ -2842,7 +2878,8 @@ template void MeshDataTest::positions2DAsArrayPackedUnsigned() { }; MeshData data{MeshPrimitive::Points, {}, positions, { - MeshAttributeData{MeshAttribute::Position, Containers::arrayView(positions)} + MeshAttributeData{MeshAttribute::Position, + Containers::arrayView(positions)} }}; CORRADE_COMPARE_AS(data.positions2DAsArray(), Containers::arrayView({ {2.0f, 1.0f}, {0.0f, 15.0f}, {22.0f, 3.0f} @@ -2860,7 +2897,8 @@ template void MeshDataTest::positions2DAsArrayPackedSigned() { }; MeshData data{MeshPrimitive::Points, {}, positions, { - MeshAttributeData{MeshAttribute::Position, Containers::arrayView(positions)} + MeshAttributeData{MeshAttribute::Position, + Containers::arrayView(positions)} }}; CORRADE_COMPARE_AS(data.positions2DAsArray(), Containers::arrayView({ {2.0f, 1.0f}, {0.0f, -15.0f}, {-22.0f, 3.0f} @@ -2910,7 +2948,8 @@ void MeshDataTest::positions2DIntoArrayInvalidSize() { Vector2 positions[3]{}; MeshData data{MeshPrimitive::Points, {}, positions, { - MeshAttributeData{MeshAttribute::Position, Containers::arrayView(positions)} + MeshAttributeData{MeshAttribute::Position, + Containers::arrayView(positions)} }}; std::ostringstream out; @@ -2940,9 +2979,12 @@ template void MeshDataTest::positions3DAsArray() { auto view = Containers::stridedArrayView(vertices); MeshData data{MeshPrimitive::Points, {}, vertices, { - MeshAttributeData{MeshAttribute::Position, view.slice(&Vertex::otherPosition)}, - MeshAttributeData{MeshAttribute::ObjectId, view.slice(&Vertex::objectId)}, - MeshAttributeData{MeshAttribute::Position, view.slice(&Vertex::position)} + MeshAttributeData{MeshAttribute::Position, + view.slice(&Vertex::otherPosition)}, + MeshAttributeData{MeshAttribute::ObjectId, + view.slice(&Vertex::objectId)}, + MeshAttributeData{MeshAttribute::Position, + view.slice(&Vertex::position)} }}; CORRADE_COMPARE_AS(data.positions3DAsArray(1), Containers::arrayView({ Vector3::pad(Math::Vector::pad(Vector3{2.0f, 1.0f, 0.75f})), @@ -2962,7 +3004,8 @@ template void MeshDataTest::positions3DAsArrayPackedUnsigned() { }; MeshData data{MeshPrimitive::Points, {}, positions, { - MeshAttributeData{MeshAttribute::Position, Containers::arrayView(positions)} + MeshAttributeData{MeshAttribute::Position, + Containers::arrayView(positions)} }}; CORRADE_COMPARE_AS(data.positions3DAsArray(), Containers::arrayView({ Vector3::pad(Math::Vector::pad(Vector3{2.0f, 1.0f, 135.0f})), @@ -2982,7 +3025,8 @@ template void MeshDataTest::positions3DAsArrayPackedSigned() { }; MeshData data{MeshPrimitive::Points, {}, positions, { - MeshAttributeData{MeshAttribute::Position, Containers::arrayView(positions)} + MeshAttributeData{MeshAttribute::Position, + Containers::arrayView(positions)} }}; CORRADE_COMPARE_AS(data.positions3DAsArray(), Containers::arrayView({ Vector3::pad(Math::Vector::pad(Vector3{2.0f, 1.0f, -117.0f})), @@ -3036,7 +3080,8 @@ void MeshDataTest::positions3DIntoArrayInvalidSize() { Vector3 positions[3]{}; MeshData data{MeshPrimitive::Points, {}, positions, { - MeshAttributeData{MeshAttribute::Position, Containers::arrayView(positions)} + MeshAttributeData{MeshAttribute::Position, + Containers::arrayView(positions)} }}; std::ostringstream out; @@ -3066,9 +3111,12 @@ template void MeshDataTest::tangentsAsArray() { auto view = Containers::stridedArrayView(vertices); MeshData data{MeshPrimitive::Points, {}, vertices, { - MeshAttributeData{MeshAttribute::Tangent, view.slice(&Vertex::otherTangent)}, - MeshAttributeData{MeshAttribute::ObjectId, view.slice(&Vertex::objectId)}, - MeshAttributeData{MeshAttribute::Tangent, view.slice(&Vertex::tangent)} + MeshAttributeData{MeshAttribute::Tangent, + view.slice(&Vertex::otherTangent)}, + MeshAttributeData{MeshAttribute::ObjectId, + view.slice(&Vertex::objectId)}, + MeshAttributeData{MeshAttribute::Tangent, + view.slice(&Vertex::tangent)} }}; CORRADE_COMPARE_AS(data.tangentsAsArray(1), Containers::arrayView({ {2.0f, 1.0f, 0.75f}, {0.0f, -1.0f, 1.25f}, {-2.0f, 3.0f, 2.5f}, @@ -3099,7 +3147,8 @@ void MeshDataTest::tangentsIntoArrayInvalidSize() { Vector3 tangents[3]{}; MeshData data{MeshPrimitive::Points, {}, tangents, { - MeshAttributeData{MeshAttribute::Tangent, Containers::arrayView(tangents)} + MeshAttributeData{MeshAttribute::Tangent, + Containers::arrayView(tangents)} }}; std::ostringstream out; @@ -3128,9 +3177,12 @@ template void MeshDataTest::bitangentSignsAsArray() { auto view = Containers::stridedArrayView(vertices); MeshData data{MeshPrimitive::Points, {}, vertices, { - MeshAttributeData{MeshAttribute::Tangent, view.slice(&Vertex::otherTangent)}, - MeshAttributeData{MeshAttribute::ObjectId, view.slice(&Vertex::objectId)}, - MeshAttributeData{MeshAttribute::Tangent, view.slice(&Vertex::tangent)} + MeshAttributeData{MeshAttribute::Tangent, + view.slice(&Vertex::otherTangent)}, + MeshAttributeData{MeshAttribute::ObjectId, + view.slice(&Vertex::objectId)}, + MeshAttributeData{MeshAttribute::Tangent, + view.slice(&Vertex::tangent)} }}; CORRADE_COMPARE_AS(data.bitangentSignsAsArray(1), Containers::arrayView({ -1.0f, 1.0f, -1.0f @@ -3160,7 +3212,8 @@ void MeshDataTest::bitangentSignsAsArrayNotFourComponent() { Vector3s tangents[3]{}; MeshData data{MeshPrimitive::Points, {}, tangents, { - MeshAttributeData{MeshAttribute::Tangent, VertexFormat::Vector3sNormalized, Containers::arrayView(tangents)} + MeshAttributeData{MeshAttribute::Tangent, + VertexFormat::Vector3sNormalized, Containers::arrayView(tangents)} }}; std::ostringstream out; @@ -3176,7 +3229,8 @@ void MeshDataTest::bitangentSignsIntoArrayInvalidSize() { Vector4 tangents[3]{}; MeshData data{MeshPrimitive::Points, {}, tangents, { - MeshAttributeData{MeshAttribute::Tangent, Containers::arrayView(tangents)} + MeshAttributeData{MeshAttribute::Tangent, + Containers::arrayView(tangents)} }}; std::ostringstream out; @@ -3206,9 +3260,12 @@ template void MeshDataTest::bitangentsAsArray() { auto view = Containers::stridedArrayView(vertices); MeshData data{MeshPrimitive::Points, {}, vertices, { - MeshAttributeData{MeshAttribute::Bitangent, view.slice(&Vertex::otherBitangent)}, - MeshAttributeData{MeshAttribute::ObjectId, view.slice(&Vertex::objectId)}, - MeshAttributeData{MeshAttribute::Bitangent, view.slice(&Vertex::bitangent)} + MeshAttributeData{MeshAttribute::Bitangent, + view.slice(&Vertex::otherBitangent)}, + MeshAttributeData{MeshAttribute::ObjectId, + view.slice(&Vertex::objectId)}, + MeshAttributeData{MeshAttribute::Bitangent, + view.slice(&Vertex::bitangent)} }}; CORRADE_COMPARE_AS(data.bitangentsAsArray(1), Containers::arrayView({ {2.0f, 1.0f, 0.75f}, {0.0f, -1.0f, 1.25f}, {-2.0f, 3.0f, 2.5f}, @@ -3239,7 +3296,8 @@ void MeshDataTest::bitangentsIntoArrayInvalidSize() { Vector3 bitangents[3]{}; MeshData data{MeshPrimitive::Points, {}, bitangents, { - MeshAttributeData{MeshAttribute::Bitangent, Containers::arrayView(bitangents)} + MeshAttributeData{MeshAttribute::Bitangent, + Containers::arrayView(bitangents)} }}; std::ostringstream out; @@ -3269,9 +3327,12 @@ template void MeshDataTest::normalsAsArray() { auto view = Containers::stridedArrayView(vertices); MeshData data{MeshPrimitive::Points, {}, vertices, { - MeshAttributeData{MeshAttribute::Normal, view.slice(&Vertex::otherNormal)}, - MeshAttributeData{MeshAttribute::ObjectId, view.slice(&Vertex::objectId)}, - MeshAttributeData{MeshAttribute::Normal, view.slice(&Vertex::normal)} + MeshAttributeData{MeshAttribute::Normal, + view.slice(&Vertex::otherNormal)}, + MeshAttributeData{MeshAttribute::ObjectId, + view.slice(&Vertex::objectId)}, + MeshAttributeData{MeshAttribute::Normal, + view.slice(&Vertex::normal)} }}; CORRADE_COMPARE_AS(data.normalsAsArray(1), Containers::arrayView({ {2.0f, 1.0f, 0.75f}, {0.0f, -1.0f, 1.25f}, {-2.0f, 3.0f, 2.5f}, @@ -3332,9 +3393,12 @@ template void MeshDataTest::textureCoordinates2DAsArray() { auto view = Containers::stridedArrayView(vertices); MeshData data{MeshPrimitive::Points, {}, vertices, { - MeshAttributeData{MeshAttribute::TextureCoordinates, view.slice(&Vertex::otherTextureCoordinate)}, - MeshAttributeData{MeshAttribute::ObjectId, view.slice(&Vertex::objectId)}, - MeshAttributeData{MeshAttribute::TextureCoordinates, view.slice(&Vertex::textureCoordinate)} + MeshAttributeData{MeshAttribute::TextureCoordinates, + view.slice(&Vertex::otherTextureCoordinate)}, + MeshAttributeData{MeshAttribute::ObjectId, + view.slice(&Vertex::objectId)}, + MeshAttributeData{MeshAttribute::TextureCoordinates, + view.slice(&Vertex::textureCoordinate)} }}; CORRADE_COMPARE_AS(data.textureCoordinates2DAsArray(1), Containers::arrayView({ {2.0f, 1.0f}, {0.0f, -1.0f}, {-2.0f, 3.0f}, @@ -3351,7 +3415,8 @@ template void MeshDataTest::textureCoordinates2DAsArrayPackedUnsigned() }; MeshData data{MeshPrimitive::Points, {}, textureCoordinates, { - MeshAttributeData{MeshAttribute::TextureCoordinates, Containers::arrayView(textureCoordinates)} + MeshAttributeData{MeshAttribute::TextureCoordinates, + Containers::arrayView(textureCoordinates)} }}; CORRADE_COMPARE_AS(data.textureCoordinates2DAsArray(), Containers::arrayView({ {2.0f, 1.0f}, {0.0f, 15.0f}, {22.0f, 3.0f} @@ -3368,7 +3433,8 @@ template void MeshDataTest::textureCoordinates2DAsArrayPackedSigned() { }; MeshData data{MeshPrimitive::Points, {}, textureCoordinates, { - MeshAttributeData{MeshAttribute::TextureCoordinates, Containers::arrayView(textureCoordinates)} + MeshAttributeData{MeshAttribute::TextureCoordinates, + Containers::arrayView(textureCoordinates)} }}; CORRADE_COMPARE_AS(data.textureCoordinates2DAsArray(), Containers::arrayView({ {2.0f, 1.0f}, {0.0f, -15.0f}, {-22.0f, 3.0f} @@ -3447,9 +3513,12 @@ template void MeshDataTest::colorsAsArray() { auto view = Containers::stridedArrayView(vertices); MeshData data{MeshPrimitive::Points, {}, vertices, { - MeshAttributeData{MeshAttribute::Color, view.slice(&Vertex::otherColor)}, - MeshAttributeData{MeshAttribute::ObjectId, view.slice(&Vertex::objectId)}, - MeshAttributeData{MeshAttribute::Color, view.slice(&Vertex::color)} + MeshAttributeData{MeshAttribute::Color, + view.slice(&Vertex::otherColor)}, + MeshAttributeData{MeshAttribute::ObjectId, + view.slice(&Vertex::objectId)}, + MeshAttributeData{MeshAttribute::Color, + view.slice(&Vertex::color)} }}; CORRADE_COMPARE_AS(data.colorsAsArray(1), Containers::arrayView({ {2.0f, 1.0f, 0.75f}, {0.0f, -1.0f, 1.25f}, {-2.0f, 3.0f, 2.5f}, @@ -3525,7 +3594,8 @@ template void MeshDataTest::jointIdsAsArray() { MeshAttributeData{MeshAttribute::JointIds, Implementation::vertexFormatFor(), view.slice(&Vertex::otherJointIds), 3}, - MeshAttributeData{MeshAttribute::ObjectId, view.slice(&Vertex::objectId)}, + MeshAttributeData{MeshAttribute::ObjectId, + view.slice(&Vertex::objectId)}, MeshAttributeData{MeshAttribute::JointIds, Implementation::vertexFormatFor(), view.slice(&Vertex::jointIds), 5}, @@ -3692,9 +3762,12 @@ template void MeshDataTest::objectIdsAsArray() { auto view = Containers::stridedArrayView(vertices); MeshData data{MeshPrimitive::Points, {}, vertices, { - MeshAttributeData{MeshAttribute::ObjectId, view.slice(&Vertex::otherObjectId)}, - MeshAttributeData{MeshAttribute::Position, view.slice(&Vertex::position)}, - MeshAttributeData{MeshAttribute::ObjectId, view.slice(&Vertex::objectId)} + MeshAttributeData{MeshAttribute::ObjectId, + view.slice(&Vertex::otherObjectId)}, + MeshAttributeData{MeshAttribute::Position, + view.slice(&Vertex::position)}, + MeshAttributeData{MeshAttribute::ObjectId, + view.slice(&Vertex::objectId)} }}; CORRADE_COMPARE_AS(data.objectIdsAsArray(1), Containers::arrayView({ 157, 24, 1 @@ -3706,7 +3779,8 @@ void MeshDataTest::objectIdsIntoArrayInvalidSize() { UnsignedInt objectIds[3]{}; MeshData data{MeshPrimitive::Points, {}, objectIds, { - MeshAttributeData{MeshAttribute::ObjectId, Containers::arrayView(objectIds)} + MeshAttributeData{MeshAttribute::ObjectId, + Containers::arrayView(objectIds)} }}; std::ostringstream out; @@ -3811,12 +3885,14 @@ void MeshDataTest::implementationSpecificVertexFormatWrongAccess() { void MeshDataTest::mutableAccessNotAllowed() { CORRADE_SKIP_IF_NO_ASSERT(); - const UnsignedShort indexData[3]{}; - const Vector2 vertexData[2]{}; - - MeshIndexData indices{indexData}; - MeshAttributeData positions{MeshAttribute::Position, Containers::arrayView(vertexData)}; - MeshData data{MeshPrimitive::Triangles, {}, indexData, indices, {}, vertexData, {positions}}; + const UnsignedShort indices[3]{}; + const Vector2 vertices[2]{}; + MeshData data{MeshPrimitive::Triangles, + {}, indices, MeshIndexData{indices}, + {}, vertices, { + MeshAttributeData{MeshAttribute::Position, + Containers::arrayView(vertices)} + }}; CORRADE_COMPARE(data.indexDataFlags(), DataFlags{}); CORRADE_COMPARE(data.vertexDataFlags(), DataFlags{}); @@ -3876,9 +3952,9 @@ void MeshDataTest::indicesWrongType() { CORRADE_SKIP_IF_NO_ASSERT(); Containers::Array indexData{sizeof(UnsignedShort)}; - auto indexView = Containers::arrayCast(indexData); - indexView[0] = 57616; - MeshData data{MeshPrimitive::Points, std::move(indexData), MeshIndexData{indexView}, 57617}; + auto indices = Containers::arrayCast(indexData); + indices[0] = 57616; + MeshData data{MeshPrimitive::Points, std::move(indexData), MeshIndexData{indices}, 57617}; std::ostringstream out; Error redirectError{&out}; @@ -4017,8 +4093,9 @@ void MeshDataTest::attributeNotFound() { void MeshDataTest::attributeWrongType() { CORRADE_SKIP_IF_NO_ASSERT(); - MeshAttributeData positions{MeshAttribute::Position, VertexFormat::Vector3, nullptr}; - MeshData data{MeshPrimitive::Points, nullptr, {positions}}; + MeshData data{MeshPrimitive::Points, nullptr, { + MeshAttributeData{MeshAttribute::Position, VertexFormat::Vector3, nullptr} + }}; std::ostringstream out; Error redirectError{&out}; @@ -4065,15 +4142,15 @@ void MeshDataTest::attributeWrongArrayAccess() { void MeshDataTest::releaseIndexData() { Containers::Array indexData{23}; - auto indexView = Containers::arrayCast(indexData.slice(6, 12)); + auto indices = Containers::arrayCast(indexData.slice(6, 12)); - MeshData data{MeshPrimitive::TriangleStrip, std::move(indexData), MeshIndexData{indexView}, 10}; + MeshData data{MeshPrimitive::TriangleStrip, std::move(indexData), MeshIndexData{indices}, 10}; CORRADE_VERIFY(data.isIndexed()); CORRADE_COMPARE(data.indexCount(), 3); CORRADE_COMPARE(data.indexOffset(), 6); Containers::Array released = data.releaseIndexData(); - CORRADE_COMPARE(static_cast(released.data() + 6), indexView.data()); + CORRADE_COMPARE(static_cast(released.data() + 6), indices.data()); /* This is not null as we still need the value for calculating offsets */ CORRADE_COMPARE(static_cast(data.indexData()), released.data()); CORRADE_COMPARE(data.indexData().size(), 0); @@ -4085,30 +4162,34 @@ void MeshDataTest::releaseIndexData() { void MeshDataTest::releaseAttributeData() { Containers::Array vertexData{16}; - auto vertexView = Containers::arrayCast(vertexData); + auto vertices = Containers::arrayCast(vertexData); - MeshAttributeData positions{MeshAttribute::Position, vertexView}; - MeshData data{MeshPrimitive::LineLoop, std::move(vertexData), {positions, positions}}; + MeshData data{MeshPrimitive::LineLoop, std::move(vertexData), { + MeshAttributeData{MeshAttribute::Position, vertices}, + MeshAttributeData{MeshAttribute::Position, vertices} + }}; CORRADE_COMPARE(data.attributeCount(), 2); Containers::Array released = data.releaseAttributeData(); CORRADE_COMPARE(released.size(), 2); - CORRADE_COMPARE(static_cast(released[0].data().data()), vertexView.data()); + CORRADE_COMPARE(static_cast(released[0].data().data()), vertices.data()); CORRADE_COMPARE(released[0].data().size(), 2); /* Unlike the other two, this is null as we don't need the value for calculating anything */ CORRADE_COMPARE(static_cast(data.attributeData()), nullptr); CORRADE_COMPARE(data.attributeCount(), 0); - CORRADE_COMPARE(static_cast(data.vertexData()), vertexView); + CORRADE_COMPARE(static_cast(data.vertexData()), vertices); CORRADE_COMPARE(data.vertexCount(), 2); } void MeshDataTest::releaseVertexData() { Containers::Array vertexData{80}; - auto vertexView = Containers::arrayCast(vertexData.slice(48, 72)); + auto vertices = Containers::arrayCast(vertexData.slice(48, 72)); - MeshAttributeData positions{MeshAttribute::Position, vertexView}; - MeshData data{MeshPrimitive::LineLoop, std::move(vertexData), {positions, positions}}; + MeshData data{MeshPrimitive::LineLoop, std::move(vertexData), { + MeshAttributeData{MeshAttribute::Position, vertices}, + MeshAttributeData{MeshAttribute::Position, vertices} + }}; CORRADE_COMPARE(data.attributeCount(), 2); CORRADE_COMPARE(data.vertexCount(), 3); CORRADE_COMPARE(data.attributeOffset(0), 48); @@ -4116,14 +4197,14 @@ void MeshDataTest::releaseVertexData() { Containers::Array released = data.releaseVertexData(); CORRADE_VERIFY(data.attributeData()); CORRADE_COMPARE(data.attributeCount(), 2); - CORRADE_COMPARE(static_cast(static_cast(data.attribute(0).data())), vertexView.data()); - CORRADE_COMPARE(static_cast(static_cast(data.mutableAttribute(0).data())), vertexView.data()); + CORRADE_COMPARE(static_cast(static_cast(data.attribute(0).data())), vertices.data()); + CORRADE_COMPARE(static_cast(static_cast(data.mutableAttribute(0).data())), vertices.data()); /* Returned views should be patched to have zero size (but not the direct access, there it stays as it's an internal API really) */ CORRADE_COMPARE(data.attribute(0).size()[0], 0); CORRADE_COMPARE(data.mutableAttribute(0).size()[0], 0); CORRADE_COMPARE(data.attributeData()[0].data().size(), 3); - CORRADE_COMPARE(static_cast(released.data() + 48), vertexView.data()); + CORRADE_COMPARE(static_cast(released.data() + 48), vertices.data()); /* This is not null as we still need the value for calculating offsets */ CORRADE_COMPARE(static_cast(data.vertexData()), released.data()); CORRADE_COMPARE(data.vertexCount(), 0);