From 6a1c1da376f3e4c58036f882b1f2cefd7599627f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Tue, 16 Jun 2026 19:47:54 +0200 Subject: [PATCH] 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. --- src/Magnum/Primitives/Circle.cpp | 6 +++--- src/Magnum/Primitives/Gradient.cpp | 4 ++-- src/Magnum/Primitives/Grid.cpp | 8 ++++---- src/Magnum/Primitives/Icosphere.cpp | 2 +- src/Magnum/Primitives/Line.cpp | 4 ++-- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/Magnum/Primitives/Circle.cpp b/src/Magnum/Primitives/Circle.cpp index 42511bfad..c4711910e 100644 --- a/src/Magnum/Primitives/Circle.cpp +++ b/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 vertexData{stride*(segments + 2)}; + Containers::Array vertexData{NoInit, stride*(segments + 2)}; /* Fill positions */ Containers::StridedArrayView1D 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 vertexData{segments*sizeof(Vector2)}; + Containers::Array vertexData{NoInit, segments*sizeof(Vector2)}; auto positions = Containers::arrayCast(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 vertexData{segments*sizeof(Vector3)}; + Containers::Array vertexData{NoInit, segments*sizeof(Vector3)}; auto positions = Containers::arrayCast(vertexData); /* Points on circle */ diff --git a/src/Magnum/Primitives/Gradient.cpp b/src/Magnum/Primitives/Gradient.cpp index 6c365c87b..43b059898 100644 --- a/src/Magnum/Primitives/Gradient.cpp +++ b/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 vertexData{sizeof(Vertex2D)*4}; + Containers::Array vertexData{NoInit, sizeof(Vertex2D)*4}; auto vertices = Containers::arrayCast(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 vertexData{sizeof(Vertex3D)*4}; + Containers::Array vertexData{NoInit, sizeof(Vertex3D)*4}; auto vertices = Containers::arrayCast(vertexData); vertices[0].position = { 1.0f, -1.0f, 0}; vertices[1].position = { 1.0f, 1.0f, 0}; diff --git a/src/Magnum/Primitives/Grid.cpp b/src/Magnum/Primitives/Grid.cpp index 1333c316f..6036147d0 100644 --- a/src/Magnum/Primitives/Grid.cpp +++ b/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 indexData{std::size_t(faceCount.product()*6)*sizeof(UnsignedInt)}; + Containers::Array indexData{NoInit, std::size_t(faceCount.product()*6)*sizeof(UnsignedInt)}; auto indices = Containers::arrayCast(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 vertexData{stride*vertexCount.product()}; + Containers::Array vertexData{NoInit, stride*vertexCount.product()}; Containers::Array 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 indexData{sizeof(UnsignedInt)* + Containers::Array indexData{NoInit, sizeof(UnsignedInt)* (vertexCount.y()*(vertexCount.x() - 1)*2 + vertexCount.x()*(vertexCount.y() - 1)*2)}; auto indices = Containers::arrayCast(indexData); @@ -167,7 +167,7 @@ Trade::MeshData grid3DWireframe(const Vector2i& subdivisions) { } } - Containers::Array vertexData{sizeof(Vector3)*vertexCount.product()}; + Containers::Array vertexData{NoInit, sizeof(Vector3)*vertexCount.product()}; auto positions = Containers::arrayCast(vertexData); { std::size_t i = 0; diff --git a/src/Magnum/Primitives/Icosphere.cpp b/src/Magnum/Primitives/Icosphere.cpp index 5765d04aa..4ea7678cd 100644 --- a/src/Magnum/Primitives/Icosphere.cpp +++ b/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 indexData{indexCount*sizeof(UnsignedInt)}; + Containers::Array indexData{NoInit, indexCount*sizeof(UnsignedInt)}; auto indices = Containers::arrayCast(indexData); std::memcpy(indices.begin(), Indices, sizeof(Indices)); diff --git a/src/Magnum/Primitives/Line.cpp b/src/Magnum/Primitives/Line.cpp index 5bf23ebf3..f53aec3e6 100644 --- a/src/Magnum/Primitives/Line.cpp +++ b/src/Magnum/Primitives/Line.cpp @@ -42,7 +42,7 @@ constexpr Trade::MeshAttributeData Attributes2D[]{ } Trade::MeshData line2D(const Vector2& a, const Vector2& b) { - Containers::Array vertexData{sizeof(Vector2)*2}; + Containers::Array vertexData{NoInit, sizeof(Vector2)*2}; auto positions = Containers::arrayCast(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 vertexData{sizeof(Vector3)*2}; + Containers::Array vertexData{NoInit, sizeof(Vector3)*2}; auto positions = Containers::arrayCast(vertexData); positions[0] = a; positions[1] = b;