Browse Source

Primitives: use NoInit constructors for index and vertex arrays.

The NoInit constructor no longer results in an Array with a custom
deleter which would prevent the resulting MeshData from being used in
plugins, and all contents are subsequently overwritten, so there's no
reason to not use it.
master
Vladimír Vondruš 4 days ago
parent
commit
6a1c1da376
  1. 6
      src/Magnum/Primitives/Circle.cpp
  2. 4
      src/Magnum/Primitives/Gradient.cpp
  3. 8
      src/Magnum/Primitives/Grid.cpp
  4. 2
      src/Magnum/Primitives/Icosphere.cpp
  5. 4
      src/Magnum/Primitives/Line.cpp

6
src/Magnum/Primitives/Circle.cpp

@ -60,7 +60,7 @@ Trade::MeshData circle2DSolid(const UnsignedInt segments, const Circle2DFlags fl
else
attributes = Trade::meshAttributeDataNonOwningArray(AttributeData2D);
const std::size_t stride = attributes[0].stride();
Containers::Array<char> vertexData{stride*(segments + 2)};
Containers::Array<char> vertexData{NoInit, stride*(segments + 2)};
/* Fill positions */
Containers::StridedArrayView1D<Vector2> positions{vertexData,
@ -101,7 +101,7 @@ Trade::MeshData circle2DWireframe(const UnsignedInt segments) {
CORRADE_ASSERT(segments >= 3, "Primitives::circle2DWireframe(): expected at least three segments but got" << segments,
(Trade::MeshData{MeshPrimitive::LineLoop, 0}));
Containers::Array<char> vertexData{segments*sizeof(Vector2)};
Containers::Array<char> vertexData{NoInit, segments*sizeof(Vector2)};
auto positions = Containers::arrayCast<Vector2>(vertexData);
/* Points on circle */
@ -222,7 +222,7 @@ Trade::MeshData circle3DWireframe(const UnsignedInt segments) {
CORRADE_ASSERT(segments >= 3, "Primitives::circle3DWireframe(): expected at least three segments but got" << segments,
(Trade::MeshData{MeshPrimitive::LineLoop, 0}));
Containers::Array<char> vertexData{segments*sizeof(Vector3)};
Containers::Array<char> vertexData{NoInit, segments*sizeof(Vector3)};
auto positions = Containers::arrayCast<Vector3>(vertexData);
/* Points on circle */

4
src/Magnum/Primitives/Gradient.cpp

@ -52,7 +52,7 @@ constexpr Trade::MeshAttributeData Attributes2D[]{
}
Trade::MeshData gradient2D(const Vector2& a, const Color4& colorA, const Vector2& b, const Color4& colorB) {
Containers::Array<char> vertexData{sizeof(Vertex2D)*4};
Containers::Array<char> vertexData{NoInit, sizeof(Vertex2D)*4};
auto vertices = Containers::arrayCast<Vertex2D>(vertexData);
vertices[0].position = { 1.0f, -1.0f};
vertices[1].position = { 1.0f, 1.0f};
@ -105,7 +105,7 @@ constexpr Trade::MeshAttributeData Attributes3D[]{
}
Trade::MeshData gradient3D(const Vector3& a, const Color4& colorA, const Vector3& b, const Color4& colorB) {
Containers::Array<char> vertexData{sizeof(Vertex3D)*4};
Containers::Array<char> vertexData{NoInit, sizeof(Vertex3D)*4};
auto vertices = Containers::arrayCast<Vertex3D>(vertexData);
vertices[0].position = { 1.0f, -1.0f, 0};
vertices[1].position = { 1.0f, 1.0f, 0};

8
src/Magnum/Primitives/Grid.cpp

@ -37,7 +37,7 @@ Trade::MeshData grid3DSolid(const Vector2i& subdivisions, const GridFlags flags)
const Vector2i faceCount = subdivisions + Vector2i{1};
/* Indices */
Containers::Array<char> indexData{std::size_t(faceCount.product()*6)*sizeof(UnsignedInt)};
Containers::Array<char> indexData{NoInit, std::size_t(faceCount.product()*6)*sizeof(UnsignedInt)};
auto indices = Containers::arrayCast<UnsignedInt>(indexData);
{
std::size_t i = 0;
@ -72,7 +72,7 @@ Trade::MeshData grid3DSolid(const Vector2i& subdivisions, const GridFlags flags)
stride += sizeof(Vector2);
++attributeCount;
}
Containers::Array<char> vertexData{stride*vertexCount.product()};
Containers::Array<char> vertexData{NoInit, stride*vertexCount.product()};
Containers::Array<Trade::MeshAttributeData> attributes{attributeCount};
std::size_t attributeIndex = 0;
std::size_t attributeOffset = 0;
@ -143,7 +143,7 @@ Trade::MeshData grid3DWireframe(const Vector2i& subdivisions) {
const Vector2i vertexCount = subdivisions + Vector2i{2};
const Vector2i faceCount = subdivisions + Vector2i{1};
Containers::Array<char> indexData{sizeof(UnsignedInt)*
Containers::Array<char> indexData{NoInit, sizeof(UnsignedInt)*
(vertexCount.y()*(vertexCount.x() - 1)*2 +
vertexCount.x()*(vertexCount.y() - 1)*2)};
auto indices = Containers::arrayCast<UnsignedInt>(indexData);
@ -167,7 +167,7 @@ Trade::MeshData grid3DWireframe(const Vector2i& subdivisions) {
}
}
Containers::Array<char> vertexData{sizeof(Vector3)*vertexCount.product()};
Containers::Array<char> vertexData{NoInit, sizeof(Vector3)*vertexCount.product()};
auto positions = Containers::arrayCast<Vector3>(vertexData);
{
std::size_t i = 0;

2
src/Magnum/Primitives/Icosphere.cpp

@ -93,7 +93,7 @@ Trade::MeshData icosphereSolid(const UnsignedInt subdivisions) {
const std::size_t indexCount = Containers::arraySize(Indices)*(std::size_t{1} << subdivisions*2);
const std::size_t vertexCount = Containers::arraySize(Vertices) + ((indexCount - Containers::arraySize(Indices))/3);
Containers::Array<char> indexData{indexCount*sizeof(UnsignedInt)};
Containers::Array<char> indexData{NoInit, indexCount*sizeof(UnsignedInt)};
auto indices = Containers::arrayCast<UnsignedInt>(indexData);
std::memcpy(indices.begin(), Indices, sizeof(Indices));

4
src/Magnum/Primitives/Line.cpp

@ -42,7 +42,7 @@ constexpr Trade::MeshAttributeData Attributes2D[]{
}
Trade::MeshData line2D(const Vector2& a, const Vector2& b) {
Containers::Array<char> vertexData{sizeof(Vector2)*2};
Containers::Array<char> vertexData{NoInit, sizeof(Vector2)*2};
auto positions = Containers::arrayCast<Vector2>(vertexData);
positions[0] = a;
positions[1] = b;
@ -61,7 +61,7 @@ constexpr Trade::MeshAttributeData Attributes3D[]{
}
Trade::MeshData line3D(const Vector3& a, const Vector3& b) {
Containers::Array<char> vertexData{sizeof(Vector3)*2};
Containers::Array<char> vertexData{NoInit, sizeof(Vector3)*2};
auto positions = Containers::arrayCast<Vector3>(vertexData);
positions[0] = a;
positions[1] = b;

Loading…
Cancel
Save