From 25320af545a2e3d637dd4e5b8de6ee2cb3609c80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Thu, 2 Sep 2021 16:06:59 +0200 Subject: [PATCH] Trade: pass strided views by const&. Those have 3 pointers at least, my limit for passing by value is trivial copyability and two pointers. I hope that reflects the actual HW at least vaguely, heh. --- src/Magnum/Trade/MeshData.cpp | 22 +++++++++++----------- src/Magnum/Trade/MeshData.h | 20 ++++++++++---------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src/Magnum/Trade/MeshData.cpp b/src/Magnum/Trade/MeshData.cpp index bc1f62a1d..54f1d0165 100644 --- a/src/Magnum/Trade/MeshData.cpp +++ b/src/Magnum/Trade/MeshData.cpp @@ -417,7 +417,7 @@ Containers::StridedArrayView2D MeshData::mutableAttribute(const MeshAttrib return mutableAttribute(attributeId); } -void MeshData::indicesInto(const Containers::StridedArrayView1D destination) const { +void MeshData::indicesInto(const Containers::StridedArrayView1D& destination) const { CORRADE_ASSERT(isIndexed(), "Trade::MeshData::indicesInto(): the mesh is not indexed", ); CORRADE_ASSERT(destination.size() == indexCount(), "Trade::MeshData::indicesInto(): expected a view with" << indexCount() << "elements but got" << destination.size(), ); @@ -441,7 +441,7 @@ Containers::Array MeshData::indicesAsArray() const { return output; } -void MeshData::positions2DInto(const Containers::StridedArrayView1D destination, const UnsignedInt id) const { +void MeshData::positions2DInto(const Containers::StridedArrayView1D& destination, const UnsignedInt id) const { const UnsignedInt attributeId = attributeFor(MeshAttribute::Position, id); CORRADE_ASSERT(attributeId != ~UnsignedInt{}, "Trade::MeshData::positions2DInto(): index" << id << "out of range for" << attributeCount(MeshAttribute::Position) << "position attributes", ); CORRADE_ASSERT(destination.size() == _vertexCount, "Trade::MeshData::positions2DInto(): expected a view with" << _vertexCount << "elements but got" << destination.size(), ); @@ -491,7 +491,7 @@ Containers::Array MeshData::positions2DAsArray(const UnsignedInt id) co return out; } -void MeshData::positions3DInto(const Containers::StridedArrayView1D destination, const UnsignedInt id) const { +void MeshData::positions3DInto(const Containers::StridedArrayView1D& destination, const UnsignedInt id) const { const UnsignedInt attributeId = attributeFor(MeshAttribute::Position, id); CORRADE_ASSERT(attributeId != ~UnsignedInt{}, "Trade::MeshData::positions3DInto(): index" << id << "out of range for" << attributeCount(MeshAttribute::Position) << "position attributes", ); CORRADE_ASSERT(destination.size() == _vertexCount, "Trade::MeshData::positions3DInto(): expected a view with" << _vertexCount << "elements but got" << destination.size(), ); @@ -574,7 +574,7 @@ Containers::Array MeshData::positions3DAsArray(const UnsignedInt id) co namespace { -void tangentsOrNormalsInto(const Containers::StridedArrayView1D attributeData, const Containers::StridedArrayView1D destination, VertexFormat format) { +void tangentsOrNormalsInto(const Containers::StridedArrayView1D& attributeData, const Containers::StridedArrayView1D& destination, VertexFormat format) { const auto destination3f = Containers::arrayCast<2, Float>(destination); if(format == VertexFormat::Vector3) @@ -590,7 +590,7 @@ void tangentsOrNormalsInto(const Containers::StridedArrayView1D attr } -void MeshData::tangentsInto(const Containers::StridedArrayView1D destination, const UnsignedInt id) const { +void MeshData::tangentsInto(const Containers::StridedArrayView1D& destination, const UnsignedInt id) const { const UnsignedInt attributeId = attributeFor(MeshAttribute::Tangent, id); CORRADE_ASSERT(attributeId != ~UnsignedInt{}, "Trade::MeshData::tangentsInto(): index" << id << "out of range for" << attributeCount(MeshAttribute::Tangent) << "tangent attributes", ); CORRADE_ASSERT(destination.size() == _vertexCount, "Trade::MeshData::tangentsInto(): expected a view with" << _vertexCount << "elements but got" << destination.size(), ); @@ -619,7 +619,7 @@ Containers::Array MeshData::tangentsAsArray(const UnsignedInt id) const return out; } -void MeshData::bitangentSignsInto(const Containers::StridedArrayView1D destination, const UnsignedInt id) const { +void MeshData::bitangentSignsInto(const Containers::StridedArrayView1D& destination, const UnsignedInt id) const { const UnsignedInt attributeId = attributeFor(MeshAttribute::Tangent, id); CORRADE_ASSERT(attributeId != ~UnsignedInt{}, "Trade::MeshData::bitangentSignsInto(): index" << id << "out of range for" << attributeCount(MeshAttribute::Tangent) << "tangent attributes", ); CORRADE_ASSERT(destination.size() == _vertexCount, "Trade::MeshData::bitangentSignsInto(): expected a view with" << _vertexCount << "elements but got" << destination.size(), ); @@ -646,7 +646,7 @@ Containers::Array MeshData::bitangentSignsAsArray(const UnsignedInt id) c return out; } -void MeshData::bitangentsInto(const Containers::StridedArrayView1D destination, const UnsignedInt id) const { +void MeshData::bitangentsInto(const Containers::StridedArrayView1D& destination, const UnsignedInt id) const { const UnsignedInt attributeId = attributeFor(MeshAttribute::Bitangent, id); CORRADE_ASSERT(attributeId != ~UnsignedInt{}, "Trade::MeshData::bitangentsInto(): index" << id << "out of range for" << attributeCount(MeshAttribute::Bitangent) << "bitangent attributes", ); CORRADE_ASSERT(destination.size() == _vertexCount, "Trade::MeshData::bitangentsInto(): expected a view with" << _vertexCount << "elements but got" << destination.size(), ); @@ -662,7 +662,7 @@ Containers::Array MeshData::bitangentsAsArray(const UnsignedInt id) con return out; } -void MeshData::normalsInto(const Containers::StridedArrayView1D destination, const UnsignedInt id) const { +void MeshData::normalsInto(const Containers::StridedArrayView1D& destination, const UnsignedInt id) const { const UnsignedInt attributeId = attributeFor(MeshAttribute::Normal, id); CORRADE_ASSERT(attributeId != ~UnsignedInt{}, "Trade::MeshData::normalsInto(): index" << id << "out of range for" << attributeCount(MeshAttribute::Normal) << "normal attributes", ); CORRADE_ASSERT(destination.size() == _vertexCount, "Trade::MeshData::normalsInto(): expected a view with" << _vertexCount << "elements but got" << destination.size(), ); @@ -678,7 +678,7 @@ Containers::Array MeshData::normalsAsArray(const UnsignedInt id) const return out; } -void MeshData::textureCoordinates2DInto(const Containers::StridedArrayView1D destination, const UnsignedInt id) const { +void MeshData::textureCoordinates2DInto(const Containers::StridedArrayView1D& destination, const UnsignedInt id) const { const UnsignedInt attributeId = attributeFor(MeshAttribute::TextureCoordinates, id); CORRADE_ASSERT(attributeId != ~UnsignedInt{}, "Trade::MeshData::textureCoordinates2DInto(): index" << id << "out of range for" << attributeCount(MeshAttribute::TextureCoordinates) << "texture coordinate attributes", ); CORRADE_ASSERT(destination.size() == _vertexCount, "Trade::MeshData::textureCoordinates2DInto(): expected a view with" << _vertexCount << "elements but got" << destination.size(), ); @@ -717,7 +717,7 @@ Containers::Array MeshData::textureCoordinates2DAsArray(const UnsignedI return out; } -void MeshData::colorsInto(const Containers::StridedArrayView1D destination, const UnsignedInt id) const { +void MeshData::colorsInto(const Containers::StridedArrayView1D& destination, const UnsignedInt id) const { const UnsignedInt attributeId = attributeFor(MeshAttribute::Color, id); CORRADE_ASSERT(attributeId != ~UnsignedInt{}, "Trade::MeshData::colorsInto(): index" << id << "out of range for" << attributeCount(MeshAttribute::Color) << "color attributes", ); CORRADE_ASSERT(destination.size() == _vertexCount, "Trade::MeshData::colorsInto(): expected a view with" << _vertexCount << "elements but got" << destination.size(), ); @@ -770,7 +770,7 @@ Containers::Array MeshData::colorsAsArray(const UnsignedInt id) const { return out; } -void MeshData::objectIdsInto(const Containers::StridedArrayView1D destination, const UnsignedInt id) const { +void MeshData::objectIdsInto(const Containers::StridedArrayView1D& destination, const UnsignedInt id) const { const UnsignedInt attributeId = attributeFor(MeshAttribute::ObjectId, id); CORRADE_ASSERT(attributeId != ~UnsignedInt{}, "Trade::MeshData::objectIdsInto(): index" << id << "out of range for" << attributeCount(MeshAttribute::ObjectId) << "object ID attributes", ); CORRADE_ASSERT(destination.size() == _vertexCount, "Trade::MeshData::objectIdsInto(): expected a view with" << _vertexCount << "elements but got" << destination.size(), ); diff --git a/src/Magnum/Trade/MeshData.h b/src/Magnum/Trade/MeshData.h index 02cf80f62..6377bafde 100644 --- a/src/Magnum/Trade/MeshData.h +++ b/src/Magnum/Trade/MeshData.h @@ -1484,7 +1484,7 @@ class MAGNUM_TRADE_EXPORT MeshData { * sized to contain exactly all data. * @see @ref indexCount() */ - void indicesInto(Containers::StridedArrayView1D destination) const; + void indicesInto(const Containers::StridedArrayView1D& destination) const; /** * @brief Positions as 2D float vectors @@ -1509,7 +1509,7 @@ class MAGNUM_TRADE_EXPORT MeshData { * @p destination is sized to contain exactly all data. * @see @ref vertexCount() */ - void positions2DInto(Containers::StridedArrayView1D destination, UnsignedInt id = 0) const; + void positions2DInto(const Containers::StridedArrayView1D& destination, UnsignedInt id = 0) const; /** * @brief Positions as 3D float vectors @@ -1534,7 +1534,7 @@ class MAGNUM_TRADE_EXPORT MeshData { * @p destination is sized to contain exactly all data. * @see @ref vertexCount() */ - void positions3DInto(Containers::StridedArrayView1D destination, UnsignedInt id = 0) const; + void positions3DInto(const Containers::StridedArrayView1D& destination, UnsignedInt id = 0) const; /** * @brief Tangents as 3D float vectors @@ -1564,7 +1564,7 @@ class MAGNUM_TRADE_EXPORT MeshData { * sized to contain exactly all data. * @see @ref vertexCount() */ - void tangentsInto(Containers::StridedArrayView1D destination, UnsignedInt id = 0) const; + void tangentsInto(const Containers::StridedArrayView1D& destination, UnsignedInt id = 0) const; /** * @brief Bitangent signs as floats @@ -1587,7 +1587,7 @@ class MAGNUM_TRADE_EXPORT MeshData { * @p destination is sized to contain exactly all data. * @see @ref vertexCount() */ - void bitangentSignsInto(Containers::StridedArrayView1D destination, UnsignedInt id = 0) const; + void bitangentSignsInto(const Containers::StridedArrayView1D& destination, UnsignedInt id = 0) const; /** * @brief Bitangents as 3D float vectors @@ -1618,7 +1618,7 @@ class MAGNUM_TRADE_EXPORT MeshData { * @p destination is sized to contain exactly all data. * @see @ref vertexCount() */ - void bitangentsInto(Containers::StridedArrayView1D destination, UnsignedInt id = 0) const; + void bitangentsInto(const Containers::StridedArrayView1D& destination, UnsignedInt id = 0) const; /** * @brief Normals as 3D float vectors @@ -1643,7 +1643,7 @@ class MAGNUM_TRADE_EXPORT MeshData { * sized to contain exactly all data. * @see @ref vertexCount() */ - void normalsInto(Containers::StridedArrayView1D destination, UnsignedInt id = 0) const; + void normalsInto(const Containers::StridedArrayView1D& destination, UnsignedInt id = 0) const; /** * @brief Texture coordinates as 2D float vectors @@ -1668,7 +1668,7 @@ class MAGNUM_TRADE_EXPORT MeshData { * @p destination is sized to contain exactly all data. * @see @ref vertexCount() */ - void textureCoordinates2DInto(Containers::StridedArrayView1D destination, UnsignedInt id = 0) const; + void textureCoordinates2DInto(const Containers::StridedArrayView1D& destination, UnsignedInt id = 0) const; /** * @brief Colors as RGBA floats @@ -1693,7 +1693,7 @@ class MAGNUM_TRADE_EXPORT MeshData { * sized to contain exactly all data. * @see @ref vertexCount() */ - void colorsInto(Containers::StridedArrayView1D destination, UnsignedInt id = 0) const; + void colorsInto(const Containers::StridedArrayView1D& destination, UnsignedInt id = 0) const; /** * @brief Object IDs as 32-bit integers @@ -1717,7 +1717,7 @@ class MAGNUM_TRADE_EXPORT MeshData { * @p destination is sized to contain exactly all data. * @see @ref vertexCount() */ - void objectIdsInto(Containers::StridedArrayView1D destination, UnsignedInt id = 0) const; + void objectIdsInto(const Containers::StridedArrayView1D& destination, UnsignedInt id = 0) const; /** * @brief Release index data storage