Browse Source

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.
pull/537/head
Vladimír Vondruš 5 years ago
parent
commit
25320af545
  1. 22
      src/Magnum/Trade/MeshData.cpp
  2. 20
      src/Magnum/Trade/MeshData.h

22
src/Magnum/Trade/MeshData.cpp

@ -417,7 +417,7 @@ Containers::StridedArrayView2D<char> MeshData::mutableAttribute(const MeshAttrib
return mutableAttribute(attributeId);
}
void MeshData::indicesInto(const Containers::StridedArrayView1D<UnsignedInt> destination) const {
void MeshData::indicesInto(const Containers::StridedArrayView1D<UnsignedInt>& 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<UnsignedInt> MeshData::indicesAsArray() const {
return output;
}
void MeshData::positions2DInto(const Containers::StridedArrayView1D<Vector2> destination, const UnsignedInt id) const {
void MeshData::positions2DInto(const Containers::StridedArrayView1D<Vector2>& 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<Vector2> MeshData::positions2DAsArray(const UnsignedInt id) co
return out;
}
void MeshData::positions3DInto(const Containers::StridedArrayView1D<Vector3> destination, const UnsignedInt id) const {
void MeshData::positions3DInto(const Containers::StridedArrayView1D<Vector3>& 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<Vector3> MeshData::positions3DAsArray(const UnsignedInt id) co
namespace {
void tangentsOrNormalsInto(const Containers::StridedArrayView1D<const void> attributeData, const Containers::StridedArrayView1D<Vector3> destination, VertexFormat format) {
void tangentsOrNormalsInto(const Containers::StridedArrayView1D<const void>& attributeData, const Containers::StridedArrayView1D<Vector3>& destination, VertexFormat format) {
const auto destination3f = Containers::arrayCast<2, Float>(destination);
if(format == VertexFormat::Vector3)
@ -590,7 +590,7 @@ void tangentsOrNormalsInto(const Containers::StridedArrayView1D<const void> attr
}
void MeshData::tangentsInto(const Containers::StridedArrayView1D<Vector3> destination, const UnsignedInt id) const {
void MeshData::tangentsInto(const Containers::StridedArrayView1D<Vector3>& 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<Vector3> MeshData::tangentsAsArray(const UnsignedInt id) const
return out;
}
void MeshData::bitangentSignsInto(const Containers::StridedArrayView1D<Float> destination, const UnsignedInt id) const {
void MeshData::bitangentSignsInto(const Containers::StridedArrayView1D<Float>& 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<Float> MeshData::bitangentSignsAsArray(const UnsignedInt id) c
return out;
}
void MeshData::bitangentsInto(const Containers::StridedArrayView1D<Vector3> destination, const UnsignedInt id) const {
void MeshData::bitangentsInto(const Containers::StridedArrayView1D<Vector3>& 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<Vector3> MeshData::bitangentsAsArray(const UnsignedInt id) con
return out;
}
void MeshData::normalsInto(const Containers::StridedArrayView1D<Vector3> destination, const UnsignedInt id) const {
void MeshData::normalsInto(const Containers::StridedArrayView1D<Vector3>& 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<Vector3> MeshData::normalsAsArray(const UnsignedInt id) const
return out;
}
void MeshData::textureCoordinates2DInto(const Containers::StridedArrayView1D<Vector2> destination, const UnsignedInt id) const {
void MeshData::textureCoordinates2DInto(const Containers::StridedArrayView1D<Vector2>& 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<Vector2> MeshData::textureCoordinates2DAsArray(const UnsignedI
return out;
}
void MeshData::colorsInto(const Containers::StridedArrayView1D<Color4> destination, const UnsignedInt id) const {
void MeshData::colorsInto(const Containers::StridedArrayView1D<Color4>& 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<Color4> MeshData::colorsAsArray(const UnsignedInt id) const {
return out;
}
void MeshData::objectIdsInto(const Containers::StridedArrayView1D<UnsignedInt> destination, const UnsignedInt id) const {
void MeshData::objectIdsInto(const Containers::StridedArrayView1D<UnsignedInt>& 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(), );

20
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<UnsignedInt> destination) const;
void indicesInto(const Containers::StridedArrayView1D<UnsignedInt>& 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<Vector2> destination, UnsignedInt id = 0) const;
void positions2DInto(const Containers::StridedArrayView1D<Vector2>& 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<Vector3> destination, UnsignedInt id = 0) const;
void positions3DInto(const Containers::StridedArrayView1D<Vector3>& 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<Vector3> destination, UnsignedInt id = 0) const;
void tangentsInto(const Containers::StridedArrayView1D<Vector3>& 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<Float> destination, UnsignedInt id = 0) const;
void bitangentSignsInto(const Containers::StridedArrayView1D<Float>& 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<Vector3> destination, UnsignedInt id = 0) const;
void bitangentsInto(const Containers::StridedArrayView1D<Vector3>& 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<Vector3> destination, UnsignedInt id = 0) const;
void normalsInto(const Containers::StridedArrayView1D<Vector3>& 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<Vector2> destination, UnsignedInt id = 0) const;
void textureCoordinates2DInto(const Containers::StridedArrayView1D<Vector2>& 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<Color4> destination, UnsignedInt id = 0) const;
void colorsInto(const Containers::StridedArrayView1D<Color4>& 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<UnsignedInt> destination, UnsignedInt id = 0) const;
void objectIdsInto(const Containers::StridedArrayView1D<UnsignedInt>& destination, UnsignedInt id = 0) const;
/**
* @brief Release index data storage

Loading…
Cancel
Save