From a68946df5bd98d45d0484fe929ad05a7c15e63ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Sat, 18 Jan 2020 18:08:45 +0100 Subject: [PATCH] Primitives: port tests and related tools away from MeshDataXD. Improving the tests a bit for trivial primitives to ensure the attribute layouts are correct, not just counts. --- doc/generated/primitives.cpp | 204 +++++++++---------- doc/generated/shaders.cpp | 15 +- src/Magnum/Primitives/Test/AxisTest.cpp | 31 ++- src/Magnum/Primitives/Test/CapsuleTest.cpp | 49 +++-- src/Magnum/Primitives/Test/CircleTest.cpp | 57 +++--- src/Magnum/Primitives/Test/ConeTest.cpp | 71 ++++--- src/Magnum/Primitives/Test/CrosshairTest.cpp | 21 +- src/Magnum/Primitives/Test/CubeTest.cpp | 37 ++-- src/Magnum/Primitives/Test/CylinderTest.cpp | 71 ++++--- src/Magnum/Primitives/Test/GradientTest.cpp | 68 ++++--- src/Magnum/Primitives/Test/GridTest.cpp | 39 ++-- src/Magnum/Primitives/Test/IcosphereTest.cpp | 51 +++-- src/Magnum/Primitives/Test/LineTest.cpp | 21 +- src/Magnum/Primitives/Test/PlaneTest.cpp | 40 ++-- src/Magnum/Primitives/Test/SquareTest.cpp | 34 ++-- src/Magnum/Primitives/Test/UVSphereTest.cpp | 38 ++-- 16 files changed, 488 insertions(+), 359 deletions(-) diff --git a/doc/generated/primitives.cpp b/doc/generated/primitives.cpp index 300c4da29..4e0033362 100644 --- a/doc/generated/primitives.cpp +++ b/doc/generated/primitives.cpp @@ -76,8 +76,7 @@ #include #include #include -#include -#include +#include #include using namespace Magnum; @@ -93,46 +92,46 @@ struct PrimitiveVisualizer: Platform::WindowlessApplication { int exec() override; - std::pair axis2D(); - std::pair axis3D(); - - std::pair capsule2DWireframe(); - std::pair circle2DWireframe(); - std::pair crosshair2D(); - std::pair line2D(); - std::pair squareWireframe(); - - std::pair capsule3DWireframe(); - std::pair circle3DWireframe(); - std::pair crosshair3D(); - std::pair coneWireframe(); - std::pair cubeWireframe(); - std::pair cylinderWireframe(); - std::pair grid3DWireframe(); - std::pair line3D(); - std::pair planeWireframe(); - std::pair uvSphereWireframe(); - - std::pair circle2DSolid(); - std::pair squareSolid(); - - std::pair capsule3DSolid(); - std::pair circle3DSolid(); - std::pair coneSolid(); - std::pair cubeSolid(); - std::pair cylinderSolid(); - std::pair grid3DSolid(); - std::pair icosphereSolid(); - std::pair planeSolid(); - std::pair uvSphereSolid(); - - std::pair gradient2D(); - std::pair gradient2DHorizontal(); - std::pair gradient2DVertical(); - - std::pair gradient3D(); - std::pair gradient3DHorizontal(); - std::pair gradient3DVertical(); + std::pair axis2D(); + std::pair axis3D(); + + std::pair capsule2DWireframe(); + std::pair circle2DWireframe(); + std::pair crosshair2D(); + std::pair line2D(); + std::pair squareWireframe(); + + std::pair capsule3DWireframe(); + std::pair circle3DWireframe(); + std::pair crosshair3D(); + std::pair coneWireframe(); + std::pair cubeWireframe(); + std::pair cylinderWireframe(); + std::pair grid3DWireframe(); + std::pair line3D(); + std::pair planeWireframe(); + std::pair uvSphereWireframe(); + + std::pair circle2DSolid(); + std::pair squareSolid(); + + std::pair capsule3DSolid(); + std::pair circle3DSolid(); + std::pair coneSolid(); + std::pair cubeSolid(); + std::pair cylinderSolid(); + std::pair grid3DSolid(); + std::pair icosphereSolid(); + std::pair planeSolid(); + std::pair uvSphereSolid(); + + std::pair gradient2D(); + std::pair gradient2DHorizontal(); + std::pair gradient2DVertical(); + + std::pair gradient3D(); + std::pair gradient3DHorizontal(); + std::pair gradient3DVertical(); }; namespace { @@ -191,7 +190,7 @@ int PrimitiveVisualizer::exec() { multisampleFramebuffer.clear(GL::FramebufferClear::Color|GL::FramebufferClear::Depth); std::string filename; - Containers::Optional data; + Containers::Optional data; std::tie(data, filename) = (this->*fun)(); MeshTools::compile(*data).draw(shader); @@ -210,7 +209,7 @@ int PrimitiveVisualizer::exec() { multisampleFramebuffer.clear(GL::FramebufferClear::Color|GL::FramebufferClear::Depth); std::string filename; - Containers::Optional data; + Containers::Optional data; std::tie(data, filename) = (this->*fun)(); MeshTools::compile(*data).draw(shader); @@ -235,7 +234,7 @@ int PrimitiveVisualizer::exec() { multisampleFramebuffer.clear(GL::FramebufferClear::Color|GL::FramebufferClear::Depth); std::string filename; - Containers::Optional data; + Containers::Optional data; std::tie(data, filename) = (this->*fun)(); MeshTools::compile(*data).draw(shader); @@ -265,7 +264,7 @@ int PrimitiveVisualizer::exec() { multisampleFramebuffer.clear(GL::FramebufferClear::Color|GL::FramebufferClear::Depth); std::string filename; - Containers::Optional data; + Containers::Optional data; std::tie(data, filename) = (this->*fun)(); MeshTools::compile(*data).draw(shader); @@ -299,18 +298,12 @@ int PrimitiveVisualizer::exec() { multisampleFramebuffer.clear(GL::FramebufferClear::Color|GL::FramebufferClear::Depth); std::string filename; - Containers::Optional data; + Containers::Optional data; std::tie(data, filename) = (this->*fun)(); - /* TODO: use MeshTools::compile() and MeshVisualizer2D once it exists */ - GL::Buffer vertices; - vertices.setData(data->positions(0), GL::BufferUsage::StaticDraw); - GL::Mesh mesh; - mesh.addVertexBuffer(vertices, 0, Shaders::MeshVisualizer::Position{Shaders::MeshVisualizer::Position::Components::Two}) - .setCount(data->positions(0).size()) - .setPrimitive(data->primitive()); - - mesh.draw(flat) + /* TODO: use MeshVisualizer2D once it exists */ + MeshTools::compile(*data) + .draw(flat) .draw(wireframe2D); GL::AbstractFramebuffer::blit(multisampleFramebuffer, framebuffer, framebuffer.viewport(), GL::FramebufferBlit::Color); @@ -349,7 +342,7 @@ int PrimitiveVisualizer::exec() { multisampleFramebuffer.clear(GL::FramebufferClear::Color|GL::FramebufferClear::Depth); std::string filename; - Containers::Optional data; + Containers::Optional data; std::tie(data, filename) = (this->*fun)(); MeshTools::compile(*data) @@ -372,7 +365,7 @@ int PrimitiveVisualizer::exec() { multisampleFramebuffer.clear(GL::FramebufferClear::Color|GL::FramebufferClear::Depth); std::string filename; - Containers::Optional data; + Containers::Optional data; std::tie(data, filename) = (this->*fun)(); MeshTools::compile(*data) @@ -395,7 +388,7 @@ int PrimitiveVisualizer::exec() { multisampleFramebuffer.clear(GL::FramebufferClear::Color|GL::FramebufferClear::Depth); std::string filename; - Containers::Optional data; + Containers::Optional data; std::tie(data, filename) = (this->*fun)(); MeshTools::compile(*data) @@ -411,11 +404,11 @@ int PrimitiveVisualizer::exec() { return 0; } -std::pair PrimitiveVisualizer::axis2D() { +std::pair PrimitiveVisualizer::axis2D() { return {Primitives::axis2D(), "axis2d.png"}; } -std::pair PrimitiveVisualizer::gradient2D() { +std::pair PrimitiveVisualizer::gradient2D() { return {Primitives::gradient2D({1.0f, -2.0f}, 0x2f83cc_srgbf, {-1.0f, 2.0f}, 0x3bd267_srgbf), "gradient2d.png"}; } @@ -426,142 +419,147 @@ namespace { const Color3 Gradient80Percent = Math::lerp(0x2f83cc_srgbf, 0x3bd267_srgbf, 0.8f); } -std::pair PrimitiveVisualizer::gradient2DHorizontal() { +std::pair PrimitiveVisualizer::gradient2DHorizontal() { return {Primitives::gradient2DHorizontal(Gradient20Percent, Gradient80Percent), "gradient2dhorizontal.png"}; } -std::pair PrimitiveVisualizer::gradient2DVertical() { +std::pair PrimitiveVisualizer::gradient2DVertical() { /* End colors are 20%/80% blends of the above to match the range */ return {Primitives::gradient2DVertical(Gradient20Percent, Gradient80Percent), "gradient2dvertical.png"}; } -std::pair PrimitiveVisualizer::axis3D() { +std::pair PrimitiveVisualizer::axis3D() { return {Primitives::axis3D(), "axis3d.png"}; } -std::pair PrimitiveVisualizer::gradient3D() { +std::pair PrimitiveVisualizer::gradient3D() { return {Primitives::gradient3D({1.0f, -2.0f, -1.5f}, 0x2f83cc_srgbf, {-1.0f, 2.0f, -1.5f}, 0x3bd267_srgbf), "gradient3d.png"}; } -std::pair PrimitiveVisualizer::gradient3DHorizontal() { +std::pair PrimitiveVisualizer::gradient3DHorizontal() { return {Primitives::gradient3DHorizontal(Gradient20Percent, Gradient80Percent), "gradient3dhorizontal.png"}; } -std::pair PrimitiveVisualizer::gradient3DVertical() { +std::pair PrimitiveVisualizer::gradient3DVertical() { return {Primitives::gradient3DVertical(Gradient20Percent, Gradient80Percent), "gradient3dvertical.png"}; } -std::pair PrimitiveVisualizer::capsule2DWireframe() { - Trade::MeshData2D capsule = Primitives::capsule2DWireframe(8, 1, 0.75f); - MeshTools::transformPointsInPlace(Matrix3::scaling(Vector2{0.75f}), capsule.positions(0)); +std::pair PrimitiveVisualizer::capsule2DWireframe() { + Trade::MeshData capsule = Primitives::capsule2DWireframe(8, 1, 0.75f); + MeshTools::transformPointsInPlace(Matrix3::scaling(Vector2{0.75f}), + capsule.mutableAttribute(Trade::MeshAttribute::Position)); return {std::move(capsule), "capsule2dwireframe.png"}; } -std::pair PrimitiveVisualizer::circle2DWireframe() { +std::pair PrimitiveVisualizer::circle2DWireframe() { return {Primitives::circle2DWireframe(32), "circle2dwireframe.png"}; } -std::pair PrimitiveVisualizer::crosshair2D() { +std::pair PrimitiveVisualizer::crosshair2D() { return {Primitives::crosshair2D(), "crosshair2d.png"}; } -std::pair PrimitiveVisualizer::line2D() { - Trade::MeshData2D line = Primitives::line2D(); - MeshTools::transformPointsInPlace(Matrix3::translation(Vector2::xAxis(-1.0f))*Matrix3::scaling(Vector2::xScale(2.0f)), line.positions(0)); +std::pair PrimitiveVisualizer::line2D() { + Trade::MeshData line = Primitives::line2D(); + MeshTools::transformPointsInPlace(Matrix3::translation(Vector2::xAxis(-1.0f))*Matrix3::scaling(Vector2::xScale(2.0f)), + line.mutableAttribute(Trade::MeshAttribute::Position)); return {std::move(line), "line2d.png"}; } -std::pair PrimitiveVisualizer::squareWireframe() { +std::pair PrimitiveVisualizer::squareWireframe() { return {Primitives::squareWireframe(), "squarewireframe.png"}; } -std::pair PrimitiveVisualizer::capsule3DWireframe() { - Trade::MeshData3D capsule = Primitives::capsule3DWireframe(8, 1, 16, 1.0f); - MeshTools::transformPointsInPlace(Matrix4::scaling(Vector3{0.75f}), capsule.positions(0)); +std::pair PrimitiveVisualizer::capsule3DWireframe() { + Trade::MeshData capsule = Primitives::capsule3DWireframe(8, 1, 16, 1.0f); + MeshTools::transformPointsInPlace(Matrix4::scaling(Vector3{0.75f}), + capsule.mutableAttribute(Trade::MeshAttribute::Position)); return {std::move(capsule), "capsule3dwireframe.png"}; } -std::pair PrimitiveVisualizer::circle3DWireframe() { +std::pair PrimitiveVisualizer::circle3DWireframe() { return {Primitives::circle3DWireframe(32), "circle3dwireframe.png"}; } -std::pair PrimitiveVisualizer::crosshair3D() { +std::pair PrimitiveVisualizer::crosshair3D() { return {Primitives::crosshair3D(), "crosshair3d.png"}; } -std::pair PrimitiveVisualizer::coneWireframe() { +std::pair PrimitiveVisualizer::coneWireframe() { return {Primitives::coneWireframe(32, 1.25f), "conewireframe.png"}; } -std::pair PrimitiveVisualizer::cubeWireframe() { +std::pair PrimitiveVisualizer::cubeWireframe() { return {Primitives::cubeWireframe(), "cubewireframe.png"}; } -std::pair PrimitiveVisualizer::cylinderWireframe() { +std::pair PrimitiveVisualizer::cylinderWireframe() { return {Primitives::cylinderWireframe(1, 32, 1.0f), "cylinderwireframe.png"}; } -std::pair PrimitiveVisualizer::grid3DWireframe() { +std::pair PrimitiveVisualizer::grid3DWireframe() { return {Primitives::grid3DWireframe({5, 3}), "grid3dwireframe.png"}; } -std::pair PrimitiveVisualizer::line3D() { - Trade::MeshData3D line = Primitives::line3D(); - MeshTools::transformPointsInPlace(Matrix4::translation(Vector3::xAxis(-1.0f))*Matrix4::scaling(Vector3::xScale(2.0f)), line.positions(0)); +std::pair PrimitiveVisualizer::line3D() { + Trade::MeshData line = Primitives::line3D(); + MeshTools::transformPointsInPlace(Matrix4::translation(Vector3::xAxis(-1.0f))*Matrix4::scaling(Vector3::xScale(2.0f)), + line.mutableAttribute(Trade::MeshAttribute::Position)); return {std::move(line), "line3d.png"}; } -std::pair PrimitiveVisualizer::planeWireframe() { +std::pair PrimitiveVisualizer::planeWireframe() { return {Primitives::planeWireframe(), "planewireframe.png"}; } -std::pair PrimitiveVisualizer::uvSphereWireframe() { +std::pair PrimitiveVisualizer::uvSphereWireframe() { return {Primitives::uvSphereWireframe(16, 32), "uvspherewireframe.png"}; } -std::pair PrimitiveVisualizer::circle2DSolid() { +std::pair PrimitiveVisualizer::circle2DSolid() { return {Primitives::circle2DSolid(16), "circle2dsolid.png"}; } -std::pair PrimitiveVisualizer::squareSolid() { +std::pair PrimitiveVisualizer::squareSolid() { return {Primitives::squareSolid(), "squaresolid.png"}; } -std::pair PrimitiveVisualizer::capsule3DSolid() { - Trade::MeshData3D capsule = Primitives::capsule3DSolid(4, 1, 12, 0.75f); - MeshTools::transformPointsInPlace(Matrix4::scaling(Vector3{0.75f}), capsule.positions(0)); +std::pair PrimitiveVisualizer::capsule3DSolid() { + Trade::MeshData capsule = Primitives::capsule3DSolid(4, 1, 12, 0.75f); + MeshTools::transformPointsInPlace(Matrix4::scaling(Vector3{0.75f}), + capsule.mutableAttribute(Trade::MeshAttribute::Position)); return {std::move(capsule), "capsule3dsolid.png"}; } -std::pair PrimitiveVisualizer::circle3DSolid() { +std::pair PrimitiveVisualizer::circle3DSolid() { return {Primitives::circle3DSolid(16), "circle3dsolid.png"}; } -std::pair PrimitiveVisualizer::coneSolid() { +std::pair PrimitiveVisualizer::coneSolid() { return {Primitives::coneSolid(1, 12, 1.25f, Primitives::ConeFlag::CapEnd), "conesolid.png"}; } -std::pair PrimitiveVisualizer::cubeSolid() { +std::pair PrimitiveVisualizer::cubeSolid() { return {Primitives::cubeSolid(), "cubesolid.png"}; } -std::pair PrimitiveVisualizer::cylinderSolid() { +std::pair PrimitiveVisualizer::cylinderSolid() { return {Primitives::cylinderSolid(1, 12, 1.0f, Primitives::CylinderFlag::CapEnds), "cylindersolid.png"}; } -std::pair PrimitiveVisualizer::grid3DSolid() { +std::pair PrimitiveVisualizer::grid3DSolid() { return {Primitives::grid3DSolid({5, 3}), "grid3dsolid.png"}; } -std::pair PrimitiveVisualizer::icosphereSolid() { +std::pair PrimitiveVisualizer::icosphereSolid() { return {Primitives::icosphereSolid(1), "icospheresolid.png"}; } -std::pair PrimitiveVisualizer::planeSolid() { +std::pair PrimitiveVisualizer::planeSolid() { return {Primitives::planeSolid(), "planesolid.png"}; } -std::pair PrimitiveVisualizer::uvSphereSolid() { +std::pair PrimitiveVisualizer::uvSphereSolid() { return {Primitives::uvSphereSolid(8, 16), "uvspheresolid.png"}; } diff --git a/doc/generated/shaders.cpp b/doc/generated/shaders.cpp index 100e37243..cf488d12d 100644 --- a/doc/generated/shaders.cpp +++ b/doc/generated/shaders.cpp @@ -66,8 +66,7 @@ #include #include #include -#include -#include +#include #include using namespace Magnum; @@ -192,22 +191,22 @@ std::string ShaderVisualizer::flat() { } std::string ShaderVisualizer::vertexColor() { - Trade::MeshData3D sphere = Primitives::uvSphereSolid(32, 64); + Trade::MeshData sphere = Primitives::uvSphereSolid(32, 64); /* Color vertices nearest to given position */ auto target = Vector3{2.0f, 2.0f, 7.0f}.normalized(); std::vector colors; - colors.reserve(sphere.positions(0).size()); - for(Vector3 position: sphere.positions(0)) + colors.reserve(sphere.vertexCount()); + for(Vector3 position: sphere.attribute(Trade::MeshAttribute::Position)) colors.push_back(Color3::fromHsv({Math::lerp(240.0_degf, 420.0_degf, Math::max(1.0f - (position - target).length(), 0.0f)), 0.85f, 0.666f})); GL::Buffer vertices, indices; - vertices.setData(MeshTools::interleave(sphere.positions(0), colors), GL::BufferUsage::StaticDraw); - indices.setData(sphere.indices(), GL::BufferUsage::StaticDraw); + vertices.setData(MeshTools::interleave(sphere.attribute(Trade::MeshAttribute::Position), colors), GL::BufferUsage::StaticDraw); + indices.setData(sphere.indices(), GL::BufferUsage::StaticDraw); GL::Mesh mesh; mesh.setPrimitive(GL::MeshPrimitive::Triangles) - .setCount(sphere.indices().size()) + .setCount(sphere.indexCount()) .addVertexBuffer(vertices, 0, Shaders::VertexColor3D::Position{}, Shaders::VertexColor3D::Color3{}) diff --git a/src/Magnum/Primitives/Test/AxisTest.cpp b/src/Magnum/Primitives/Test/AxisTest.cpp index f1f93ac36..56ac3f5a6 100644 --- a/src/Magnum/Primitives/Test/AxisTest.cpp +++ b/src/Magnum/Primitives/Test/AxisTest.cpp @@ -28,8 +28,7 @@ #include "Magnum/Mesh.h" #include "Magnum/Math/Color.h" #include "Magnum/Primitives/Axis.h" -#include "Magnum/Trade/MeshData2D.h" -#include "Magnum/Trade/MeshData3D.h" +#include "Magnum/Trade/MeshData.h" namespace Magnum { namespace Primitives { namespace Test { namespace { @@ -46,21 +45,33 @@ AxisTest::AxisTest() { } void AxisTest::twoDimensions() { - Trade::MeshData2D axis = Primitives::axis2D(); + Trade::MeshData axis = Primitives::axis2D(); CORRADE_COMPARE(axis.primitive(), MeshPrimitive::Lines); - CORRADE_COMPARE(axis.indices().size(), 12); - CORRADE_COMPARE(axis.positions(0).size(), 8); - CORRADE_COMPARE(axis.colors(0).size(), 8); + CORRADE_VERIFY(axis.isIndexed()); + CORRADE_COMPARE(axis.indexCount(), 12); + CORRADE_COMPARE(axis.vertexCount(), 8); + CORRADE_COMPARE(axis.attributeCount(), 2); + CORRADE_COMPARE(axis.indices()[5], 3); + CORRADE_COMPARE(axis.attribute(Trade::MeshAttribute::Position)[3], + (Vector2{0.9f, -0.1f})); + CORRADE_COMPARE(axis.attribute(Trade::MeshAttribute::Color)[6], + (Color3{0.0f, 1.0f, 0.0f})); } void AxisTest::threeDimensions() { - Trade::MeshData3D axis = Primitives::axis3D(); + Trade::MeshData axis = Primitives::axis3D(); CORRADE_COMPARE(axis.primitive(), MeshPrimitive::Lines); - CORRADE_COMPARE(axis.indices().size(), 18); - CORRADE_COMPARE(axis.positions(0).size(), 12); - CORRADE_COMPARE(axis.colors(0).size(), 12); + CORRADE_VERIFY(axis.isIndexed()); + CORRADE_COMPARE(axis.indexCount(), 18); + CORRADE_COMPARE(axis.vertexCount(), 12); + CORRADE_COMPARE(axis.attributeCount(), 2); + CORRADE_COMPARE(axis.indices()[12], 8); + CORRADE_COMPARE(axis.attribute(Trade::MeshAttribute::Position)[6], + (Vector3{0.1f, 0.9f, 0.0f})); + CORRADE_COMPARE(axis.attribute(Trade::MeshAttribute::Color)[4], + (Color3{0.0f, 1.0f, 0.0f})); } }}}} diff --git a/src/Magnum/Primitives/Test/CapsuleTest.cpp b/src/Magnum/Primitives/Test/CapsuleTest.cpp index 4ae068aaa..bcb357885 100644 --- a/src/Magnum/Primitives/Test/CapsuleTest.cpp +++ b/src/Magnum/Primitives/Test/CapsuleTest.cpp @@ -27,8 +27,7 @@ #include #include "Magnum/Math/Vector3.h" -#include "Magnum/Trade/MeshData2D.h" -#include "Magnum/Trade/MeshData3D.h" +#include "Magnum/Trade/MeshData.h" #include "Magnum/Primitives/Capsule.h" namespace Magnum { namespace Primitives { namespace Test { namespace { @@ -51,9 +50,13 @@ CapsuleTest::CapsuleTest() { } void CapsuleTest::wireframe2D() { - Trade::MeshData2D capsule = capsule2DWireframe(2, 4, 0.5f); + Trade::MeshData capsule = capsule2DWireframe(2, 4, 0.5f); - CORRADE_COMPARE_AS(capsule.positions(0), (std::vector{ + CORRADE_COMPARE(capsule.primitive(), MeshPrimitive::Lines); + CORRADE_VERIFY(capsule.isIndexed()); + CORRADE_COMPARE(capsule.attributeCount(), 1); + + CORRADE_COMPARE_AS(capsule.attribute(Trade::MeshAttribute::Position), Containers::arrayView({ {0.0f, -1.5f}, {-0.707107f, -1.20711f}, @@ -80,7 +83,7 @@ void CapsuleTest::wireframe2D() { {0.0f, 1.5f} }), TestSuite::Compare::Container); - CORRADE_COMPARE_AS(capsule.indices(), (std::vector{ + CORRADE_COMPARE_AS(capsule.indices(), Containers::arrayView({ 0, 1, 0, 2, 1, 3, 2, 4, @@ -95,9 +98,13 @@ void CapsuleTest::wireframe2D() { } void CapsuleTest::solid3DWithoutTextureCoords() { - Trade::MeshData3D capsule = capsule3DSolid(2, 4, 3, 0.5f); + Trade::MeshData capsule = capsule3DSolid(2, 4, 3, 0.5f); + + CORRADE_COMPARE(capsule.primitive(), MeshPrimitive::Triangles); + CORRADE_VERIFY(capsule.isIndexed()); + CORRADE_COMPARE(capsule.attributeCount(), 2); - CORRADE_COMPARE_AS(capsule.positions(0), (std::vector{ + CORRADE_COMPARE_AS(capsule.attribute(Trade::MeshAttribute::Position), Containers::arrayView({ {0.0f, -1.5f, 0.0f}, {0.0f, -1.20711f, 0.707107f}, @@ -131,7 +138,7 @@ void CapsuleTest::solid3DWithoutTextureCoords() { {0.0f, 1.5f, 0.0f} }), TestSuite::Compare::Container); - CORRADE_COMPARE_AS(capsule.normals(0), (std::vector{ + CORRADE_COMPARE_AS(capsule.attribute(Trade::MeshAttribute::Normal), Containers::arrayView({ {0.0f, -1.0f, 0.0f}, {0.0f, -0.707107f, 0.707107f}, @@ -165,7 +172,7 @@ void CapsuleTest::solid3DWithoutTextureCoords() { {0.0f, 1.0f, 0.0f} }), TestSuite::Compare::Container); - CORRADE_COMPARE_AS(capsule.indices(), (std::vector{ + CORRADE_COMPARE_AS(capsule.indices(), Containers::arrayView({ 0, 2, 1, 0, 3, 2, 0, 1, 3, 1, 2, 5, 1, 5, 4, 2, 3, 6, 2, 6, 5, 3, 1, 4, 3, 4, 6, 4, 5, 8, 4, 8, 7, 5, 6, 9, 5, 9, 8, 6, 4, 7, 6, 7, 9, @@ -178,9 +185,13 @@ void CapsuleTest::solid3DWithoutTextureCoords() { } void CapsuleTest::solid3DWithTextureCoords() { - Trade::MeshData3D capsule = capsule3DSolid(2, 2, 3, 0.5f, CapsuleTextureCoords::Generate); + Trade::MeshData capsule = capsule3DSolid(2, 2, 3, 0.5f, CapsuleTextureCoords::Generate); + + CORRADE_COMPARE(capsule.primitive(), MeshPrimitive::Triangles); + CORRADE_VERIFY(capsule.isIndexed()); + CORRADE_COMPARE(capsule.attributeCount(), 3); - CORRADE_COMPARE_AS(capsule.positions(0), (std::vector{ + CORRADE_COMPARE_AS(capsule.attribute(Trade::MeshAttribute::Position), Containers::arrayView({ {0.0f, -1.5f, 0.0f}, {0.0f, -1.20711f, 0.707107f}, @@ -211,7 +222,7 @@ void CapsuleTest::solid3DWithTextureCoords() { {0.0f, 1.5f, 0.0f} }), TestSuite::Compare::Container); - CORRADE_COMPARE_AS(capsule.textureCoords2D(0), (std::vector{ + CORRADE_COMPARE_AS(capsule.attribute(Trade::MeshAttribute::TextureCoordinates), Containers::arrayView({ {0.5f, 0.0f}, {0.0f, 0.166667f}, @@ -242,7 +253,7 @@ void CapsuleTest::solid3DWithTextureCoords() { {0.5f, 1.0f} }), TestSuite::Compare::Container); - CORRADE_COMPARE_AS(capsule.indices(), (std::vector{ + CORRADE_COMPARE_AS(capsule.indices(), Containers::arrayView({ 0, 2, 1, 0, 3, 2, 0, 4, 3, 1, 2, 6, 1, 6, 5, 2, 3, 7, 2, 7, 6, 3, 4, 8, 3, 8, 7, 5, 6, 10, 5, 10, 9, 6, 7, 11, 6, 11, 10, 7, 8, 12, 7, 12, 11, @@ -253,9 +264,13 @@ void CapsuleTest::solid3DWithTextureCoords() { } void CapsuleTest::wireframe3D() { - Trade::MeshData3D capsule = capsule3DWireframe(2, 2, 8, 0.5f); + Trade::MeshData capsule = capsule3DWireframe(2, 2, 8, 0.5f); - CORRADE_COMPARE_AS(capsule.positions(0), (std::vector{ + CORRADE_COMPARE(capsule.primitive(), MeshPrimitive::Lines); + CORRADE_VERIFY(capsule.isIndexed()); + CORRADE_COMPARE(capsule.attributeCount(), 1); + + CORRADE_COMPARE_AS(capsule.attribute(Trade::MeshAttribute::Position), Containers::arrayView({ {0.0f, -1.5f, 0.0f}, {0.0f, -1.20711f, 0.707107f}, @@ -298,9 +313,7 @@ void CapsuleTest::wireframe3D() { {0.0f, 1.5f, 0.0f} }), TestSuite::Compare::Container); - CORRADE_COMPARE(capsule.normalArrayCount(), 0); - - CORRADE_COMPARE_AS(capsule.indices(), (std::vector{ + CORRADE_COMPARE_AS(capsule.indices(), Containers::arrayView({ 0, 1, 0, 2, 0, 3, 0, 4, 1, 5, 2, 6, 3, 7, 4, 8, 5, 9, 6, 10, 7, 11, 8, 12, diff --git a/src/Magnum/Primitives/Test/CircleTest.cpp b/src/Magnum/Primitives/Test/CircleTest.cpp index 92dda4a6c..df97ad294 100644 --- a/src/Magnum/Primitives/Test/CircleTest.cpp +++ b/src/Magnum/Primitives/Test/CircleTest.cpp @@ -29,8 +29,7 @@ #include "Magnum/Mesh.h" #include "Magnum/Math/Vector3.h" #include "Magnum/Primitives/Circle.h" -#include "Magnum/Trade/MeshData2D.h" -#include "Magnum/Trade/MeshData3D.h" +#include "Magnum/Trade/MeshData.h" namespace Magnum { namespace Primitives { namespace Test { namespace { @@ -59,11 +58,12 @@ CircleTest::CircleTest() { } void CircleTest::solid2D() { - Trade::MeshData2D circle = Primitives::circle2DSolid(8); + Trade::MeshData circle = Primitives::circle2DSolid(8); - CORRADE_VERIFY(!circle.isIndexed()); CORRADE_COMPARE(circle.primitive(), MeshPrimitive::TriangleFan); - CORRADE_COMPARE_AS(circle.positions(0), (std::vector{ + CORRADE_VERIFY(!circle.isIndexed()); + CORRADE_COMPARE(circle.attributeCount(), 1); + CORRADE_COMPARE_AS(circle.attribute(Trade::MeshAttribute::Position), Containers::arrayView({ { 0.0f, 0.0f}, { 1.0f, 0.0f}, { Constants::sqrt2()/2.0f, Constants::sqrt2()/2.0f}, { 0.0f, 1.0f}, {-Constants::sqrt2()/2.0f, Constants::sqrt2()/2.0f}, @@ -71,15 +71,15 @@ void CircleTest::solid2D() { { 0.0f, -1.0f}, { Constants::sqrt2()/2.0f, -Constants::sqrt2()/2.0f}, { 1.0f, 0.0f} }), TestSuite::Compare::Container); - CORRADE_COMPARE(circle.textureCoords2DArrayCount(), 0); } void CircleTest::solid2DTextureCoords() { - Trade::MeshData2D circle = Primitives::circle2DSolid(8, Primitives::CircleTextureCoords::Generate); + Trade::MeshData circle = Primitives::circle2DSolid(8, Primitives::CircleTextureCoords::Generate); - CORRADE_VERIFY(!circle.isIndexed()); CORRADE_COMPARE(circle.primitive(), MeshPrimitive::TriangleFan); - CORRADE_COMPARE_AS(circle.positions(0), (std::vector{ + CORRADE_VERIFY(!circle.isIndexed()); + CORRADE_COMPARE(circle.attributeCount(), 2); + CORRADE_COMPARE_AS(circle.attribute(Trade::MeshAttribute::Position), Containers::arrayView({ { 0.0f, 0.0f}, { 1.0f, 0.0f}, { Constants::sqrt2()/2.0f, Constants::sqrt2()/2.0f}, { 0.0f, 1.0f}, {-Constants::sqrt2()/2.0f, Constants::sqrt2()/2.0f}, @@ -87,8 +87,7 @@ void CircleTest::solid2DTextureCoords() { { 0.0f, -1.0f}, { Constants::sqrt2()/2.0f, -Constants::sqrt2()/2.0f}, { 1.0f, 0.0f} }), TestSuite::Compare::Container); - CORRADE_COMPARE(circle.textureCoords2DArrayCount(), 1); - CORRADE_COMPARE_AS(circle.textureCoords2D(0), (std::vector{ + CORRADE_COMPARE_AS(circle.attribute(Trade::MeshAttribute::TextureCoordinates), Containers::arrayView({ {0.5f, 0.5f}, {1.0f, 0.5f}, {0.5f + Constants::sqrt2()/4.0f, 0.5f + Constants::sqrt2()/4.0f}, {0.5f, 1.0f}, {0.5f - Constants::sqrt2()/4.0f, 0.5f + Constants::sqrt2()/4.0f}, @@ -99,11 +98,12 @@ void CircleTest::solid2DTextureCoords() { } void CircleTest::solid3D() { - Trade::MeshData3D circle = Primitives::circle3DSolid(8); + Trade::MeshData circle = Primitives::circle3DSolid(8); - CORRADE_VERIFY(!circle.isIndexed()); CORRADE_COMPARE(circle.primitive(), MeshPrimitive::TriangleFan); - CORRADE_COMPARE_AS(circle.positions(0), (std::vector{ + CORRADE_VERIFY(!circle.isIndexed()); + CORRADE_COMPARE(circle.attributeCount(), 2); + CORRADE_COMPARE_AS(circle.attribute(Trade::MeshAttribute::Position), Containers::arrayView({ { 0.0f, 0.0f, 0.0f}, { 1.0f, 0.0f, 0.0f}, { Constants::sqrt2()/2.0f, Constants::sqrt2()/2.0f, 0.0f}, { 0.0f, 1.0f, 0.0f}, {-Constants::sqrt2()/2.0f, Constants::sqrt2()/2.0f, 0.0f}, @@ -111,7 +111,7 @@ void CircleTest::solid3D() { { 0.0f, -1.0f, 0.0f}, { Constants::sqrt2()/2.0f, -Constants::sqrt2()/2.0f, 0.0f}, { 1.0f, 0.0f, 0.0f} }), TestSuite::Compare::Container); - CORRADE_COMPARE_AS(circle.normals(0), (std::vector{ + CORRADE_COMPARE_AS(circle.attribute(Trade::MeshAttribute::Normal), Containers::arrayView({ { 0.0f, 0.0f, 1.0f}, { 0.0f, 0.0f, 1.0f}, { 0.0f, 0.0f, 1.0f}, @@ -123,15 +123,15 @@ void CircleTest::solid3D() { { 0.0f, 0.0f, 1.0f}, { 0.0f, 0.0f, 1.0f} }), TestSuite::Compare::Container); - CORRADE_COMPARE(circle.textureCoords2DArrayCount(), 0); } void CircleTest::solid3DTextureCoords() { - Trade::MeshData3D circle = Primitives::circle3DSolid(8, Primitives::CircleTextureCoords::Generate); + Trade::MeshData circle = Primitives::circle3DSolid(8, Primitives::CircleTextureCoords::Generate); - CORRADE_VERIFY(!circle.isIndexed()); CORRADE_COMPARE(circle.primitive(), MeshPrimitive::TriangleFan); - CORRADE_COMPARE_AS(circle.positions(0), (std::vector{ + CORRADE_VERIFY(!circle.isIndexed()); + CORRADE_COMPARE(circle.attributeCount(), 3); + CORRADE_COMPARE_AS(circle.attribute(Trade::MeshAttribute::Position), Containers::arrayView({ { 0.0f, 0.0f, 0.0f}, { 1.0f, 0.0f, 0.0f}, { Constants::sqrt2()/2.0f, Constants::sqrt2()/2.0f, 0.0f}, { 0.0f, 1.0f, 0.0f}, {-Constants::sqrt2()/2.0f, Constants::sqrt2()/2.0f, 0.0f}, @@ -139,7 +139,7 @@ void CircleTest::solid3DTextureCoords() { { 0.0f, -1.0f, 0.0f}, { Constants::sqrt2()/2.0f, -Constants::sqrt2()/2.0f, 0.0f}, { 1.0f, 0.0f, 0.0f} }), TestSuite::Compare::Container); - CORRADE_COMPARE_AS(circle.normals(0), (std::vector{ + CORRADE_COMPARE_AS(circle.attribute(Trade::MeshAttribute::Normal), Containers::arrayView({ { 0.0f, 0.0f, 1.0f}, { 0.0f, 0.0f, 1.0f}, { 0.0f, 0.0f, 1.0f}, @@ -151,8 +151,7 @@ void CircleTest::solid3DTextureCoords() { { 0.0f, 0.0f, 1.0f}, { 0.0f, 0.0f, 1.0f} }), TestSuite::Compare::Container); - CORRADE_COMPARE(circle.textureCoords2DArrayCount(), 1); - CORRADE_COMPARE_AS(circle.textureCoords2D(0), (std::vector{ + CORRADE_COMPARE_AS(circle.attribute(Trade::MeshAttribute::TextureCoordinates), Containers::arrayView({ {0.5f, 0.5f}, {1.0f, 0.5f}, {0.5f + Constants::sqrt2()/4.0f, 0.5f + Constants::sqrt2()/4.0f}, {0.5f, 1.0f}, {0.5f - Constants::sqrt2()/4.0f, 0.5f + Constants::sqrt2()/4.0f}, @@ -163,11 +162,12 @@ void CircleTest::solid3DTextureCoords() { } void CircleTest::wireframe2D() { - Trade::MeshData2D circle = Primitives::circle2DWireframe(8); + Trade::MeshData circle = Primitives::circle2DWireframe(8); - CORRADE_VERIFY(!circle.isIndexed()); CORRADE_COMPARE(circle.primitive(), MeshPrimitive::LineLoop); - CORRADE_COMPARE_AS(circle.positions(0), (std::vector{ + CORRADE_VERIFY(!circle.isIndexed()); + CORRADE_COMPARE(circle.attributeCount(), 1); + CORRADE_COMPARE_AS(circle.attribute(Trade::MeshAttribute::Position), Containers::arrayView({ { 1.0f, 0.0f}, { Constants::sqrt2()/2.0f, Constants::sqrt2()/2.0f}, { 0.0f, 1.0f}, {-Constants::sqrt2()/2.0f, Constants::sqrt2()/2.0f}, {-1.0f, 0.0f}, {-Constants::sqrt2()/2.0f, -Constants::sqrt2()/2.0f}, @@ -176,11 +176,12 @@ void CircleTest::wireframe2D() { } void CircleTest::wireframe3D() { - Trade::MeshData3D circle = Primitives::circle3DWireframe(8); + Trade::MeshData circle = Primitives::circle3DWireframe(8); - CORRADE_VERIFY(!circle.isIndexed()); CORRADE_COMPARE(circle.primitive(), MeshPrimitive::LineLoop); - CORRADE_COMPARE_AS(circle.positions(0), (std::vector{ + CORRADE_VERIFY(!circle.isIndexed()); + CORRADE_COMPARE(circle.attributeCount(), 1); + CORRADE_COMPARE_AS(circle.attribute(Trade::MeshAttribute::Position), Containers::arrayView({ { 1.0f, 0.0f, 0.0f}, { Constants::sqrt2()/2.0f, Constants::sqrt2()/2.0f, 0.0f}, { 0.0f, 1.0f, 0.0f}, {-Constants::sqrt2()/2.0f, Constants::sqrt2()/2.0f, 0.0f}, {-1.0f, 0.0f, 0.0f}, {-Constants::sqrt2()/2.0f, -Constants::sqrt2()/2.0f, 0.0f}, diff --git a/src/Magnum/Primitives/Test/ConeTest.cpp b/src/Magnum/Primitives/Test/ConeTest.cpp index bc3e84806..f907f6202 100644 --- a/src/Magnum/Primitives/Test/ConeTest.cpp +++ b/src/Magnum/Primitives/Test/ConeTest.cpp @@ -28,7 +28,7 @@ #include "Magnum/Math/Vector3.h" #include "Magnum/Primitives/Cone.h" -#include "Magnum/Trade/MeshData3D.h" +#include "Magnum/Trade/MeshData.h" namespace Magnum { namespace Primitives { namespace Test { namespace { @@ -51,9 +51,13 @@ ConeTest::ConeTest() { } void ConeTest::solidWithoutAnything() { - Trade::MeshData3D cone = coneSolid(2, 3, 1.0f); + Trade::MeshData cone = coneSolid(2, 3, 1.0f); - CORRADE_COMPARE_AS(cone.positions(0), (std::vector{ + CORRADE_COMPARE(cone.primitive(), MeshPrimitive::Triangles); + CORRADE_VERIFY(cone.isIndexed()); + CORRADE_COMPARE(cone.attributeCount(), 2); + + CORRADE_COMPARE_AS(cone.attribute(Trade::MeshAttribute::Position), Containers::arrayView({ {0.0f, -1.0f, 1.0f}, /* 0 */ {0.866025f, -1.0f, -0.5f}, /* 1 */ {-0.866025f, -1.0f, -0.5f}, /* 2 */ @@ -67,7 +71,7 @@ void ConeTest::solidWithoutAnything() { {0.0f, 1.0f, 0.0f} /* 8 */ }), TestSuite::Compare::Container); - CORRADE_COMPARE_AS(cone.normals(0), (std::vector{ + CORRADE_COMPARE_AS(cone.attribute(Trade::MeshAttribute::Normal), Containers::arrayView({ {0.0f, 0.447214f, 0.894427f}, /* 0 */ {0.774597f, 0.447214f, -0.447214f}, /* 1 */ {-0.774597f, 0.447214f, -0.447214f}, /* 2 */ @@ -81,20 +85,22 @@ void ConeTest::solidWithoutAnything() { {-0.774597f, 0.447214f, -0.447214f} /* 8 */ }), TestSuite::Compare::Container); - CORRADE_VERIFY(!cone.hasTextureCoords2D()); - - CORRADE_COMPARE_AS(cone.indices(), (std::vector{ + CORRADE_COMPARE_AS(cone.indices(), Containers::arrayView({ 0, 1, 4, 0, 4, 3, 1, 2, 5, 1, 5, 4, 2, 0, 3, 2, 3, 5, 3, 4, 7, 3, 7, 6, 4, 5, 8, 4, 8, 7, 5, 3, 6, 5, 6, 8 }), TestSuite::Compare::Container); } void ConeTest::solidWithCaps() { - Trade::MeshData3D cone = coneSolid(2, 3, 1.0f, ConeFlag::CapEnd); + Trade::MeshData cone = coneSolid(2, 3, 1.0f, ConeFlag::CapEnd); + + CORRADE_COMPARE(cone.primitive(), MeshPrimitive::Triangles); + CORRADE_VERIFY(cone.isIndexed()); + CORRADE_COMPARE(cone.attributeCount(), 2); /* Bottom ring duplicated because it has different normals, first vertex of each ring duplicated because it has different texture coordinates */ - CORRADE_COMPARE_AS(cone.positions(0), (std::vector{ + CORRADE_COMPARE_AS(cone.attribute(Trade::MeshAttribute::Position), Containers::arrayView({ {0.0f, -1.0f, 0.0f}, /* 0 */ {0.0f, -1.0f, 1.0f}, /* 1 */ @@ -114,7 +120,7 @@ void ConeTest::solidWithCaps() { {0.0f, 1.0f, 0.0f}, /* 12 */ }), TestSuite::Compare::Container); - CORRADE_COMPARE_AS(cone.normals(0), (std::vector{ + CORRADE_COMPARE_AS(cone.attribute(Trade::MeshAttribute::Normal), Containers::arrayView({ {0.0f, -1.0f, 0.0f}, /* 0 */ {0.0f, -1.0f, 0.0f}, /* 1 */ @@ -134,11 +140,9 @@ void ConeTest::solidWithCaps() { {-0.774597f, 0.447214f, -0.447214f}, /* 12 */ }), TestSuite::Compare::Container); - CORRADE_VERIFY(!cone.hasTextureCoords2D()); - /* Faces of the caps and sides do not share any vertices due to different normals */ - CORRADE_COMPARE_AS(cone.indices(), (std::vector{ + CORRADE_COMPARE_AS(cone.indices(), Containers::arrayView({ 0, 2, 1, 0, 3, 2, 0, 1, 3, 4, 5, 8, 4, 8, 7, 5, 6, 9, 5, 9, 8, 6, 4, 7, 6, 7, 9, 7, 8, 11, 7, 11, 10, 8, 9, 12, 8, 12, 11, 9, 7, 10, 9, 10, 12 @@ -146,11 +150,15 @@ void ConeTest::solidWithCaps() { } void ConeTest::solidWithTextureCoords() { - Trade::MeshData3D cone = coneSolid(2, 3, 1.0f, ConeFlag::GenerateTextureCoords); + Trade::MeshData cone = coneSolid(2, 3, 1.0f, ConeFlag::GenerateTextureCoords); + + CORRADE_COMPARE(cone.primitive(), MeshPrimitive::Triangles); + CORRADE_VERIFY(cone.isIndexed()); + CORRADE_COMPARE(cone.attributeCount(), 3); /* Bottom ring duplicated because it has different normals, first vertex of each ring duplicated because it has different texture coordinates */ - CORRADE_COMPARE_AS(cone.positions(0), (std::vector{ + CORRADE_COMPARE_AS(cone.attribute(Trade::MeshAttribute::Position), Containers::arrayView({ {0.0f, -1.0f, 1.0f}, /* 0 */ {0.866025f, -1.0f, -0.5f}, /* 1 */ {-0.866025f, -1.0f, -0.5f}, /* 2 */ @@ -167,7 +175,7 @@ void ConeTest::solidWithTextureCoords() { {0.0f, 1.0f, 0.0f} /* 11 */ }), TestSuite::Compare::Container); - CORRADE_COMPARE_AS(cone.normals(0), (std::vector{ + CORRADE_COMPARE_AS(cone.attribute(Trade::MeshAttribute::Normal), Containers::arrayView({ {0.0f, 0.447214f, 0.894427f}, /* 0 */ {0.774597f, 0.447214f, -0.447214f}, /* 1 */ {-0.774597f, 0.447214f, -0.447214f}, /* 2 */ @@ -184,7 +192,7 @@ void ConeTest::solidWithTextureCoords() { {0.0f, 0.447214f, 0.894427f} /* 11 */ }), TestSuite::Compare::Container); - CORRADE_COMPARE_AS(cone.textureCoords2D(0), (std::vector{ + CORRADE_COMPARE_AS(cone.attribute(Trade::MeshAttribute::TextureCoordinates), Containers::arrayView({ {0.0f, 0.0f}, /* 0 */ {0.333333f, 0.0f}, /* 1 */ {0.666667f, 0.0f}, /* 2 */ @@ -202,18 +210,22 @@ void ConeTest::solidWithTextureCoords() { }), TestSuite::Compare::Container); /* Each ring has an extra vertex for texture coords */ - CORRADE_COMPARE_AS(cone.indices(), (std::vector{ + CORRADE_COMPARE_AS(cone.indices(), Containers::arrayView({ 0, 1, 5, 0, 5, 4, 1, 2, 6, 1, 6, 5, 2, 3, 7, 2, 7, 6, 4, 5, 9, 4, 9, 8, 5, 6, 10, 5, 10, 9, 6, 7, 11, 6, 11, 10 }), TestSuite::Compare::Container); } void ConeTest::solidWithTextureCoordsAndCaps() { - Trade::MeshData3D cone = coneSolid(2, 3, 1.0f, ConeFlag::GenerateTextureCoords|ConeFlag::CapEnd); + Trade::MeshData cone = coneSolid(2, 3, 1.0f, ConeFlag::GenerateTextureCoords|ConeFlag::CapEnd); + + CORRADE_COMPARE(cone.primitive(), MeshPrimitive::Triangles); + CORRADE_VERIFY(cone.isIndexed()); + CORRADE_COMPARE(cone.attributeCount(), 3); /* Bottom ring duplicated because it has different normals, first vertex of each ring duplicated because it has different texture coordinates */ - CORRADE_COMPARE_AS(cone.positions(0), (std::vector{ + CORRADE_COMPARE_AS(cone.attribute(Trade::MeshAttribute::Position), Containers::arrayView({ {0.0f, -1.0f, 0.0f}, /* 0 */ {0.0f, -1.0f, 1.0f}, /* 1 */ @@ -237,7 +249,7 @@ void ConeTest::solidWithTextureCoordsAndCaps() { {0.0f, 1.0f, 0.0f} /* 16 */ }), TestSuite::Compare::Container); - CORRADE_COMPARE_AS(cone.normals(0), (std::vector{ + CORRADE_COMPARE_AS(cone.attribute(Trade::MeshAttribute::Normal), Containers::arrayView({ {0.0f, -1.0f, 0.0f}, /* 0 */ {0.0f, -1.0f, 0.0f}, /* 1 */ @@ -261,7 +273,7 @@ void ConeTest::solidWithTextureCoordsAndCaps() { {0.0f, 0.447214f, 0.894427f} /* 16 */ }), TestSuite::Compare::Container); - CORRADE_COMPARE_AS(cone.textureCoords2D(0), (std::vector{ + CORRADE_COMPARE_AS(cone.attribute(Trade::MeshAttribute::TextureCoordinates), Containers::arrayView({ {0.5f, 0.0f}, /* 0 */ {0.0f, 0.333333f}, /* 1 */ @@ -287,7 +299,7 @@ void ConeTest::solidWithTextureCoordsAndCaps() { /* Faces of the caps and sides do not share any vertices due to different normals, each ring has an extra vertex for texture coords */ - CORRADE_COMPARE_AS(cone.indices(), (std::vector{ + CORRADE_COMPARE_AS(cone.indices(), Containers::arrayView({ 0, 2, 1, 0, 3, 2, 0, 4, 3, 5, 6, 10, 5, 10, 9, 6, 7, 11, 6, 11, 10, 7, 8, 12, 7, 12, 11, 9, 10, 14, 9, 14, 13, 10, 11, 15, 10, 15, 14, 11, 12, 16, 11, 16, 15 @@ -295,9 +307,13 @@ void ConeTest::solidWithTextureCoordsAndCaps() { } void ConeTest::wireframe() { - Trade::MeshData3D cone = coneWireframe(8, 1.5f); + Trade::MeshData cone = coneWireframe(8, 1.5f); - CORRADE_COMPARE_AS(cone.positions(0), (std::vector{ + CORRADE_COMPARE(cone.primitive(), MeshPrimitive::Lines); + CORRADE_VERIFY(cone.isIndexed()); + CORRADE_COMPARE(cone.attributeCount(), 1); + + CORRADE_COMPARE_AS(cone.attribute(Trade::MeshAttribute::Position), Containers::arrayView({ {0.0f, -1.5f, 1.0f}, /* 0 */ {1.0f, -1.5f, 0.0f}, /* 1 */ {0.0f, -1.5f, -1.0f}, /* 2 */ @@ -310,10 +326,7 @@ void ConeTest::wireframe() { {0.0f, 1.5f, 0.0f} /* 8 */ }), TestSuite::Compare::Container); - CORRADE_VERIFY(!cone.hasNormals()); - CORRADE_VERIFY(!cone.hasTextureCoords2D()); - - CORRADE_COMPARE_AS(cone.indices(), (std::vector{ + CORRADE_COMPARE_AS(cone.indices(), Containers::arrayView({ 0, 4, 1, 5, 2, 6, 3, 7, 4, 1, 5, 2, 6, 3, 7, 0, diff --git a/src/Magnum/Primitives/Test/CrosshairTest.cpp b/src/Magnum/Primitives/Test/CrosshairTest.cpp index 8b2474c5a..fe4ee73cc 100644 --- a/src/Magnum/Primitives/Test/CrosshairTest.cpp +++ b/src/Magnum/Primitives/Test/CrosshairTest.cpp @@ -28,8 +28,7 @@ #include "Magnum/Mesh.h" #include "Magnum/Math/Vector3.h" #include "Magnum/Primitives/Crosshair.h" -#include "Magnum/Trade/MeshData2D.h" -#include "Magnum/Trade/MeshData3D.h" +#include "Magnum/Trade/MeshData.h" namespace Magnum { namespace Primitives { namespace Test { namespace { @@ -46,19 +45,25 @@ CrosshairTest::CrosshairTest() { } void CrosshairTest::twoDimensions() { - Trade::MeshData2D crosshair = Primitives::crosshair2D(); + Trade::MeshData crosshair = Primitives::crosshair2D(); - CORRADE_VERIFY(!crosshair.isIndexed()); CORRADE_COMPARE(crosshair.primitive(), MeshPrimitive::Lines); - CORRADE_COMPARE(crosshair.positions(0).size(), 4); + CORRADE_VERIFY(!crosshair.isIndexed()); + CORRADE_COMPARE(crosshair.vertexCount(), 4); + CORRADE_COMPARE(crosshair.attributeCount(), 1); + CORRADE_COMPARE(crosshair.attribute(Trade::MeshAttribute::Position)[3], + (Vector2{0.0f, 1.0f})); } void CrosshairTest::threeDimensions() { - Trade::MeshData3D crosshair = Primitives::crosshair3D(); + Trade::MeshData crosshair = Primitives::crosshair3D(); - CORRADE_VERIFY(!crosshair.isIndexed()); CORRADE_COMPARE(crosshair.primitive(), MeshPrimitive::Lines); - CORRADE_COMPARE(crosshair.positions(0).size(), 6); + CORRADE_VERIFY(!crosshair.isIndexed()); + CORRADE_COMPARE(crosshair.vertexCount(), 6); + CORRADE_COMPARE(crosshair.attributeCount(), 1); + CORRADE_COMPARE(crosshair.attribute(Trade::MeshAttribute::Position)[4], + (Vector3{ 0.0f, 0.0f, -1.0f})); } }}}} diff --git a/src/Magnum/Primitives/Test/CubeTest.cpp b/src/Magnum/Primitives/Test/CubeTest.cpp index 5e4398ea5..3c0c1ad14 100644 --- a/src/Magnum/Primitives/Test/CubeTest.cpp +++ b/src/Magnum/Primitives/Test/CubeTest.cpp @@ -28,7 +28,7 @@ #include "Magnum/Mesh.h" #include "Magnum/Math/Vector3.h" #include "Magnum/Primitives/Cube.h" -#include "Magnum/Trade/MeshData3D.h" +#include "Magnum/Trade/MeshData.h" namespace Magnum { namespace Primitives { namespace Test { namespace { @@ -47,29 +47,42 @@ CubeTest::CubeTest() { } void CubeTest::solid() { - Trade::MeshData3D cube = Primitives::cubeSolid(); + Trade::MeshData cube = Primitives::cubeSolid(); CORRADE_COMPARE(cube.primitive(), MeshPrimitive::Triangles); - CORRADE_COMPARE(cube.indices().size(), 36); - CORRADE_COMPARE(cube.positions(0).size(), 24); - CORRADE_COMPARE(cube.normals(0).size(), 24); + CORRADE_VERIFY(cube.isIndexed()); + CORRADE_COMPARE(cube.indexCount(), 36); + CORRADE_COMPARE(cube.vertexCount(), 24); + CORRADE_COMPARE(cube.attributeCount(), 2); + CORRADE_COMPARE(cube.indices()[17], 11); + CORRADE_COMPARE(cube.attribute(Trade::MeshAttribute::Position)[4], + (Vector3{1.0f, -1.0f, 1.0f})); + CORRADE_COMPARE(cube.attribute(Trade::MeshAttribute::Normal)[6], + (Vector3{1.0f, 0.0f, 0.0f})); } void CubeTest::solidStrip() { - Trade::MeshData3D cube = Primitives::cubeSolidStrip(); + Trade::MeshData cube = Primitives::cubeSolidStrip(); - CORRADE_VERIFY(!cube.isIndexed()); CORRADE_COMPARE(cube.primitive(), MeshPrimitive::TriangleStrip); - CORRADE_COMPARE(cube.positions(0).size(), 14); - CORRADE_COMPARE(cube.normalArrayCount(), 0); + CORRADE_VERIFY(!cube.isIndexed()); + CORRADE_COMPARE(cube.vertexCount(), 14); + CORRADE_COMPARE(cube.attributeCount(), 1); + CORRADE_COMPARE(cube.attribute(Trade::MeshAttribute::Position)[4], + (Vector3{-1.0f, -1.0f, -1.0f})); } void CubeTest::wireframe() { - Trade::MeshData3D cube = Primitives::cubeWireframe(); + Trade::MeshData cube = Primitives::cubeWireframe(); CORRADE_COMPARE(cube.primitive(), MeshPrimitive::Lines); - CORRADE_COMPARE(cube.indices().size(), 24); - CORRADE_COMPARE(cube.positions(0).size(), 8); + CORRADE_VERIFY(cube.isIndexed()); + CORRADE_COMPARE(cube.indexCount(), 24); + CORRADE_COMPARE(cube.vertexCount(), 8); + CORRADE_COMPARE(cube.attributeCount(), 1); + CORRADE_COMPARE(cube.indices()[5], 3); + CORRADE_COMPARE(cube.attribute(Trade::MeshAttribute::Position)[5], + (Vector3{1.0f, -1.0f, -1.0f})); } }}}} diff --git a/src/Magnum/Primitives/Test/CylinderTest.cpp b/src/Magnum/Primitives/Test/CylinderTest.cpp index 93392a2ea..f1a10e7fe 100644 --- a/src/Magnum/Primitives/Test/CylinderTest.cpp +++ b/src/Magnum/Primitives/Test/CylinderTest.cpp @@ -28,7 +28,7 @@ #include "Magnum/Math/Vector3.h" #include "Magnum/Primitives/Cylinder.h" -#include "Magnum/Trade/MeshData3D.h" +#include "Magnum/Trade/MeshData.h" namespace Magnum { namespace Primitives { namespace Test { namespace { @@ -51,9 +51,13 @@ CylinderTest::CylinderTest() { } void CylinderTest::solidWithoutAnything() { - Trade::MeshData3D cylinder = cylinderSolid(2, 3, 1.5f); + Trade::MeshData cylinder = cylinderSolid(2, 3, 1.5f); - CORRADE_COMPARE_AS(cylinder.positions(0), (std::vector{ + CORRADE_COMPARE(cylinder.primitive(), MeshPrimitive::Triangles); + CORRADE_VERIFY(cylinder.isIndexed()); + CORRADE_COMPARE(cylinder.attributeCount(), 2); + + CORRADE_COMPARE_AS(cylinder.attribute(Trade::MeshAttribute::Position), Containers::arrayView({ {0.0f, -1.5f, 1.0f}, /* 0 */ {0.866025f, -1.5f, -0.5f}, /* 1 */ {-0.866025f, -1.5f, -0.5f}, /* 2 */ @@ -67,7 +71,7 @@ void CylinderTest::solidWithoutAnything() { {-0.866025f, 1.5f, -0.5f} /* 8 */ }), TestSuite::Compare::Container); - CORRADE_COMPARE_AS(cylinder.normals(0), (std::vector{ + CORRADE_COMPARE_AS(cylinder.attribute(Trade::MeshAttribute::Normal), Containers::arrayView({ {0.0f, 0.0f, 1.0f}, /* 0 */ {0.866025f, 0.0f, -0.5f}, /* 1 */ {-0.866025f, 0.0f, -0.5f}, /* 2 */ @@ -81,20 +85,22 @@ void CylinderTest::solidWithoutAnything() { {-0.866025f, 0.0f, -0.5f} /* 8 */ }), TestSuite::Compare::Container); - CORRADE_VERIFY(!cylinder.hasTextureCoords2D()); - - CORRADE_COMPARE_AS(cylinder.indices(), (std::vector{ + CORRADE_COMPARE_AS(cylinder.indices(), Containers::arrayView({ 0, 1, 4, 0, 4, 3, 1, 2, 5, 1, 5, 4, 2, 0, 3, 2, 3, 5, 3, 4, 7, 3, 7, 6, 4, 5, 8, 4, 8, 7, 5, 3, 6, 5, 6, 8 }), TestSuite::Compare::Container); } void CylinderTest::solidWithCaps() { - Trade::MeshData3D cylinder = cylinderSolid(2, 3, 1.5f, CylinderFlag::CapEnds); + Trade::MeshData cylinder = cylinderSolid(2, 3, 1.5f, CylinderFlag::CapEnds); + + CORRADE_COMPARE(cylinder.primitive(), MeshPrimitive::Triangles); + CORRADE_VERIFY(cylinder.isIndexed()); + CORRADE_COMPARE(cylinder.attributeCount(), 2); /* Bottom ring duplicated because it has different normals, first vertex of each ring duplicated because it has different texture coordinates */ - CORRADE_COMPARE_AS(cylinder.positions(0), (std::vector{ + CORRADE_COMPARE_AS(cylinder.attribute(Trade::MeshAttribute::Position), Containers::arrayView({ {0.0f, -1.5f, 0.0f}, /* 0 */ {0.0f, -1.5f, 1.0f}, /* 1 */ @@ -120,7 +126,7 @@ void CylinderTest::solidWithCaps() { {0.0f, 1.5f, 0.0f} /* 16 */ }), TestSuite::Compare::Container); - CORRADE_COMPARE_AS(cylinder.normals(0), (std::vector{ + CORRADE_COMPARE_AS(cylinder.attribute(Trade::MeshAttribute::Normal), Containers::arrayView({ {0.0f, -1.0f, 0.0f}, /* 0 */ {0.0f, -1.0f, 0.0f}, /* 1 */ @@ -146,11 +152,9 @@ void CylinderTest::solidWithCaps() { {0.0f, 1.0f, 0.0f}, /* 16 */ }), TestSuite::Compare::Container); - CORRADE_VERIFY(!cylinder.hasTextureCoords2D()); - /* Faces of the caps and sides do not share any vertices due to different normals */ - CORRADE_COMPARE_AS(cylinder.indices(), (std::vector{ + CORRADE_COMPARE_AS(cylinder.indices(), Containers::arrayView({ 0, 2, 1, 0, 3, 2, 0, 1, 3, 4, 5, 8, 4, 8, 7, 5, 6, 9, 5, 9, 8, 6, 4, 7, 6, 7, 9, 7, 8, 11, 7, 11, 10, 8, 9, 12, 8, 12, 11, 9, 7, 10, 9, 10, 12, @@ -159,11 +163,15 @@ void CylinderTest::solidWithCaps() { } void CylinderTest::solidWithTextureCoords() { - Trade::MeshData3D cylinder = cylinderSolid(2, 3, 1.5f, CylinderFlag::GenerateTextureCoords); + Trade::MeshData cylinder = cylinderSolid(2, 3, 1.5f, CylinderFlag::GenerateTextureCoords); + + CORRADE_COMPARE(cylinder.primitive(), MeshPrimitive::Triangles); + CORRADE_VERIFY(cylinder.isIndexed()); + CORRADE_COMPARE(cylinder.attributeCount(), 3); /* First vertex of each ring duplicated because it has different texture coordinates */ - CORRADE_COMPARE_AS(cylinder.positions(0), (std::vector{ + CORRADE_COMPARE_AS(cylinder.attribute(Trade::MeshAttribute::Position), Containers::arrayView({ {0.0f, -1.5f, 1.0f}, /* 0 */ {0.866025f, -1.5f, -0.5f}, /* 1 */ {-0.866025f, -1.5f, -0.5f}, /* 2 */ @@ -180,7 +188,7 @@ void CylinderTest::solidWithTextureCoords() { {0.0f, 1.5f, 1.0f}, /* 11 */ }), TestSuite::Compare::Container); - CORRADE_COMPARE_AS(cylinder.normals(0), (std::vector{ + CORRADE_COMPARE_AS(cylinder.attribute(Trade::MeshAttribute::Normal), Containers::arrayView({ {0.0f, 0.0f, 1.0f}, /* 0 */ {0.866025f, 0.0f, -0.5f}, /* 1 */ {-0.866025f, 0.0f, -0.5f}, /* 2 */ @@ -197,7 +205,7 @@ void CylinderTest::solidWithTextureCoords() { {0.0f, 0.0f, 1.0f}, /* 11 */ }), TestSuite::Compare::Container); - CORRADE_COMPARE_AS(cylinder.textureCoords2D(0), (std::vector{ + CORRADE_COMPARE_AS(cylinder.attribute(Trade::MeshAttribute::TextureCoordinates), Containers::arrayView({ {0.0f, 0.0f}, /* 0 */ {0.333333f, 0.0f}, /* 1 */ {0.666667f, 0.0f}, /* 2 */ @@ -215,18 +223,22 @@ void CylinderTest::solidWithTextureCoords() { }), TestSuite::Compare::Container); /* Each ring has an extra vertex for texture coords */ - CORRADE_COMPARE_AS(cylinder.indices(), (std::vector{ + CORRADE_COMPARE_AS(cylinder.indices(), Containers::arrayView({ 0, 1, 5, 0, 5, 4, 1, 2, 6, 1, 6, 5, 2, 3, 7, 2, 7, 6, 4, 5, 9, 4, 9, 8, 5, 6, 10, 5, 10, 9, 6, 7, 11, 6, 11, 10 }), TestSuite::Compare::Container); } void CylinderTest::solidWithTextureCoordsAndCaps() { - Trade::MeshData3D cylinder = cylinderSolid(2, 3, 1.5f, CylinderFlag::GenerateTextureCoords|CylinderFlag::CapEnds); + Trade::MeshData cylinder = cylinderSolid(2, 3, 1.5f, CylinderFlag::GenerateTextureCoords|CylinderFlag::CapEnds); + + CORRADE_COMPARE(cylinder.primitive(), MeshPrimitive::Triangles); + CORRADE_VERIFY(cylinder.isIndexed()); + CORRADE_COMPARE(cylinder.attributeCount(), 3); /* Bottom ring duplicated because it has different normals, first vertex of each ring duplicated because it has different texture coordinates */ - CORRADE_COMPARE_AS(cylinder.positions(0), (std::vector{ + CORRADE_COMPARE_AS(cylinder.attribute(Trade::MeshAttribute::Position), Containers::arrayView({ {0.0f, -1.5f, 0.0f}, /* 0 */ {0.0f, -1.5f, 1.0f}, /* 1 */ @@ -257,7 +269,7 @@ void CylinderTest::solidWithTextureCoordsAndCaps() { {0.0f, 1.5f, 0.0f} /* 21 */ }), TestSuite::Compare::Container); - CORRADE_COMPARE_AS(cylinder.normals(0), (std::vector{ + CORRADE_COMPARE_AS(cylinder.attribute(Trade::MeshAttribute::Normal), Containers::arrayView({ {0.0f, -1.0f, 0.0f}, /* 0 */ {0.0f, -1.0f, 0.0f}, /* 1 */ @@ -288,7 +300,7 @@ void CylinderTest::solidWithTextureCoordsAndCaps() { {0.0f, 1.0f, 0.0f}, /* 21 */ }), TestSuite::Compare::Container); - CORRADE_COMPARE_AS(cylinder.textureCoords2D(0), (std::vector{ + CORRADE_COMPARE_AS(cylinder.attribute(Trade::MeshAttribute::TextureCoordinates), Containers::arrayView({ {0.5f, 0.0f}, /* 0 */ {0.0f, 0.2f}, /* 1 */ @@ -321,7 +333,7 @@ void CylinderTest::solidWithTextureCoordsAndCaps() { /* Faces of the caps and sides do not share any vertices due to different normals, each ring has an extra vertex for texture coords */ - CORRADE_COMPARE_AS(cylinder.indices(), (std::vector{ + CORRADE_COMPARE_AS(cylinder.indices(), Containers::arrayView({ 0, 2, 1, 0, 3, 2, 0, 4, 3, 5, 6, 10, 5, 10, 9, 6, 7, 11, 6, 11, 10, 7, 8, 12, 7, 12, 11, 9, 10, 14, 9, 14, 13, 10, 11, 15, 10, 15, 14, 11, 12, 16, 11, 16, 15, @@ -330,9 +342,13 @@ void CylinderTest::solidWithTextureCoordsAndCaps() { } void CylinderTest::wireframe() { - Trade::MeshData3D cylinder = cylinderWireframe(2, 8, 0.5f); + Trade::MeshData cylinder = cylinderWireframe(2, 8, 0.5f); - CORRADE_COMPARE_AS(cylinder.positions(0), (std::vector{ + CORRADE_COMPARE(cylinder.primitive(), MeshPrimitive::Lines); + CORRADE_VERIFY(cylinder.isIndexed()); + CORRADE_COMPARE(cylinder.attributeCount(), 1); + + CORRADE_COMPARE_AS(cylinder.attribute(Trade::MeshAttribute::Position), Containers::arrayView({ {0.0f, -0.5f, 1.0f}, /* 0 */ {1.0f, -0.5f, 0.0f}, /* 1 */ {0.0f, -0.5f, -1.0f}, /* 2 */ @@ -361,10 +377,7 @@ void CylinderTest::wireframe() { {-0.707107f, 0.5f, 0.707107f} /* 23 */ }), TestSuite::Compare::Container); - CORRADE_VERIFY(!cylinder.hasNormals()); - CORRADE_VERIFY(!cylinder.hasTextureCoords2D()); - - CORRADE_COMPARE_AS(cylinder.indices(), (std::vector{ + CORRADE_COMPARE_AS(cylinder.indices(), Containers::arrayView({ 0, 4, 1, 5, 2, 6, 3, 7, 4, 1, 5, 2, 6, 3, 7, 0, diff --git a/src/Magnum/Primitives/Test/GradientTest.cpp b/src/Magnum/Primitives/Test/GradientTest.cpp index bd56babf3..b036859d4 100644 --- a/src/Magnum/Primitives/Test/GradientTest.cpp +++ b/src/Magnum/Primitives/Test/GradientTest.cpp @@ -29,8 +29,7 @@ #include "Magnum/Mesh.h" #include "Magnum/Math/Color.h" #include "Magnum/Primitives/Gradient.h" -#include "Magnum/Trade/MeshData2D.h" -#include "Magnum/Trade/MeshData3D.h" +#include "Magnum/Trade/MeshData.h" #include "Magnum/Primitives/Square.h" #include "Magnum/Primitives/Plane.h" @@ -62,23 +61,30 @@ using namespace Magnum::Math::Literals; void GradientTest::gradient2D() { /* The corners sould have 0.2, 0.4, 0.6, 0.8 blends */ - Trade::MeshData2D gradient = Primitives::gradient2D( + Trade::MeshData gradient = Primitives::gradient2D( {-1.0f, 2.0f}, {0.2f, 0.6f, 1.0f}, {1.0f, -2.0f}, {0.4f, 1.0f, 0.0f}); + CORRADE_COMPARE(gradient.primitive(), MeshPrimitive::TriangleStrip); + CORRADE_VERIFY(!gradient.isIndexed()); + CORRADE_COMPARE(gradient.attributeCount(), 2); + /* Positions should be the same as for a square */ - Trade::MeshData2D square = Primitives::squareSolid(); + Trade::MeshData square = Primitives::squareSolid(); CORRADE_COMPARE(gradient.primitive(), square.primitive()); - CORRADE_COMPARE_AS(gradient.positions(0), square.positions(0), TestSuite::Compare::Container); - CORRADE_COMPARE_AS(gradient.positions(0), (std::vector{ + CORRADE_COMPARE_AS( + gradient.attribute(Trade::MeshAttribute::Position), + square.attribute(Trade::MeshAttribute::Position), + TestSuite::Compare::Container); + + CORRADE_COMPARE_AS(gradient.attribute(Trade::MeshAttribute::Position), Containers::arrayView({ { 1.0f, -1.0f}, /* Bottom right */ { 1.0f, 1.0f}, /* Top right */ {-1.0f, -1.0f}, /* Bottom left */ {-1.0f, 1.0f} /* Top left */ }), TestSuite::Compare::Container); - CORRADE_COMPARE(gradient.colorArrayCount(), 1); - CORRADE_COMPARE_AS(gradient.colors(0), (std::vector{ + CORRADE_COMPARE_AS(gradient.attribute(Trade::MeshAttribute::Color), Containers::arrayView({ {0.36f, 0.92f, 0.2f}, /* 80% */ {0.28f, 0.76f, 0.6f}, /* 40% */ {0.32f, 0.84f, 0.4f}, /* 60% */ @@ -87,10 +93,9 @@ void GradientTest::gradient2D() { } void GradientTest::gradient2DHorizontal() { - Trade::MeshData2D gradient = Primitives::gradient2DHorizontal(0xfabcde_srgbf, 0xdeab09_srgbf); + Trade::MeshData gradient = Primitives::gradient2DHorizontal(0xfabcde_srgbf, 0xdeab09_srgbf); - CORRADE_COMPARE(gradient.colorArrayCount(), 1); - CORRADE_COMPARE_AS(gradient.colors(0), (std::vector{ + CORRADE_COMPARE_AS(gradient.attribute(Trade::MeshAttribute::Color), Containers::arrayView({ 0xdeab09_srgbf, 0xdeab09_srgbf, 0xfabcde_srgbf, @@ -99,10 +104,9 @@ void GradientTest::gradient2DHorizontal() { } void GradientTest::gradient2DVertical() { - Trade::MeshData2D gradient = Primitives::gradient2DVertical(0xfabcde_srgbf, 0xdeab09_srgbf); + Trade::MeshData gradient = Primitives::gradient2DVertical(0xfabcde_srgbf, 0xdeab09_srgbf); - CORRADE_COMPARE(gradient.colorArrayCount(), 1); - CORRADE_COMPARE_AS(gradient.colors(0), (std::vector{ + CORRADE_COMPARE_AS(gradient.attribute(Trade::MeshAttribute::Color), Containers::arrayView({ 0xfabcde_srgbf, 0xdeab09_srgbf, 0xfabcde_srgbf, @@ -112,25 +116,37 @@ void GradientTest::gradient2DVertical() { void GradientTest::gradient3D() { /* The corners sould have 0.2, 0.4, 0.6, 0.8 blends */ - Trade::MeshData3D gradient = Primitives::gradient3D( + Trade::MeshData gradient = Primitives::gradient3D( {-1.0f, 2.0f, -1.5f}, {0.2f, 0.6f, 1.0f}, {1.0f, -2.0f, -1.5f}, {0.4f, 1.0f, 0.0f}); + CORRADE_COMPARE(gradient.primitive(), MeshPrimitive::TriangleStrip); + CORRADE_VERIFY(!gradient.isIndexed()); + CORRADE_COMPARE(gradient.attributeCount(), 3); + /* Positions should be the same as for a plane */ - Trade::MeshData3D plane = Primitives::planeSolid(); + Trade::MeshData plane = Primitives::planeSolid(); CORRADE_COMPARE(gradient.primitive(), plane.primitive()); - CORRADE_COMPARE_AS(gradient.positions(0), plane.positions(0), TestSuite::Compare::Container); - CORRADE_COMPARE_AS(gradient.positions(0), (std::vector{ + CORRADE_COMPARE_AS( + gradient.attribute(Trade::MeshAttribute::Position), + plane.attribute(Trade::MeshAttribute::Position), + TestSuite::Compare::Container); + + CORRADE_COMPARE_AS(gradient.attribute(Trade::MeshAttribute::Position), Containers::arrayView({ { 1.0f, -1.0f, 0.0f}, /* Bottom right */ { 1.0f, 1.0f, 0.0f}, /* Top right */ {-1.0f, -1.0f, 0.0f}, /* Bottom left */ {-1.0f, 1.0f, 0.0f} /* Top left */ }), TestSuite::Compare::Container); - CORRADE_COMPARE(gradient.normalArrayCount(), 1); + CORRADE_COMPARE_AS(gradient.attribute(Trade::MeshAttribute::Normal), Containers::arrayView({ + {0.0f, 0.0f, 1.0f}, + {0.0f, 0.0f, 1.0f}, + {0.0f, 0.0f, 1.0f}, + {0.0f, 0.0f, 1.0f} + }), TestSuite::Compare::Container); - CORRADE_COMPARE(gradient.colorArrayCount(), 1); - CORRADE_COMPARE_AS(gradient.colors(0), (std::vector{ + CORRADE_COMPARE_AS(gradient.attribute(Trade::MeshAttribute::Color), Containers::arrayView({ {0.36f, 0.92f, 0.2f}, /* 80% */ {0.28f, 0.76f, 0.6f}, /* 40% */ {0.32f, 0.84f, 0.4f}, /* 60% */ @@ -139,10 +155,9 @@ void GradientTest::gradient3D() { } void GradientTest::gradient3DHorizontal() { - Trade::MeshData3D gradient = Primitives::gradient3DHorizontal(0xfabcde_srgbf, 0xdeab09_srgbf); + Trade::MeshData gradient = Primitives::gradient3DHorizontal(0xfabcde_srgbf, 0xdeab09_srgbf); - CORRADE_COMPARE(gradient.colorArrayCount(), 1); - CORRADE_COMPARE_AS(gradient.colors(0), (std::vector{ + CORRADE_COMPARE_AS(gradient.attribute(Trade::MeshAttribute::Color), Containers::arrayView({ 0xdeab09_srgbf, 0xdeab09_srgbf, 0xfabcde_srgbf, @@ -151,10 +166,9 @@ void GradientTest::gradient3DHorizontal() { } void GradientTest::gradient3DVertical() { - Trade::MeshData3D gradient = Primitives::gradient3DVertical(0xfabcde_srgbf, 0xdeab09_srgbf); + Trade::MeshData gradient = Primitives::gradient3DVertical(0xfabcde_srgbf, 0xdeab09_srgbf); - CORRADE_COMPARE(gradient.colorArrayCount(), 1); - CORRADE_COMPARE_AS(gradient.colors(0), (std::vector{ + CORRADE_COMPARE_AS(gradient.attribute(Trade::MeshAttribute::Color), Containers::arrayView({ 0xfabcde_srgbf, 0xdeab09_srgbf, 0xfabcde_srgbf, diff --git a/src/Magnum/Primitives/Test/GridTest.cpp b/src/Magnum/Primitives/Test/GridTest.cpp index f5114d8b8..71a4a52d8 100644 --- a/src/Magnum/Primitives/Test/GridTest.cpp +++ b/src/Magnum/Primitives/Test/GridTest.cpp @@ -28,7 +28,7 @@ #include "Magnum/Math/Vector3.h" #include "Magnum/Primitives/Grid.h" -#include "Magnum/Trade/MeshData3D.h" +#include "Magnum/Trade/MeshData.h" namespace Magnum { namespace Primitives { namespace Test { namespace { @@ -47,9 +47,13 @@ GridTest::GridTest() { } void GridTest::solid3DWithoutAnything() { - Trade::MeshData3D grid = grid3DSolid({5, 3}, {}); + Trade::MeshData grid = grid3DSolid({5, 3}, {}); - CORRADE_COMPARE_AS(grid.positions(0), (std::vector{ + CORRADE_COMPARE(grid.primitive(), MeshPrimitive::Triangles); + CORRADE_VERIFY(grid.isIndexed()); + CORRADE_COMPARE(grid.attributeCount(), 1); + + CORRADE_COMPARE_AS(grid.attribute(Trade::MeshAttribute::Position), Containers::arrayView({ {-1.0f, -1.0f, 0.0f}, {-0.666667f, -1.0f, 0.0f}, {-0.333333f, -1.0f, 0.0f}, @@ -91,10 +95,7 @@ void GridTest::solid3DWithoutAnything() { {1.0f, 1.0f, 0.0f} }), TestSuite::Compare::Container); - CORRADE_COMPARE(grid.normalArrayCount(), 0); - CORRADE_COMPARE(grid.textureCoords2DArrayCount(), 0); - - CORRADE_COMPARE_AS(grid.indices(), (std::vector{ + CORRADE_COMPARE_AS(grid.indices(), Containers::arrayView({ 0, 8, 7, 0, 1, 8, 1, 9, 8, 1, 2, 9, 2, 10, 9, 2, 3, 10, @@ -126,9 +127,13 @@ void GridTest::solid3DWithoutAnything() { } void GridTest::solid3DWithNormalsAndTextureCoords() { - Trade::MeshData3D grid = grid3DSolid({5, 3}, GridFlag::GenerateNormals|GridFlag::GenerateTextureCoords); + Trade::MeshData grid = grid3DSolid({5, 3}, GridFlag::GenerateNormals|GridFlag::GenerateTextureCoords); - CORRADE_COMPARE_AS(grid.positions(0), (std::vector{ + CORRADE_COMPARE(grid.primitive(), MeshPrimitive::Triangles); + CORRADE_VERIFY(grid.isIndexed()); + CORRADE_COMPARE(grid.attributeCount(), 3); + + CORRADE_COMPARE_AS(grid.attribute(Trade::MeshAttribute::Position), Containers::arrayView({ {-1.0f, -1.0f, 0.0f}, {-0.666667f, -1.0f, 0.0f}, {-0.333333f, -1.0f, 0.0f}, @@ -170,7 +175,7 @@ void GridTest::solid3DWithNormalsAndTextureCoords() { {1.0f, 1.0f, 0.0f} }), TestSuite::Compare::Container); - CORRADE_COMPARE_AS(grid.normals(0), (std::vector{ + CORRADE_COMPARE_AS(grid.attribute(Trade::MeshAttribute::Normal), Containers::arrayView({ {0.0f, 0.0f, 1.0f}, {0.0f, 0.0f, 1.0f}, {0.0f, 0.0f, 1.0f}, @@ -212,7 +217,7 @@ void GridTest::solid3DWithNormalsAndTextureCoords() { {0.0f, 0.0f, 1.0f}, }), TestSuite::Compare::Container); - CORRADE_COMPARE_AS(grid.textureCoords2D(0), (std::vector{ + CORRADE_COMPARE_AS(grid.attribute(Trade::MeshAttribute::TextureCoordinates), Containers::arrayView({ {0.0f, 0.0f}, {0.166667f, 0.0f}, {0.333333f, 0.0f}, @@ -254,7 +259,7 @@ void GridTest::solid3DWithNormalsAndTextureCoords() { {1.0f, 1.0f} }), TestSuite::Compare::Container); - CORRADE_COMPARE_AS(grid.indices(), (std::vector{ + CORRADE_COMPARE_AS(grid.indices(), Containers::arrayView({ 0, 8, 7, 0, 1, 8, 1, 9, 8, 1, 2, 9, 2, 10, 9, 2, 3, 10, @@ -286,9 +291,13 @@ void GridTest::solid3DWithNormalsAndTextureCoords() { } void GridTest::wireframe3D() { - Trade::MeshData3D grid = grid3DWireframe({5, 3}); + Trade::MeshData grid = grid3DWireframe({5, 3}); + + CORRADE_COMPARE(grid.primitive(), MeshPrimitive::Lines); + CORRADE_VERIFY(grid.isIndexed()); + CORRADE_COMPARE(grid.attributeCount(), 1); - CORRADE_COMPARE_AS(grid.positions(0), (std::vector{ + CORRADE_COMPARE_AS(grid.attribute(Trade::MeshAttribute::Position), Containers::arrayView({ {-1.0f, -1.0f, 0.0f}, {-0.666667f, -1.0f, 0.0f}, {-0.333333f, -1.0f, 0.0f}, @@ -330,7 +339,7 @@ void GridTest::wireframe3D() { {1.0f, 1.0f, 0.0f} }), TestSuite::Compare::Container); - CORRADE_COMPARE_AS(grid.indices(), (std::vector{ + CORRADE_COMPARE_AS(grid.indices(), Containers::arrayView({ 0, 1, 0, 7, 1, 2, 1, 8, 2, 3, 2, 9, diff --git a/src/Magnum/Primitives/Test/IcosphereTest.cpp b/src/Magnum/Primitives/Test/IcosphereTest.cpp index 5f7c3cac5..87f59ca96 100644 --- a/src/Magnum/Primitives/Test/IcosphereTest.cpp +++ b/src/Magnum/Primitives/Test/IcosphereTest.cpp @@ -28,7 +28,7 @@ #include "Magnum/Math/Vector3.h" #include "Magnum/Primitives/Icosphere.h" -#include "Magnum/Trade/MeshData3D.h" +#include "Magnum/Trade/MeshData.h" namespace Magnum { namespace Primitives { namespace Test { namespace { @@ -47,25 +47,30 @@ IcosphereTest::IcosphereTest() { } void IcosphereTest::count0() { - Trade::MeshData3D data = Primitives::icosphereSolid(0); - - CORRADE_COMPARE(data.positionArrayCount(), 1); - CORRADE_COMPARE(data.normalArrayCount(), 1); - - CORRADE_COMPARE(data.indices().size(), 60); - CORRADE_COMPARE(data.positions(0).size(), 12); - CORRADE_COMPARE(data.normals(0).size(), 12); + Trade::MeshData icosphere = Primitives::icosphereSolid(0); + + CORRADE_COMPARE(icosphere.primitive(), MeshPrimitive::Triangles); + CORRADE_VERIFY(icosphere.isIndexed()); + CORRADE_COMPARE(icosphere.indexCount(), 60); + CORRADE_COMPARE(icosphere.vertexCount(), 12); + CORRADE_COMPARE(icosphere.attributeCount(), 2); + CORRADE_COMPARE(icosphere.indices()[18], 9); + CORRADE_COMPARE(icosphere.attribute(Trade::MeshAttribute::Position)[8], + (Vector3{-0.525731f, -0.850651f, 0.0f})); + CORRADE_COMPARE(icosphere.attribute(Trade::MeshAttribute::Normal)[8], + (Vector3{-0.525731f, -0.850651f, 0.0f})); } void IcosphereTest::data1() { /* This also tests the subdivide() and removeDuplicates() mesh tools */ - Trade::MeshData3D data = Primitives::icosphereSolid(1); + Trade::MeshData icosphere = Primitives::icosphereSolid(1); - CORRADE_COMPARE(data.positionArrayCount(), 1); - CORRADE_COMPARE(data.normalArrayCount(), 1); + CORRADE_COMPARE(icosphere.primitive(), MeshPrimitive::Triangles); + CORRADE_VERIFY(icosphere.isIndexed()); + CORRADE_COMPARE(icosphere.attributeCount(), 2); - CORRADE_COMPARE_AS(data.indices(), (std::vector{ + CORRADE_COMPARE_AS(icosphere.indices(), Containers::arrayView({ 12, 13, 14, 15, 16, 12, 17, 18, 19, 17, 20, 21, 22, 23, 24, 22, 25, 26, 27, 28, 29, 27, 30, 31, 32, 33, 34, 32, 35, 36, 37, 38, 39, 37, 40, 41, 13, 28, 25, 14, 24, 39, 19, 26, 31, 18, 40, 23, 16, 34, 29, 15, 38, 35, @@ -80,7 +85,8 @@ void IcosphereTest::data1() { 16, 29, 16, 7, 34, 29, 34, 9, 7, 15, 35, 15, 1, 38, 35, 38, 0, 3, 30, 20, 30, 9, 33, 20, 33, 8, 4, 21, 41, 21, 8, 36, 41, 36, 0}), TestSuite::Compare::Container); - CORRADE_COMPARE_AS(data.positions(0), (std::vector{ + + CORRADE_COMPARE_AS(icosphere.attribute(Trade::MeshAttribute::Position), Containers::arrayView({ {0.0f, -0.525731f, 0.850651f}, {0.850651f, 0.0f, 0.525731f}, {0.850651f, 0.0f, -0.525731f}, @@ -124,19 +130,20 @@ void IcosphereTest::data1() { {-0.5f, 0.309017f, 0.809017f}, {-0.5f, -0.309017f, 0.809017f}}), TestSuite::Compare::Container); - CORRADE_COMPARE_AS(data.normals(0), data.positions(0), + CORRADE_COMPARE_AS( + icosphere.attribute(Trade::MeshAttribute::Position), + icosphere.attribute(Trade::MeshAttribute::Normal), TestSuite::Compare::Container); } void IcosphereTest::count2() { - Trade::MeshData3D data = Primitives::icosphereSolid(2); - - CORRADE_COMPARE(data.positionArrayCount(), 1); - CORRADE_COMPARE(data.normalArrayCount(), 1); + Trade::MeshData icosphere = Primitives::icosphereSolid(2); - CORRADE_COMPARE(data.indices().size(), 960); - CORRADE_COMPARE(data.positions(0).size(), 162); - CORRADE_COMPARE(data.normals(0).size(), 162); + CORRADE_COMPARE(icosphere.primitive(), MeshPrimitive::Triangles); + CORRADE_VERIFY(icosphere.isIndexed()); + CORRADE_COMPARE(icosphere.indexCount(), 960); + CORRADE_COMPARE(icosphere.vertexCount(), 162); + CORRADE_COMPARE(icosphere.attributeCount(), 2); } }}}} diff --git a/src/Magnum/Primitives/Test/LineTest.cpp b/src/Magnum/Primitives/Test/LineTest.cpp index 02c0f7972..d0c80a8a1 100644 --- a/src/Magnum/Primitives/Test/LineTest.cpp +++ b/src/Magnum/Primitives/Test/LineTest.cpp @@ -28,8 +28,7 @@ #include "Magnum/Mesh.h" #include "Magnum/Math/Vector3.h" #include "Magnum/Primitives/Line.h" -#include "Magnum/Trade/MeshData2D.h" -#include "Magnum/Trade/MeshData3D.h" +#include "Magnum/Trade/MeshData.h" namespace Magnum { namespace Primitives { namespace Test { namespace { @@ -46,19 +45,25 @@ LineTest::LineTest() { } void LineTest::twoDimensions() { - Trade::MeshData2D line = Primitives::line2D(); + Trade::MeshData line = Primitives::line2D(); - CORRADE_VERIFY(!line.isIndexed()); CORRADE_COMPARE(line.primitive(), MeshPrimitive::Lines); - CORRADE_COMPARE(line.positions(0).size(), 2); + CORRADE_VERIFY(!line.isIndexed()); + CORRADE_COMPARE(line.vertexCount(), 2); + CORRADE_COMPARE(line.attributeCount(), 1); + CORRADE_COMPARE(line.attribute(Trade::MeshAttribute::Position)[1], + (Vector2{1.0f, 0.0f})); } void LineTest::threeDimensions() { - Trade::MeshData3D line = Primitives::line3D(); + Trade::MeshData line = Primitives::line3D(); - CORRADE_VERIFY(!line.isIndexed()); CORRADE_COMPARE(line.primitive(), MeshPrimitive::Lines); - CORRADE_COMPARE(line.positions(0).size(), 2); + CORRADE_VERIFY(!line.isIndexed()); + CORRADE_COMPARE(line.vertexCount(), 2); + CORRADE_COMPARE(line.attributeCount(), 1); + CORRADE_COMPARE(line.attribute(Trade::MeshAttribute::Position)[1], + (Vector3{1.0f, 0.0f, 0.0f})); } }}}} diff --git a/src/Magnum/Primitives/Test/PlaneTest.cpp b/src/Magnum/Primitives/Test/PlaneTest.cpp index 14ce8ba94..614b8f4a3 100644 --- a/src/Magnum/Primitives/Test/PlaneTest.cpp +++ b/src/Magnum/Primitives/Test/PlaneTest.cpp @@ -28,7 +28,7 @@ #include "Magnum/Mesh.h" #include "Magnum/Math/Vector3.h" #include "Magnum/Primitives/Plane.h" -#include "Magnum/Trade/MeshData3D.h" +#include "Magnum/Trade/MeshData.h" namespace Magnum { namespace Primitives { namespace Test { namespace { @@ -47,32 +47,42 @@ PlaneTest::PlaneTest() { } void PlaneTest::solid() { - Trade::MeshData3D plane = Primitives::planeSolid(); + Trade::MeshData plane = Primitives::planeSolid(); - CORRADE_VERIFY(!plane.isIndexed()); CORRADE_COMPARE(plane.primitive(), MeshPrimitive::TriangleStrip); - CORRADE_COMPARE(plane.positions(0).size(), 4); - CORRADE_COMPARE(plane.normals(0).size(), 4); - CORRADE_COMPARE(plane.textureCoords2DArrayCount(), 0); + CORRADE_VERIFY(!plane.isIndexed()); + CORRADE_COMPARE(plane.vertexCount(), 4); + CORRADE_COMPARE(plane.attributeCount(), 2); + CORRADE_COMPARE(plane.attribute(Trade::MeshAttribute::Position)[3], + (Vector3{-1.0f, 1.0f, 0.0f})); + CORRADE_COMPARE(plane.attribute(Trade::MeshAttribute::Normal)[2], + (Vector3{0.0f, 0.0f, 1.0f})); } void PlaneTest::solidTextured() { - Trade::MeshData3D plane = Primitives::planeSolid(Primitives::PlaneTextureCoords::Generate); + Trade::MeshData plane = Primitives::planeSolid(Primitives::PlaneTextureCoords::Generate); - CORRADE_VERIFY(!plane.isIndexed()); CORRADE_COMPARE(plane.primitive(), MeshPrimitive::TriangleStrip); - CORRADE_COMPARE(plane.positions(0).size(), 4); - CORRADE_COMPARE(plane.normals(0).size(), 4); - CORRADE_COMPARE(plane.textureCoords2DArrayCount(), 1); - CORRADE_COMPARE(plane.textureCoords2D(0).size(), 4); + CORRADE_VERIFY(!plane.isIndexed()); + CORRADE_COMPARE(plane.vertexCount(), 4); + CORRADE_COMPARE(plane.attributeCount(), 3); + CORRADE_COMPARE(plane.attribute(Trade::MeshAttribute::Position)[3], + (Vector3{-1.0f, 1.0f, 0.0f})); + CORRADE_COMPARE(plane.attribute(Trade::MeshAttribute::Normal)[2], + (Vector3{0.0f, 0.0f, 1.0f})); + CORRADE_COMPARE(plane.attribute(Trade::MeshAttribute::TextureCoordinates)[1], + (Vector2{1.0f, 1.0f})); } void PlaneTest::wireframe() { - Trade::MeshData3D plane = Primitives::planeWireframe(); + Trade::MeshData plane = Primitives::planeWireframe(); - CORRADE_VERIFY(!plane.isIndexed()); CORRADE_COMPARE(plane.primitive(), MeshPrimitive::LineLoop); - CORRADE_COMPARE(plane.positions(0).size(), 4); + CORRADE_VERIFY(!plane.isIndexed()); + CORRADE_COMPARE(plane.vertexCount(), 4); + CORRADE_COMPARE(plane.attributeCount(), 1); + CORRADE_COMPARE(plane.attribute(Trade::MeshAttribute::Position)[3], + (Vector3{-1.0f, 1.0f, 0.0f})); } }}}} diff --git a/src/Magnum/Primitives/Test/SquareTest.cpp b/src/Magnum/Primitives/Test/SquareTest.cpp index d4abf8bfc..f06966f5a 100644 --- a/src/Magnum/Primitives/Test/SquareTest.cpp +++ b/src/Magnum/Primitives/Test/SquareTest.cpp @@ -28,7 +28,7 @@ #include "Magnum/Mesh.h" #include "Magnum/Math/Vector2.h" #include "Magnum/Primitives/Square.h" -#include "Magnum/Trade/MeshData2D.h" +#include "Magnum/Trade/MeshData.h" namespace Magnum { namespace Primitives { namespace Test { namespace { @@ -47,30 +47,38 @@ SquareTest::SquareTest() { } void SquareTest::solid() { - Trade::MeshData2D square = Primitives::squareSolid(); + Trade::MeshData square = Primitives::squareSolid(); - CORRADE_VERIFY(!square.isIndexed()); CORRADE_COMPARE(square.primitive(), MeshPrimitive::TriangleStrip); - CORRADE_COMPARE(square.positions(0).size(), 4); - CORRADE_COMPARE(square.textureCoords2DArrayCount(), 0); + CORRADE_VERIFY(!square.isIndexed()); + CORRADE_COMPARE(square.vertexCount(), 4); + CORRADE_COMPARE(square.attributeCount(), 1); + CORRADE_COMPARE(square.attribute(Trade::MeshAttribute::Position)[3], + (Vector2{-1.0f, 1.0f})); } void SquareTest::solidTextured() { - Trade::MeshData2D square = Primitives::squareSolid(Primitives::SquareTextureCoords::Generate); + Trade::MeshData square = Primitives::squareSolid(Primitives::SquareTextureCoords::Generate); - CORRADE_VERIFY(!square.isIndexed()); CORRADE_COMPARE(square.primitive(), MeshPrimitive::TriangleStrip); - CORRADE_COMPARE(square.positions(0).size(), 4); - CORRADE_COMPARE(square.textureCoords2DArrayCount(), 1); - CORRADE_COMPARE(square.textureCoords2D(0).size(), 4); + CORRADE_VERIFY(!square.isIndexed()); + CORRADE_COMPARE(square.vertexCount(), 4); + CORRADE_COMPARE(square.attributeCount(), 2); + CORRADE_COMPARE(square.attribute(Trade::MeshAttribute::Position)[3], + (Vector2{-1.0f, 1.0f})); + CORRADE_COMPARE(square.attribute(Trade::MeshAttribute::TextureCoordinates)[1], + (Vector2{1.0f, 1.0f})); } void SquareTest::wireframe() { - Trade::MeshData2D square = Primitives::squareWireframe(); + Trade::MeshData square = Primitives::squareWireframe(); - CORRADE_VERIFY(!square.isIndexed()); CORRADE_COMPARE(square.primitive(), MeshPrimitive::LineLoop); - CORRADE_COMPARE(square.positions(0).size(), 4); + CORRADE_VERIFY(!square.isIndexed()); + CORRADE_COMPARE(square.vertexCount(), 4); + CORRADE_COMPARE(square.attributeCount(), 1); + CORRADE_COMPARE(square.attribute(Trade::MeshAttribute::Position)[3], + (Vector2{-1.0f, 1.0f})); } }}}} diff --git a/src/Magnum/Primitives/Test/UVSphereTest.cpp b/src/Magnum/Primitives/Test/UVSphereTest.cpp index 98efb97b0..33d9ebe3a 100644 --- a/src/Magnum/Primitives/Test/UVSphereTest.cpp +++ b/src/Magnum/Primitives/Test/UVSphereTest.cpp @@ -28,7 +28,7 @@ #include "Magnum/Math/Vector3.h" #include "Magnum/Primitives/UVSphere.h" -#include "Magnum/Trade/MeshData3D.h" +#include "Magnum/Trade/MeshData.h" namespace Magnum { namespace Primitives { namespace Test { namespace { @@ -47,9 +47,13 @@ UVSphereTest::UVSphereTest() { } void UVSphereTest::solidWithoutTextureCoords() { - Trade::MeshData3D sphere = uvSphereSolid(3, 3); + Trade::MeshData sphere = uvSphereSolid(3, 3); - CORRADE_COMPARE_AS(sphere.positions(0), (std::vector{ + CORRADE_COMPARE(sphere.primitive(), MeshPrimitive::Triangles); + CORRADE_VERIFY(sphere.isIndexed()); + CORRADE_COMPARE(sphere.attributeCount(), 2); + + CORRADE_COMPARE_AS(sphere.attribute(Trade::MeshAttribute::Position), Containers::arrayView({ {0.0f, -1.0f, 0.0f}, {0.0f, -0.5f, 0.866025f}, @@ -63,7 +67,7 @@ void UVSphereTest::solidWithoutTextureCoords() { {0.0f, 1.0f, 0.0f} }), TestSuite::Compare::Container); - CORRADE_COMPARE_AS(sphere.normals(0), (std::vector{ + CORRADE_COMPARE_AS(sphere.attribute(Trade::MeshAttribute::Normal), Containers::arrayView({ {0.0f, -1.0f, 0.0f}, {0.0f, -0.5f, 0.866025f}, @@ -77,7 +81,7 @@ void UVSphereTest::solidWithoutTextureCoords() { {0.0f, 1.0f, 0.0f} }), TestSuite::Compare::Container); - CORRADE_COMPARE_AS(sphere.indices(), (std::vector{ + CORRADE_COMPARE_AS(sphere.indices(), Containers::arrayView({ 0, 2, 1, 0, 3, 2, 0, 1, 3, 1, 2, 5, 1, 5, 4, 2, 3, 6, 2, 6, 5, 3, 1, 4, 3, 4, 6, 4, 5, 7, 5, 6, 7, 6, 4, 7 @@ -85,9 +89,13 @@ void UVSphereTest::solidWithoutTextureCoords() { } void UVSphereTest::solidWithTextureCoords() { - Trade::MeshData3D sphere = uvSphereSolid(3, 3, UVSphereTextureCoords::Generate); + Trade::MeshData sphere = uvSphereSolid(3, 3, UVSphereTextureCoords::Generate); + + CORRADE_COMPARE(sphere.primitive(), MeshPrimitive::Triangles); + CORRADE_VERIFY(sphere.isIndexed()); + CORRADE_COMPARE(sphere.attributeCount(), 3); - CORRADE_COMPARE_AS(sphere.positions(0), (std::vector{ + CORRADE_COMPARE_AS(sphere.attribute(Trade::MeshAttribute::Position), Containers::arrayView({ {0.0f, -1.0f, 0.0f}, {0.0f, -0.5f, 0.866025f}, @@ -103,7 +111,7 @@ void UVSphereTest::solidWithTextureCoords() { {0.0f, 1.0f, 0.0f} }), TestSuite::Compare::Container); - CORRADE_COMPARE_AS(sphere.textureCoords2D(0), (std::vector{ + CORRADE_COMPARE_AS(sphere.attribute(Trade::MeshAttribute::TextureCoordinates), Containers::arrayView({ {0.5f, 0.0f}, {0.0f, 0.333333f}, @@ -119,7 +127,7 @@ void UVSphereTest::solidWithTextureCoords() { {0.5f, 1.0f} }), TestSuite::Compare::Container); - CORRADE_COMPARE_AS(sphere.indices(), (std::vector{ + CORRADE_COMPARE_AS(sphere.indices(), Containers::arrayView({ 0, 2, 1, 0, 3, 2, 0, 4, 3, 1, 2, 6, 1, 6, 5, 2, 3, 7, 2, 7, 6, 3, 4, 8, 3, 8, 7, 5, 6, 9, 6, 7, 9, 7, 8, 9 @@ -127,9 +135,13 @@ void UVSphereTest::solidWithTextureCoords() { } void UVSphereTest::wireframe() { - Trade::MeshData3D sphere = uvSphereWireframe(6, 8); + Trade::MeshData sphere = uvSphereWireframe(6, 8); - CORRADE_COMPARE_AS(sphere.positions(0), (std::vector{ + CORRADE_COMPARE(sphere.primitive(), MeshPrimitive::Lines); + CORRADE_VERIFY(sphere.isIndexed()); + CORRADE_COMPARE(sphere.attributeCount(), 1); + + CORRADE_COMPARE_AS(sphere.attribute(Trade::MeshAttribute::Position), Containers::arrayView({ {0.0f, -1.0f, 0.0f}, {0.0f, -0.866025f, 0.5f}, @@ -167,9 +179,7 @@ void UVSphereTest::wireframe() { {0.0f, 1.0f, 0.0f} }), TestSuite::Compare::Container); - CORRADE_COMPARE(sphere.normalArrayCount(), 0); - - CORRADE_COMPARE_AS(sphere.indices(), (std::vector{ + CORRADE_COMPARE_AS(sphere.indices(), Containers::arrayView({ 0, 1, 0, 2, 0, 3, 0, 4, 1, 5, 2, 6, 3, 7, 4, 8,