diff --git a/src/Magnum/Primitives/Capsule.cpp b/src/Magnum/Primitives/Capsule.cpp index 54f8d4984..72a47e117 100644 --- a/src/Magnum/Primitives/Capsule.cpp +++ b/src/Magnum/Primitives/Capsule.cpp @@ -25,7 +25,7 @@ #include "Capsule.h" -#include "Magnum/Math/Vector3.h" +#include "Magnum/Math/Color.h" #include "Magnum/Math/Functions.h" #include "Magnum/Mesh.h" #include "Magnum/Primitives/Implementation/Spheroid.h" @@ -36,7 +36,8 @@ namespace Magnum { namespace Primitives { Trade::MeshData2D Capsule2D::wireframe(UnsignedInt hemisphereRings, UnsignedInt cylinderRings, Float halfLength) { - CORRADE_ASSERT(hemisphereRings >= 1 && cylinderRings >= 1, "Capsule must have at least one hemisphere ring, one cylinder ring and three segments", Trade::MeshData2D(MeshPrimitive::Lines, {}, {}, {})); + CORRADE_ASSERT(hemisphereRings >= 1 && cylinderRings >= 1, "Capsule must have at least one hemisphere ring, one cylinder ring and three segments", + (Trade::MeshData2D{MeshPrimitive::Triangles, {}, {}, {}, {}, nullptr})); std::vector positions; positions.reserve(hemisphereRings*4+2+(cylinderRings-1)*2); @@ -87,11 +88,12 @@ Trade::MeshData2D Capsule2D::wireframe(UnsignedInt hemisphereRings, UnsignedInt {UnsignedInt(positions.size())-3, UnsignedInt(positions.size())-1, UnsignedInt(positions.size())-2, UnsignedInt(positions.size())-1}); - return Trade::MeshData2D(MeshPrimitive::Lines, std::move(indices), {std::move(positions)}, {}); + return Trade::MeshData2D{MeshPrimitive::Lines, std::move(indices), {std::move(positions)}, {}, {}, nullptr}; } Trade::MeshData3D Capsule3D::solid(UnsignedInt hemisphereRings, UnsignedInt cylinderRings, UnsignedInt segments, Float halfLength, TextureCoords textureCoords) { - CORRADE_ASSERT(hemisphereRings >= 1 && cylinderRings >= 1 && segments >= 3, "Capsule must have at least one hemisphere ring, one cylinder ring and three segments", Trade::MeshData3D(MeshPrimitive::Triangles, {}, {}, {}, {})); + CORRADE_ASSERT(hemisphereRings >= 1 && cylinderRings >= 1 && segments >= 3, "Capsule must have at least one hemisphere ring, one cylinder ring and three segments", + (Trade::MeshData3D{MeshPrimitive::Triangles, {}, {}, {}, {}, {}, nullptr})); Implementation::Spheroid capsule(segments, textureCoords == TextureCoords::Generate ? Implementation::Spheroid::TextureCoords::Generate : @@ -125,7 +127,8 @@ Trade::MeshData3D Capsule3D::solid(UnsignedInt hemisphereRings, UnsignedInt cyli } Trade::MeshData3D Capsule3D::wireframe(const UnsignedInt hemisphereRings, const UnsignedInt cylinderRings, const UnsignedInt segments, const Float halfLength) { - CORRADE_ASSERT(hemisphereRings >= 1 && cylinderRings >= 1 && segments >= 4 && segments%4 == 0, "Primitives::Capsule::wireframe(): improper parameters", Trade::MeshData3D(MeshPrimitive::Lines, {}, {}, {}, {})); + CORRADE_ASSERT(hemisphereRings >= 1 && cylinderRings >= 1 && segments >= 4 && segments%4 == 0, "Primitives::Capsule::wireframe(): improper parameters", + (Trade::MeshData3D{MeshPrimitive::Triangles, {}, {}, {}, {}, {}, nullptr})); Implementation::WireframeSpheroid capsule(segments/4); diff --git a/src/Magnum/Primitives/Circle.cpp b/src/Magnum/Primitives/Circle.cpp index 862d69522..f9521fe15 100644 --- a/src/Magnum/Primitives/Circle.cpp +++ b/src/Magnum/Primitives/Circle.cpp @@ -26,7 +26,7 @@ #include "Circle.h" #include "Magnum/Math/Functions.h" -#include "Magnum/Math/Vector2.h" +#include "Magnum/Math/Color.h" #include "Magnum/Mesh.h" #include "Magnum/Trade/MeshData2D.h" @@ -34,7 +34,7 @@ namespace Magnum { namespace Primitives { Trade::MeshData2D Circle::solid(UnsignedInt segments) { CORRADE_ASSERT(segments >= 3, "Primitives::Circle::solid(): segments must be >= 3", - Trade::MeshData2D(MeshPrimitive::TriangleFan, {}, {}, {})); + (Trade::MeshData2D{MeshPrimitive::TriangleFan, {}, {}, {}, {}, nullptr})); std::vector positions; positions.reserve(segments+1); @@ -49,12 +49,12 @@ Trade::MeshData2D Circle::solid(UnsignedInt segments) { positions.emplace_back(Math::cos(angle), Math::sin(angle)); } - return Trade::MeshData2D(MeshPrimitive::TriangleFan, {}, {std::move(positions)}, {}); + return Trade::MeshData2D{MeshPrimitive::TriangleFan, {}, {std::move(positions)}, {}, {}, nullptr}; } Trade::MeshData2D Circle::wireframe(UnsignedInt segments) { CORRADE_ASSERT(segments >= 3, "Primitives::Circle::wireframe(): segments must be >= 3", - Trade::MeshData2D(MeshPrimitive::LineLoop, {}, {}, {})); + (Trade::MeshData2D{MeshPrimitive::LineLoop, {}, {}, {}, {}, nullptr})); std::vector positions; positions.reserve(segments); @@ -66,7 +66,7 @@ Trade::MeshData2D Circle::wireframe(UnsignedInt segments) { positions.emplace_back(Math::cos(angle), Math::sin(angle)); } - return Trade::MeshData2D(MeshPrimitive::LineLoop, {}, {std::move(positions)}, {}); + return Trade::MeshData2D{MeshPrimitive::LineLoop, {}, {std::move(positions)}, {}, {}, nullptr}; } }} diff --git a/src/Magnum/Primitives/Crosshair.cpp b/src/Magnum/Primitives/Crosshair.cpp index 916a25aee..97cbfeae1 100644 --- a/src/Magnum/Primitives/Crosshair.cpp +++ b/src/Magnum/Primitives/Crosshair.cpp @@ -26,25 +26,25 @@ #include "Crosshair.h" #include "Magnum/Mesh.h" -#include "Magnum/Math/Vector3.h" +#include "Magnum/Math/Color.h" #include "Magnum/Trade/MeshData2D.h" #include "Magnum/Trade/MeshData3D.h" namespace Magnum { namespace Primitives { Trade::MeshData2D Crosshair2D::wireframe() { - return Trade::MeshData2D(MeshPrimitive::Lines, {}, {{ + return Trade::MeshData2D{MeshPrimitive::Lines, {}, {{ {-1.0f, 0.0f}, {1.0f, 0.0f}, { 0.0f, -1.0f}, {0.0f, 1.0f} - }}, {}); + }}, {}, {}, nullptr}; } Trade::MeshData3D Crosshair3D::wireframe() { - return Trade::MeshData3D(MeshPrimitive::Lines, {}, {{ + return Trade::MeshData3D{MeshPrimitive::Lines, {}, {{ {-1.0f, 0.0f, 0.0f}, {1.0f, 0.0f, 0.0f}, { 0.0f, -1.0f, 0.0f}, {0.0f, 1.0f, 0.0f}, { 0.0f, 0.0f, -1.0f}, {0.0f, 0.0f, 1.0f} - }}, {}, {}); + }}, {}, {}, {}, nullptr}; } }} diff --git a/src/Magnum/Primitives/Cube.cpp b/src/Magnum/Primitives/Cube.cpp index 1e03ab33d..7c5222f27 100644 --- a/src/Magnum/Primitives/Cube.cpp +++ b/src/Magnum/Primitives/Cube.cpp @@ -26,13 +26,13 @@ #include "Cube.h" #include "Magnum/Mesh.h" -#include "Magnum/Math/Vector3.h" +#include "Magnum/Math/Color.h" #include "Magnum/Trade/MeshData3D.h" namespace Magnum { namespace Primitives { Trade::MeshData3D Cube::solid() { - return Trade::MeshData3D(MeshPrimitive::Triangles, { + return Trade::MeshData3D{MeshPrimitive::Triangles, { 0, 1, 2, 0, 2, 3, /* +Z */ 4, 5, 6, 4, 6, 7, /* +X */ 8, 9, 10, 8, 10, 11, /* +Y */ @@ -99,7 +99,7 @@ Trade::MeshData3D Cube::solid() { {-1.0f, 0.0f, 0.0f}, {-1.0f, 0.0f, 0.0f}, /* -X */ {-1.0f, 0.0f, 0.0f} - }}, {}); + }}, {}, {}, nullptr}; } Trade::MeshData3D Cube::solidStrip() { @@ -126,7 +126,7 @@ Trade::MeshData3D Cube::solidStrip() { |F \| 2---3 */ - return Trade::MeshData3D(MeshPrimitive::TriangleStrip, {}, {{ + return Trade::MeshData3D{MeshPrimitive::TriangleStrip, {}, {{ { 1.0f, 1.0f, 1.0f}, /* 3 */ {-1.0f, 1.0f, 1.0f}, /* 2 */ { 1.0f, -1.0f, 1.0f}, /* 6 */ @@ -141,11 +141,11 @@ Trade::MeshData3D Cube::solidStrip() { {-1.0f, -1.0f, -1.0f}, /* 4 */ { 1.0f, 1.0f, -1.0f}, /* 1 */ {-1.0f, 1.0f, -1.0f} /* 0 */ - }}, {}, {}); + }}, {}, {}, {}, nullptr}; } Trade::MeshData3D Cube::wireframe() { - return Trade::MeshData3D(MeshPrimitive::Lines, { + return Trade::MeshData3D{MeshPrimitive::Lines, { 0, 1, 1, 2, 2, 3, 3, 0, /* +Z */ 4, 5, 5, 6, 6, 7, 7, 4, /* -Z */ 1, 5, 2, 6, /* +X */ @@ -160,7 +160,7 @@ Trade::MeshData3D Cube::wireframe() { { 1.0f, -1.0f, -1.0f}, { 1.0f, 1.0f, -1.0f}, {-1.0f, 1.0f, -1.0f} - }}, {}, {}); + }}, {}, {}, {}, nullptr}; } }} diff --git a/src/Magnum/Primitives/Cylinder.cpp b/src/Magnum/Primitives/Cylinder.cpp index 62b11c221..76c38664d 100644 --- a/src/Magnum/Primitives/Cylinder.cpp +++ b/src/Magnum/Primitives/Cylinder.cpp @@ -26,7 +26,7 @@ #include "Cylinder.h" #include "Magnum/Mesh.h" -#include "Magnum/Math/Vector3.h" +#include "Magnum/Math/Color.h" #include "Magnum/Primitives/Implementation/Spheroid.h" #include "Magnum/Primitives/Implementation/WireframeSpheroid.h" #include "Magnum/Trade/MeshData3D.h" @@ -34,7 +34,8 @@ namespace Magnum { namespace Primitives { Trade::MeshData3D Cylinder::solid(const UnsignedInt rings, const UnsignedInt segments, const Float halfLength, const Flags flags) { - CORRADE_ASSERT(rings >= 1 && segments >= 3, "Primitives::Cylinder::solid(): cylinder must have at least one ring and three segments", Trade::MeshData3D(MeshPrimitive::Triangles, {}, {}, {}, {})); + CORRADE_ASSERT(rings >= 1 && segments >= 3, "Primitives::Cylinder::solid(): cylinder must have at least one ring and three segments", + (Trade::MeshData3D{MeshPrimitive::Triangles, {}, {}, {}, {}, {}, nullptr})); Implementation::Spheroid cylinder(segments, flags & Flag::GenerateTextureCoords ? Implementation::Spheroid::TextureCoords::Generate : Implementation::Spheroid::TextureCoords::DontGenerate); @@ -65,7 +66,8 @@ Trade::MeshData3D Cylinder::solid(const UnsignedInt rings, const UnsignedInt seg } Trade::MeshData3D Cylinder::wireframe(const UnsignedInt rings, const UnsignedInt segments, const Float halfLength) { - CORRADE_ASSERT(rings >= 1 && segments >= 4 && segments%4 == 0, "Primitives::Cylinder::wireframe(): improper parameters", Trade::MeshData3D(MeshPrimitive::Lines, {}, {}, {}, {})); + CORRADE_ASSERT(rings >= 1 && segments >= 4 && segments%4 == 0, "Primitives::Cylinder::wireframe(): improper parameters", + (Trade::MeshData3D{MeshPrimitive::Lines, {}, {}, {}, {}, {}, nullptr})); Implementation::WireframeSpheroid cylinder(segments/4); diff --git a/src/Magnum/Primitives/Icosphere.cpp b/src/Magnum/Primitives/Icosphere.cpp index a4c785c2c..bb050a18a 100644 --- a/src/Magnum/Primitives/Icosphere.cpp +++ b/src/Magnum/Primitives/Icosphere.cpp @@ -26,7 +26,7 @@ #include "Icosphere.h" #include "Magnum/Mesh.h" -#include "Magnum/Math/Vector3.h" +#include "Magnum/Math/Color.h" #include "Magnum/MeshTools/Duplicate.h" #include "Magnum/MeshTools/RemoveDuplicates.h" #include "Magnum/MeshTools/Subdivide.h" @@ -81,7 +81,7 @@ Trade::MeshData3D Icosphere::solid(const UnsignedInt subdivisions) { indices = MeshTools::duplicate(indices, MeshTools::removeDuplicates(positions)); std::vector normals(positions); - return Trade::MeshData3D(MeshPrimitive::Triangles, std::move(indices), {std::move(positions)}, {std::move(normals)}, {}); + return Trade::MeshData3D{MeshPrimitive::Triangles, std::move(indices), {std::move(positions)}, {std::move(normals)}, {}, {}, nullptr}; } }} diff --git a/src/Magnum/Primitives/Implementation/Spheroid.cpp b/src/Magnum/Primitives/Implementation/Spheroid.cpp index beb376554..13cc9d95a 100644 --- a/src/Magnum/Primitives/Implementation/Spheroid.cpp +++ b/src/Magnum/Primitives/Implementation/Spheroid.cpp @@ -26,7 +26,7 @@ #include "Spheroid.h" #include "Magnum/Math/Functions.h" -#include "Magnum/Math/Vector3.h" +#include "Magnum/Math/Color.h" #include "Magnum/Mesh.h" #include "Magnum/Trade/MeshData3D.h" @@ -163,8 +163,8 @@ void Spheroid::capVertexRing(Float y, Float textureCoordsV, const Vector3& norma } Trade::MeshData3D Spheroid::finalize() { - return Trade::MeshData3D(MeshPrimitive::Triangles, std::move(indices), {std::move(positions)}, {std::move(normals)}, - textureCoords == TextureCoords::Generate ? std::vector>{std::move(textureCoords2D)} : std::vector>()); + return Trade::MeshData3D{MeshPrimitive::Triangles, std::move(indices), {std::move(positions)}, {std::move(normals)}, + textureCoords == TextureCoords::Generate ? std::vector>{std::move(textureCoords2D)} : std::vector>(), {}, nullptr}; } }}} diff --git a/src/Magnum/Primitives/Implementation/WireframeSpheroid.cpp b/src/Magnum/Primitives/Implementation/WireframeSpheroid.cpp index 296be2ff3..e5cc4676a 100644 --- a/src/Magnum/Primitives/Implementation/WireframeSpheroid.cpp +++ b/src/Magnum/Primitives/Implementation/WireframeSpheroid.cpp @@ -26,7 +26,7 @@ #include "WireframeSpheroid.h" #include "Magnum/Math/Functions.h" -#include "Magnum/Math/Vector3.h" +#include "Magnum/Math/Color.h" #include "Magnum/Mesh.h" #include "Magnum/Trade/MeshData3D.h" @@ -111,7 +111,7 @@ void WireframeSpheroid::cylinder() { } Trade::MeshData3D WireframeSpheroid::finalize() { - return Trade::MeshData3D(MeshPrimitive::Lines, std::move(_indices), {std::move(_positions)}, {}, {}); + return Trade::MeshData3D{MeshPrimitive::Lines, std::move(_indices), {std::move(_positions)}, {}, {}, {}, nullptr}; } }}} diff --git a/src/Magnum/Primitives/Line.cpp b/src/Magnum/Primitives/Line.cpp index f7637a95e..cc65d75d7 100644 --- a/src/Magnum/Primitives/Line.cpp +++ b/src/Magnum/Primitives/Line.cpp @@ -26,22 +26,22 @@ #include "Line.h" #include "Magnum/Mesh.h" -#include "Magnum/Math/Vector3.h" +#include "Magnum/Math/Color.h" #include "Magnum/Trade/MeshData2D.h" #include "Magnum/Trade/MeshData3D.h" namespace Magnum { namespace Primitives { Trade::MeshData2D Line2D::wireframe() { - return Trade::MeshData2D(MeshPrimitive::Lines, {}, {{ + return Trade::MeshData2D{MeshPrimitive::Lines, {}, {{ {0.0f, 0.0f}, {1.0f, 0.0f} - }}, {}); + }}, {}, {}, nullptr}; } Trade::MeshData3D Line3D::wireframe() { - return Trade::MeshData3D(MeshPrimitive::Lines, {}, {{ + return Trade::MeshData3D{MeshPrimitive::Lines, {}, {{ {0.0f, 0.0f, 0.0f}, {1.0f, 0.0f, 0.0f}, - }}, {}, {}); + }}, {}, {}, {}, nullptr}; } }} diff --git a/src/Magnum/Primitives/Plane.cpp b/src/Magnum/Primitives/Plane.cpp index d947ba4a5..629e36b6b 100644 --- a/src/Magnum/Primitives/Plane.cpp +++ b/src/Magnum/Primitives/Plane.cpp @@ -25,8 +25,8 @@ #include "Plane.h" -#include "Magnum/Math/Vector3.h" #include "Magnum/Mesh.h" +#include "Magnum/Math/Color.h" #include "Magnum/Trade/MeshData3D.h" namespace Magnum { namespace Primitives { @@ -40,7 +40,7 @@ Trade::MeshData3D Plane::solid(const TextureCoords textureCoords) { {0.0f, 1.0f} }); - return Trade::MeshData3D(MeshPrimitive::TriangleStrip, {}, {{ + return Trade::MeshData3D{MeshPrimitive::TriangleStrip, {}, {{ {1.0f, -1.0f, 0.0f}, {1.0f, 1.0f, 0.0f}, {-1.0f, -1.0f, 0.0f}, @@ -50,16 +50,16 @@ Trade::MeshData3D Plane::solid(const TextureCoords textureCoords) { {0.0f, 0.0f, 1.0f}, {0.0f, 0.0f, 1.0f}, {0.0f, 0.0f, 1.0f} - }}, std::move(coords)); + }}, std::move(coords), {}, nullptr}; } Trade::MeshData3D Plane::wireframe() { - return Trade::MeshData3D(MeshPrimitive::LineLoop, {}, {{ + return Trade::MeshData3D{MeshPrimitive::LineLoop, {}, {{ {-1.0f, -1.0f, 0.0f}, {1.0f, -1.0f, 0.0f}, {1.0f, 1.0f, 0.0f}, {-1.0f, 1.0f, 0.0f} - }}, {}, {}); + }}, {}, {}, {}, nullptr}; } }} diff --git a/src/Magnum/Primitives/Square.cpp b/src/Magnum/Primitives/Square.cpp index 7e29212ae..1632a9085 100644 --- a/src/Magnum/Primitives/Square.cpp +++ b/src/Magnum/Primitives/Square.cpp @@ -26,7 +26,7 @@ #include "Square.h" #include "Magnum/Mesh.h" -#include "Magnum/Math/Vector2.h" +#include "Magnum/Math/Color.h" #include "Magnum/Trade/MeshData2D.h" namespace Magnum { namespace Primitives { @@ -40,21 +40,21 @@ Trade::MeshData2D Square::solid(const TextureCoords textureCoords) { {0.0f, 1.0f} }); - return Trade::MeshData2D(MeshPrimitive::TriangleStrip, {}, {{ + return Trade::MeshData2D{MeshPrimitive::TriangleStrip, {}, {{ {1.0f, -1.0f}, {1.0f, 1.0f}, {-1.0f, -1.0f}, {-1.0f, 1.0f} - }}, std::move(coords)); + }}, std::move(coords), {}, nullptr}; } Trade::MeshData2D Square::wireframe() { - return Trade::MeshData2D(MeshPrimitive::LineLoop, {}, {{ + return Trade::MeshData2D{MeshPrimitive::LineLoop, {}, {{ {-1.0f, -1.0f}, {1.0f, -1.0f}, {1.0f, 1.0f}, {-1.0f, 1.0f} - }}, {}); + }}, {}, {}, nullptr}; } }} diff --git a/src/Magnum/Primitives/UVSphere.cpp b/src/Magnum/Primitives/UVSphere.cpp index 943a4cde5..7b09c437a 100644 --- a/src/Magnum/Primitives/UVSphere.cpp +++ b/src/Magnum/Primitives/UVSphere.cpp @@ -26,7 +26,7 @@ #include "UVSphere.h" #include "Magnum/Mesh.h" -#include "Magnum/Math/Vector3.h" +#include "Magnum/Math/Color.h" #include "Magnum/Primitives/Implementation/Spheroid.h" #include "Magnum/Primitives/Implementation/WireframeSpheroid.h" #include "Magnum/Trade/MeshData3D.h" @@ -34,7 +34,8 @@ namespace Magnum { namespace Primitives { Trade::MeshData3D UVSphere::solid(UnsignedInt rings, UnsignedInt segments, TextureCoords textureCoords) { - CORRADE_ASSERT(rings >= 2 && segments >= 3, "UVSphere must have at least two rings and three segments", Trade::MeshData3D(MeshPrimitive::Triangles, {}, {}, {}, {})); + CORRADE_ASSERT(rings >= 2 && segments >= 3, "UVSphere must have at least two rings and three segments", + (Trade::MeshData3D{MeshPrimitive::Triangles, {}, {}, {}, {}, {}, nullptr})); Implementation::Spheroid sphere(segments, textureCoords == TextureCoords::Generate ? Implementation::Spheroid::TextureCoords::Generate : @@ -61,7 +62,8 @@ Trade::MeshData3D UVSphere::solid(UnsignedInt rings, UnsignedInt segments, Textu } Trade::MeshData3D UVSphere::wireframe(const UnsignedInt rings, const UnsignedInt segments) { - CORRADE_ASSERT(rings >= 2 && rings%2 == 0 && segments >= 4 && segments%2 == 0, "Primitives::UVSphere::wireframe(): improper parameters", Trade::MeshData3D(MeshPrimitive::Lines, {}, {}, {}, {})); + CORRADE_ASSERT(rings >= 2 && rings%2 == 0 && segments >= 4 && segments%2 == 0, "Primitives::UVSphere::wireframe(): improper parameters", + (Trade::MeshData3D{MeshPrimitive::Triangles, {}, {}, {}, {}, {}, nullptr})); Implementation::WireframeSpheroid sphere(segments/4); diff --git a/src/Magnum/Trade/MeshData2D.cpp b/src/Magnum/Trade/MeshData2D.cpp index 2e986ced1..4e05f47b5 100644 --- a/src/Magnum/Trade/MeshData2D.cpp +++ b/src/Magnum/Trade/MeshData2D.cpp @@ -25,14 +25,18 @@ #include "MeshData2D.h" -#include "Magnum/Math/Vector2.h" +#include "Magnum/Math/Color.h" namespace Magnum { namespace Trade { -MeshData2D::MeshData2D(const MeshPrimitive primitive, std::vector indices, std::vector> positions, std::vector> textureCoords2D, const void* const importerState): _primitive{primitive}, _indices{std::move(indices)}, _positions{std::move(positions)}, _textureCoords2D{std::move(textureCoords2D)}, _importerState{importerState} { +MeshData2D::MeshData2D(const MeshPrimitive primitive, std::vector indices, std::vector> positions, std::vector> textureCoords2D, std::vector> colors, const void* const importerState): _primitive{primitive}, _indices{std::move(indices)}, _positions{std::move(positions)}, _textureCoords2D{std::move(textureCoords2D)}, _colors{std::move(colors)}, _importerState{importerState} { CORRADE_ASSERT(!_positions.empty(), "Trade::MeshData2D: no position array specified", ); } +#ifdef MAGNUM_BUILD_DEPRECATED +MeshData2D::MeshData2D(const MeshPrimitive primitive, std::vector indices, std::vector> positions, std::vector> textureCoords2D, const void* const importerState): MeshData2D{primitive, std::move(indices), std::move(positions), std::move(textureCoords2D), {}, importerState} {} +#endif + MeshData2D::MeshData2D(MeshData2D&&) #if !defined(__GNUC__) || __GNUC__*100 + __GNUC_MINOR__ != 409 noexcept @@ -77,4 +81,14 @@ const std::vector& MeshData2D::textureCoords2D(const UnsignedInt id) co return _textureCoords2D[id]; } +std::vector& MeshData2D::colors(const UnsignedInt id) { + CORRADE_ASSERT(id < colorArrayCount(), "Trade::MeshData3D::colors(): index out of range", _colors[id]); + return _colors[id]; +} + +const std::vector& MeshData2D::colors(const UnsignedInt id) const { + CORRADE_ASSERT(id < colorArrayCount(), "Trade::MeshData3D::colors(): index out of range", _colors[id]); + return _colors[id]; +} + }} diff --git a/src/Magnum/Trade/MeshData2D.h b/src/Magnum/Trade/MeshData2D.h index 30bc4b4d6..85b610e22 100644 --- a/src/Magnum/Trade/MeshData2D.h +++ b/src/Magnum/Trade/MeshData2D.h @@ -54,9 +54,17 @@ class MAGNUM_EXPORT MeshData2D { * array should be present. * @param textureCoords2D Two-dimensional texture coordinate arrays, * if present + * @param colors Vertex color arrays, if present * @param importerState Importer-specific state */ - explicit MeshData2D(MeshPrimitive primitive, std::vector indices, std::vector> positions, std::vector> textureCoords2D, const void* importerState = nullptr); + explicit MeshData2D(MeshPrimitive primitive, std::vector indices, std::vector> positions, std::vector> textureCoords2D, std::vector> colors, const void* importerState = nullptr); + + #ifdef MAGNUM_BUILD_DEPRECATED + /** @copybrief MeshData2D(MeshPrimitive, std::vector, std::vector>, std::vector>, std::vector>, const void*) + * @deprecated Use @ref MeshData2D(MeshPrimitive, std::vector, std::vector>, std::vector>, std::vector>, const void*) instead. + */ + CORRADE_DEPRECATED("Use MeshData2D(MeshPrimitive, std::vector, std::vector>, std::vector>, std::vector>, const void*) instead") explicit MeshData2D(MeshPrimitive primitive, std::vector indices, std::vector> positions, std::vector> textureCoords2D, const void* importerState = nullptr); + #endif /** @brief Copying is not allowed */ MeshData2D(const MeshData2D&) = delete; @@ -131,6 +139,21 @@ class MAGNUM_EXPORT MeshData2D { std::vector& textureCoords2D(UnsignedInt id); const std::vector& textureCoords2D(UnsignedInt id) const; /**< @overload */ + /** @brief Whether the data contain any vertex colors */ + bool hasColors() const { return !_colors.empty(); } + + /** @brief Count of color arrays */ + UnsignedInt colorArrayCount() const { return _colors.size(); } + + /** + * @brief Vertex colors + * @param id Vertex color array ID + * + * @see @ref colorArrayCount() + */ + std::vector& colors(UnsignedInt id); + const std::vector& colors(UnsignedInt id) const; /**< @overload */ + /** * @brief Importer-specific state * @@ -143,6 +166,7 @@ class MAGNUM_EXPORT MeshData2D { std::vector _indices; std::vector> _positions; std::vector> _textureCoords2D; + std::vector> _colors; const void* _importerState; }; diff --git a/src/Magnum/Trade/MeshData3D.cpp b/src/Magnum/Trade/MeshData3D.cpp index 72d190930..93b52e608 100644 --- a/src/Magnum/Trade/MeshData3D.cpp +++ b/src/Magnum/Trade/MeshData3D.cpp @@ -25,14 +25,18 @@ #include "MeshData3D.h" -#include "Magnum/Math/Vector3.h" +#include "Magnum/Math/Color.h" namespace Magnum { namespace Trade { -MeshData3D::MeshData3D(const MeshPrimitive primitive, std::vector indices, std::vector> positions, std::vector> normals, std::vector> textureCoords2D, const void* const importerState): _primitive{primitive}, _indices{std::move(indices)}, _positions{std::move(positions)}, _normals{std::move(normals)}, _textureCoords2D{std::move(textureCoords2D)}, _importerState{importerState} { +MeshData3D::MeshData3D(const MeshPrimitive primitive, std::vector indices, std::vector> positions, std::vector> normals, std::vector> textureCoords2D, std::vector> colors, const void* const importerState): _primitive{primitive}, _indices{std::move(indices)}, _positions{std::move(positions)}, _normals{std::move(normals)}, _textureCoords2D{std::move(textureCoords2D)}, _colors{std::move(colors)}, _importerState{importerState} { CORRADE_ASSERT(!_positions.empty(), "Trade::MeshData3D: no position array specified", ); } +#ifdef MAGNUM_BUILD_DEPRECATED +MeshData3D::MeshData3D(const MeshPrimitive primitive, std::vector indices, std::vector> positions, std::vector> normals, std::vector> textureCoords2D, const void* const importerState): MeshData3D{primitive, std::move(indices), std::move(positions), std::move(normals), std::move(textureCoords2D), {}, importerState} {} +#endif + MeshData3D::MeshData3D(MeshData3D&&) #if !defined(__GNUC__) || __GNUC__*100 + __GNUC_MINOR__ != 409 noexcept @@ -87,4 +91,14 @@ const std::vector& MeshData3D::textureCoords2D(const UnsignedInt id) co return _textureCoords2D[id]; } +std::vector& MeshData3D::colors(const UnsignedInt id) { + CORRADE_ASSERT(id < colorArrayCount(), "Trade::MeshData3D::colors(): index out of range", _colors[id]); + return _colors[id]; +} + +const std::vector& MeshData3D::colors(const UnsignedInt id) const { + CORRADE_ASSERT(id < colorArrayCount(), "Trade::MeshData3D::colors(): index out of range", _colors[id]); + return _colors[id]; +} + }} diff --git a/src/Magnum/Trade/MeshData3D.h b/src/Magnum/Trade/MeshData3D.h index 0f800f2e2..c3b5a056f 100644 --- a/src/Magnum/Trade/MeshData3D.h +++ b/src/Magnum/Trade/MeshData3D.h @@ -55,9 +55,17 @@ class MAGNUM_EXPORT MeshData3D { * @param normals Normal arrays, if present * @param textureCoords2D Two-dimensional texture coordinate arrays, * if present + * @param colors Vertex color arrays, if present * @param importerState Importer-specific state */ - explicit MeshData3D(MeshPrimitive primitive, std::vector indices, std::vector> positions, std::vector> normals, std::vector> textureCoords2D, const void* importerState = nullptr); + explicit MeshData3D(MeshPrimitive primitive, std::vector indices, std::vector> positions, std::vector> normals, std::vector> textureCoords2D, std::vector> colors, const void* importerState = nullptr); + + #ifdef MAGNUM_BUILD_DEPRECATED + /** @copybrief MeshData3D(MeshPrimitive, std::vector, std::vector>, std::vector>, std::vector>, std::vector>, const void*) + * @deprecated Use @ref MeshData3D(MeshPrimitive, std::vector, std::vector>, std::vector>, std::vector>, std::vector>, const void*) instead. + */ + CORRADE_DEPRECATED("Use MeshData3D(MeshPrimitive, std::vector, std::vector>, std::vector>, std::vector>, std::vector>, const void*) instead") explicit MeshData3D(MeshPrimitive primitive, std::vector indices, std::vector> positions, std::vector> normals, std::vector> textureCoords2D, const void* importerState = nullptr); + #endif /** @brief Copying is not allowed */ MeshData3D(const MeshData3D&) = delete; @@ -147,6 +155,21 @@ class MAGNUM_EXPORT MeshData3D { std::vector& textureCoords2D(UnsignedInt id); const std::vector& textureCoords2D(UnsignedInt id) const; /**< @overload */ + /** @brief Whether the data contain any vertex colors */ + bool hasColors() const { return !_colors.empty(); } + + /** @brief Count of color arrays */ + UnsignedInt colorArrayCount() const { return _colors.size(); } + + /** + * @brief Vertex colors + * @param id Vertex color array ID + * + * @see @ref colorArrayCount() + */ + std::vector& colors(UnsignedInt id); + const std::vector& colors(UnsignedInt id) const; /**< @overload */ + /** * @brief Importer-specific state * @@ -160,6 +183,7 @@ class MAGNUM_EXPORT MeshData3D { std::vector> _positions; std::vector> _normals; std::vector> _textureCoords2D; + std::vector> _colors; const void* _importerState; }; diff --git a/src/Magnum/Trade/Test/MeshData2DTest.cpp b/src/Magnum/Trade/Test/MeshData2DTest.cpp index 639891355..b256949e1 100644 --- a/src/Magnum/Trade/Test/MeshData2DTest.cpp +++ b/src/Magnum/Trade/Test/MeshData2DTest.cpp @@ -26,7 +26,7 @@ #include #include "Magnum/Mesh.h" -#include "Magnum/Math/Vector2.h" +#include "Magnum/Math/Color.h" #include "Magnum/Trade/MeshData2D.h" namespace Magnum { namespace Trade { namespace Test { @@ -37,6 +37,7 @@ struct MeshData2DTest: TestSuite::Tester { void construct(); void constructNonIndexed(); void constructNoTexCoords(); + void constructNoColors(); void constructCopy(); void constructMove(); }; @@ -45,10 +46,13 @@ MeshData2DTest::MeshData2DTest() { addTests({&MeshData2DTest::construct, &MeshData2DTest::constructNonIndexed, &MeshData2DTest::constructNoTexCoords, + &MeshData2DTest::constructNoColors, &MeshData2DTest::constructCopy, &MeshData2DTest::constructMove}); } +using namespace Math::Literals; + void MeshData2DTest::construct() { const int a{}; const MeshData2D data{MeshPrimitive::Lines, {12, 1, 0}, @@ -57,6 +61,7 @@ void MeshData2DTest::construct() { {{{0.0f, 0.0f}, {0.3f, 0.7f}}, {{0.1f, 0.2f}, {0.7f, 1.0f}}, {{0.0f, 0.0f}, {1.0f, 1.0f}}}, + {{0xff98ab_rgbf, 0xff3366_rgbf}}, &a}; CORRADE_COMPARE(data.primitive(), MeshPrimitive::Lines); @@ -74,6 +79,10 @@ void MeshData2DTest::construct() { CORRADE_COMPARE(data.textureCoords2D(1), (std::vector{{0.1f, 0.2f}, {0.7f, 1.0f}})); CORRADE_COMPARE(data.textureCoords2D(2), (std::vector{{0.0f, 0.0f}, {1.0f, 1.0f}})); + CORRADE_VERIFY(data.hasColors()); + CORRADE_COMPARE(data.colorArrayCount(), 1); + CORRADE_COMPARE(data.colors(0), (std::vector{0xff98ab_rgbf, 0xff3366_rgbf})); + CORRADE_COMPARE(data.importerState(), &a); } @@ -82,6 +91,7 @@ void MeshData2DTest::constructNonIndexed() { const MeshData2D data{MeshPrimitive::Lines, {}, {{{0.5f, 1.0f}, {-1.0f, 0.3f}}}, {{{0.0f, 0.0f}, {0.3f, 0.7f}}}, + {{0xff98ab_rgbf, 0xff3366_rgbf}}, &a}; CORRADE_VERIFY(!data.isIndexed()); @@ -93,12 +103,26 @@ void MeshData2DTest::constructNoTexCoords() { {{{0.5f, 1.0f}, {-1.0f, 0.3f}}, {{1.4f, 0.2f}, {1.1f, 0.13f}}}, {}, + {{0xff98ab_rgbf, 0xff3366_rgbf}}, &a}; CORRADE_VERIFY(!data.hasTextureCoords2D()); CORRADE_COMPARE(data.textureCoords2DArrayCount(), 0); } +void MeshData2DTest::constructNoColors() { + const int a{}; + const MeshData2D data{MeshPrimitive::Lines, {12, 1, 0}, + {{{0.5f, 1.0f}, {-1.0f, 0.3f}}, + {{1.4f, 0.2f}, {1.1f, 0.13f}}}, + {{{0.0f, 0.0f}, {0.3f, 0.7f}}}, + {}, + &a}; + + CORRADE_VERIFY(!data.hasColors()); + CORRADE_COMPARE(data.colorArrayCount(), 0); +} + void MeshData2DTest::constructCopy() { CORRADE_VERIFY(!(std::is_constructible{})); CORRADE_VERIFY(!(std::is_assignable{})); @@ -109,6 +133,7 @@ void MeshData2DTest::constructMove() { MeshData2D data{MeshPrimitive::LineStrip, {12, 1, 0}, {{{0.5f, 1.0f}, {-1.0f, 0.3f}}}, {{{0.0f, 0.0f}, {0.3f, 0.7f}}}, + {{0xff98ab_rgbf, 0xff3366_rgbf}}, &a}; MeshData2D b{std::move(data)}; @@ -120,12 +145,15 @@ void MeshData2DTest::constructMove() { CORRADE_COMPARE(b.positions(0), (std::vector{{0.5f, 1.0f}, {-1.0f, 0.3f}})); CORRADE_COMPARE(b.textureCoords2DArrayCount(), 1); CORRADE_COMPARE(b.textureCoords2D(0), (std::vector{{0.0f, 0.0f}, {0.3f, 0.7f}})); + CORRADE_COMPARE(b.colorArrayCount(), 1); + CORRADE_COMPARE(b.colors(0), (std::vector{0xff98ab_rgbf, 0xff3366_rgbf})); CORRADE_COMPARE(b.importerState(), &a); const int c{}; MeshData2D d{MeshPrimitive::TriangleFan, {}, {{}}, {}, + {}, &c}; d = std::move(b); CORRADE_COMPARE(d.primitive(), MeshPrimitive::LineStrip); @@ -135,6 +163,8 @@ void MeshData2DTest::constructMove() { CORRADE_COMPARE(d.positions(0), (std::vector{{0.5f, 1.0f}, {-1.0f, 0.3f}})); CORRADE_COMPARE(d.textureCoords2DArrayCount(), 1); CORRADE_COMPARE(d.textureCoords2D(0), (std::vector{{0.0f, 0.0f}, {0.3f, 0.7f}})); + CORRADE_COMPARE(d.colorArrayCount(), 1); + CORRADE_COMPARE(d.colors(0), (std::vector{0xff98ab_rgbf, 0xff3366_rgbf})); CORRADE_COMPARE(d.importerState(), &a); } diff --git a/src/Magnum/Trade/Test/MeshData3DTest.cpp b/src/Magnum/Trade/Test/MeshData3DTest.cpp index 2ff7e8dce..4a2f61e9a 100644 --- a/src/Magnum/Trade/Test/MeshData3DTest.cpp +++ b/src/Magnum/Trade/Test/MeshData3DTest.cpp @@ -26,7 +26,7 @@ #include #include "Magnum/Mesh.h" -#include "Magnum/Math/Vector3.h" +#include "Magnum/Math/Color.h" #include "Magnum/Trade/MeshData3D.h" namespace Magnum { namespace Trade { namespace Test { @@ -38,6 +38,7 @@ struct MeshData3DTest: TestSuite::Tester { void constructNonIndexed(); void constructNoNormals(); void constructNoTexCoords(); + void constructNoColors(); void constructCopy(); void constructMove(); }; @@ -47,10 +48,13 @@ MeshData3DTest::MeshData3DTest() { &MeshData3DTest::constructNonIndexed, &MeshData3DTest::constructNoNormals, &MeshData3DTest::constructNoTexCoords, + &MeshData3DTest::constructNoColors, &MeshData3DTest::constructCopy, &MeshData3DTest::constructMove}); } +using namespace Math::Literals; + void MeshData3DTest::construct() { const int a{}; const MeshData3D data{MeshPrimitive::Lines, {12, 1, 0}, @@ -60,6 +64,7 @@ void MeshData3DTest::construct() { {{{0.0f, 0.0f}, {0.3f, 0.7f}}, {{0.1f, 0.2f}, {0.7f, 1.0f}}, {{0.0f, 0.0f}, {1.0f, 1.0f}}}, + {{0xff98ab_rgbf, 0xff3366_rgbf}}, &a}; CORRADE_COMPARE(data.primitive(), MeshPrimitive::Lines); @@ -81,6 +86,10 @@ void MeshData3DTest::construct() { CORRADE_COMPARE(data.textureCoords2D(1), (std::vector{{0.1f, 0.2f}, {0.7f, 1.0f}})); CORRADE_COMPARE(data.textureCoords2D(2), (std::vector{{0.0f, 0.0f}, {1.0f, 1.0f}})); + CORRADE_VERIFY(data.hasColors()); + CORRADE_COMPARE(data.colorArrayCount(), 1); + CORRADE_COMPARE(data.colors(0), (std::vector{0xff98ab_rgbf, 0xff3366_rgbf})); + CORRADE_COMPARE(data.importerState(), &a); } @@ -90,6 +99,7 @@ void MeshData3DTest::constructNonIndexed() { {{{0.5f, 1.0f, 0.1f}, {-1.0f, 0.3f, -1.0f}}}, {{{0.0f, 1.0f, 0.0f}, {-1.0f, 0.0f, 0.0f}}}, {{{0.0f, 0.0f}, {0.3f, 0.7f}}}, + {{0xff98ab_rgbf, 0xff3366_rgbf}}, &a}; CORRADE_VERIFY(!data.isIndexed()); @@ -101,6 +111,7 @@ void MeshData3DTest::constructNoNormals() { {{{0.5f, 1.0f, 0.1f}, {-1.0f, 0.3f, -1.0f}}}, {}, {{{0.0f, 0.0f}, {0.3f, 0.7f}}}, + {{0xff98ab_rgbf, 0xff3366_rgbf}}, &a}; CORRADE_VERIFY(!data.hasNormals()); @@ -113,12 +124,26 @@ void MeshData3DTest::constructNoTexCoords() { {{{0.5f, 1.0f, 0.1f}, {-1.0f, 0.3f, -1.0f}}}, {{{0.0f, 1.0f, 0.0f}, {-1.0f, 0.0f, 0.0f}}}, {}, + {{0xff98ab_rgbf, 0xff3366_rgbf}}, &a}; CORRADE_VERIFY(!data.hasTextureCoords2D()); CORRADE_COMPARE(data.textureCoords2DArrayCount(), 0); } +void MeshData3DTest::constructNoColors() { + const int a{}; + const MeshData3D data{MeshPrimitive::Lines, {12, 1, 0}, + {{{0.5f, 1.0f, 0.1f}, {-1.0f, 0.3f, -1.0f}}}, + {{{0.0f, 1.0f, 0.0f}, {-1.0f, 0.0f, 0.0f}}}, + {{{0.0f, 0.0f}, {0.3f, 0.7f}}}, + {}, + &a}; + + CORRADE_VERIFY(!data.hasColors()); + CORRADE_COMPARE(data.colorArrayCount(), 0); +} + void MeshData3DTest::constructCopy() { CORRADE_VERIFY(!(std::is_constructible{})); CORRADE_VERIFY(!(std::is_assignable{})); @@ -130,6 +155,7 @@ void MeshData3DTest::constructMove() { {{{0.5f, 1.0f, 0.1f}, {-1.0f, 0.3f, -1.0f}}}, {{{0.0f, 1.0f, 0.0f}, {-1.0f, 0.0f, 0.0f}}}, {{{0.0f, 0.0f}, {0.3f, 0.7f}}}, + {{0xff98ab_rgbf, 0xff3366_rgbf}}, &a}; MeshData3D b{std::move(data)}; @@ -143,6 +169,8 @@ void MeshData3DTest::constructMove() { CORRADE_COMPARE(b.normals(0), (std::vector{{0.0f, 1.0f, 0.0f}, {-1.0f, 0.0f, 0.0f}})); CORRADE_COMPARE(b.textureCoords2DArrayCount(), 1); CORRADE_COMPARE(b.textureCoords2D(0), (std::vector{{0.0f, 0.0f}, {0.3f, 0.7f}})); + CORRADE_COMPARE(b.colorArrayCount(), 1); + CORRADE_COMPARE(b.colors(0), (std::vector{0xff98ab_rgbf, 0xff3366_rgbf})); CORRADE_COMPARE(b.importerState(), &a); const int c{}; @@ -150,6 +178,7 @@ void MeshData3DTest::constructMove() { {{}}, {}, {{}}, + {}, &c}; d = std::move(b); CORRADE_COMPARE(d.primitive(), MeshPrimitive::LineStrip); @@ -161,6 +190,8 @@ void MeshData3DTest::constructMove() { CORRADE_COMPARE(d.normals(0), (std::vector{{0.0f, 1.0f, 0.0f}, {-1.0f, 0.0f, 0.0f}})); CORRADE_COMPARE(d.textureCoords2DArrayCount(), 1); CORRADE_COMPARE(d.textureCoords2D(0), (std::vector{{0.0f, 0.0f}, {0.3f, 0.7f}})); + CORRADE_COMPARE(d.colorArrayCount(), 1); + CORRADE_COMPARE(d.colors(0), (std::vector{0xff98ab_rgbf, 0xff3366_rgbf})); CORRADE_COMPARE(d.importerState(), &a); } diff --git a/src/MagnumPlugins/ObjImporter/ObjImporter.cpp b/src/MagnumPlugins/ObjImporter/ObjImporter.cpp index 218827291..3910028f1 100644 --- a/src/MagnumPlugins/ObjImporter/ObjImporter.cpp +++ b/src/MagnumPlugins/ObjImporter/ObjImporter.cpp @@ -35,7 +35,7 @@ #include "Magnum/Mesh.h" #include "Magnum/MeshTools/CombineIndexedArrays.h" #include "Magnum/MeshTools/Duplicate.h" -#include "Magnum/Math/Vector3.h" +#include "Magnum/Math/Color.h" #include "Magnum/Trade/MeshData3D.h" namespace Magnum { namespace Trade { @@ -495,7 +495,7 @@ std::optional ObjImporter::doMesh3D(UnsignedInt id) { } } - return MeshData3D(*primitive, std::move(indices), {std::move(positions)}, std::move(normals), std::move(textureCoordinates)); + return MeshData3D{*primitive, std::move(indices), {std::move(positions)}, std::move(normals), std::move(textureCoordinates), {}, nullptr}; } }}