From f782caaf523a971c96deabafc53d73b994f4dce5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Thu, 23 Jan 2020 17:10:36 +0100 Subject: [PATCH] ObjImporter: port the test away from MeshData3D. --- .../ObjImporter/Test/ObjImporterTest.cpp | 508 ++++++++++-------- 1 file changed, 281 insertions(+), 227 deletions(-) diff --git a/src/MagnumPlugins/ObjImporter/Test/ObjImporterTest.cpp b/src/MagnumPlugins/ObjImporter/Test/ObjImporterTest.cpp index d1d760e0b..c8a02b302 100644 --- a/src/MagnumPlugins/ObjImporter/Test/ObjImporterTest.cpp +++ b/src/MagnumPlugins/ObjImporter/Test/ObjImporterTest.cpp @@ -26,13 +26,14 @@ #include #include #include +#include #include #include #include "Magnum/Mesh.h" #include "Magnum/Math/Vector3.h" #include "Magnum/Trade/AbstractImporter.h" -#include "Magnum/Trade/MeshData3D.h" +#include "Magnum/Trade/MeshData.h" #include "configure.h" @@ -154,592 +155,645 @@ ObjImporterTest::ObjImporterTest() { void ObjImporterTest::pointMesh() { Containers::Pointer importer = _manager.instantiate("ObjImporter"); CORRADE_VERIFY(importer->openFile(Utility::Directory::join(OBJIMPORTER_TEST_DIR, "pointMesh.obj"))); - CORRADE_COMPARE(importer->mesh3DCount(), 1); + CORRADE_COMPARE(importer->meshCount(), 1); - const Containers::Optional data = importer->mesh3D(0); + const Containers::Optional data = importer->mesh(0); CORRADE_VERIFY(data); CORRADE_COMPARE(data->primitive(), MeshPrimitive::Points); - CORRADE_COMPARE(data->positionArrayCount(), 1); + CORRADE_COMPARE(data->attributeCount(), 1); /* The points get reordered according to the index buffer. Might not be a problem in general but it is when relying on the order */ - CORRADE_COMPARE(data->positions(0), (std::vector{ - {0.5f, 2.0f, 3.0f}, - {2.0f, 3.0f, 5.0f}, - {0.0f, 1.5f, 1.0f} - })); - CORRADE_COMPARE(data->indices(), (std::vector{ - 0, 1, 2, 0 - })); + CORRADE_COMPARE_AS(data->attribute(MeshAttribute::Position), + Containers::arrayView({ + {0.5f, 2.0f, 3.0f}, + {2.0f, 3.0f, 5.0f}, + {0.0f, 1.5f, 1.0f} + }), TestSuite::Compare::Container); + CORRADE_VERIFY(data->isIndexed()); + CORRADE_COMPARE(data->indexType(), MeshIndexType::UnsignedInt); + CORRADE_COMPARE_AS(data->indices(), + Containers::arrayView({0, 1, 2, 0}), + TestSuite::Compare::Container); } void ObjImporterTest::lineMesh() { Containers::Pointer importer = _manager.instantiate("ObjImporter"); CORRADE_VERIFY(importer->openFile(Utility::Directory::join(OBJIMPORTER_TEST_DIR, "lineMesh.obj"))); - CORRADE_COMPARE(importer->mesh3DCount(), 1); + CORRADE_COMPARE(importer->meshCount(), 1); - const Containers::Optional data = importer->mesh3D(0); + const Containers::Optional data = importer->mesh(0); CORRADE_VERIFY(data); CORRADE_COMPARE(data->primitive(), MeshPrimitive::Lines); - CORRADE_COMPARE(data->positionArrayCount(), 1); - CORRADE_COMPARE(data->positions(0), (std::vector{ - {0.5f, 2.0f, 3.0f}, - {0.0f, 1.5f, 1.0f}, - {2.0f, 3.0f, 5.0f} - })); - CORRADE_COMPARE(data->indices(), (std::vector{ - 0, 1, 1, 2 - })); + CORRADE_COMPARE(data->attributeCount(), 1); + CORRADE_COMPARE_AS(data->attribute(MeshAttribute::Position), + Containers::arrayView({ + {0.5f, 2.0f, 3.0f}, + {0.0f, 1.5f, 1.0f}, + {2.0f, 3.0f, 5.0f} + }), TestSuite::Compare::Container); + CORRADE_VERIFY(data->isIndexed()); + CORRADE_COMPARE(data->indexType(), MeshIndexType::UnsignedInt); + CORRADE_COMPARE_AS(data->indices(), + Containers::arrayView({0, 1, 1, 2}), + TestSuite::Compare::Container); } void ObjImporterTest::triangleMesh() { Containers::Pointer importer = _manager.instantiate("ObjImporter"); CORRADE_VERIFY(importer->openFile(Utility::Directory::join(OBJIMPORTER_TEST_DIR, "triangleMesh.obj"))); - CORRADE_COMPARE(importer->mesh3DCount(), 1); + CORRADE_COMPARE(importer->meshCount(), 1); - const Containers::Optional data = importer->mesh3D(0); + const Containers::Optional data = importer->mesh(0); CORRADE_VERIFY(data); CORRADE_COMPARE(data->primitive(), MeshPrimitive::Triangles); - CORRADE_COMPARE(data->positionArrayCount(), 1); - CORRADE_COMPARE(data->positions(0), (std::vector{ - {0.5f, 2.0f, 3.0f}, - {0.0f, 1.5f, 1.0f}, - {2.0f, 3.0f, 5.0f}, - {2.5f, 0.0f, 1.0f} - })); - CORRADE_COMPARE(data->indices(), (std::vector{ - 0, 1, 2, 3, 1, 0 - })); + CORRADE_COMPARE(data->attributeCount(), 1); + CORRADE_COMPARE_AS(data->attribute(MeshAttribute::Position), + Containers::arrayView({ + {0.5f, 2.0f, 3.0f}, + {0.0f, 1.5f, 1.0f}, + {2.0f, 3.0f, 5.0f}, + {2.5f, 0.0f, 1.0f} + }), TestSuite::Compare::Container); + CORRADE_VERIFY(data->isIndexed()); + CORRADE_COMPARE(data->indexType(), MeshIndexType::UnsignedInt); + CORRADE_COMPARE_AS(data->indices(), + Containers::arrayView({0, 1, 2, 3, 1, 0}), + TestSuite::Compare::Container); } void ObjImporterTest::mixedPrimitives() { Containers::Pointer importer = _manager.instantiate("ObjImporter"); CORRADE_VERIFY(importer->openFile(Utility::Directory::join(OBJIMPORTER_TEST_DIR, "mixedPrimitives.obj"))); - CORRADE_COMPARE(importer->mesh3DCount(), 1); + CORRADE_COMPARE(importer->meshCount(), 1); std::ostringstream out; Error redirectError{&out}; - CORRADE_VERIFY(!importer->mesh3D(0)); + CORRADE_VERIFY(!importer->mesh(0)); CORRADE_COMPARE(out.str(), "Trade::ObjImporter::mesh(): mixed primitive MeshPrimitive::Points and MeshPrimitive::Lines\n"); } void ObjImporterTest::positionsOnly() { Containers::Pointer importer = _manager.instantiate("ObjImporter"); CORRADE_VERIFY(importer->openFile(Utility::Directory::join(OBJIMPORTER_TEST_DIR, "triangleMesh.obj"))); - CORRADE_COMPARE(importer->mesh3DCount(), 1); + CORRADE_COMPARE(importer->meshCount(), 1); - const Containers::Optional data = importer->mesh3D(0); + const Containers::Optional data = importer->mesh(0); CORRADE_VERIFY(data); - CORRADE_COMPARE(data->positionArrayCount(), 1); - CORRADE_VERIFY(!data->hasNormals()); - CORRADE_VERIFY(!data->hasTextureCoords2D()); + CORRADE_COMPARE(data->attributeCount(), 1); + CORRADE_VERIFY(data->hasAttribute(MeshAttribute::Position)); } void ObjImporterTest::textureCoordinates() { Containers::Pointer importer = _manager.instantiate("ObjImporter"); CORRADE_VERIFY(importer->openFile(Utility::Directory::join(OBJIMPORTER_TEST_DIR, "textureCoordinates.obj"))); - CORRADE_COMPARE(importer->mesh3DCount(), 1); + CORRADE_COMPARE(importer->meshCount(), 1); - const Containers::Optional data = importer->mesh3D(0); + const Containers::Optional data = importer->mesh(0); CORRADE_VERIFY(data); CORRADE_COMPARE(data->primitive(), MeshPrimitive::Lines); - CORRADE_COMPARE(data->positionArrayCount(), 1); - CORRADE_VERIFY(!data->hasNormals()); - CORRADE_COMPARE(data->textureCoords2DArrayCount(), 1); - CORRADE_COMPARE(data->positions(0), (std::vector{ - {0.5f, 2.0f, 3.0f}, - {0.0f, 1.5f, 1.0f}, - {0.5f, 2.0f, 3.0f}, - {0.0f, 1.5f, 1.0f} - })); - CORRADE_COMPARE(data->textureCoords2D(0), (std::vector{ - {1.0f, 0.5f}, - {1.0f, 0.5f}, - {0.5f, 1.0f}, - {0.5f, 1.0f} - })); - CORRADE_COMPARE(data->indices(), (std::vector{ - 0, 1, 2, 3, 1, 0 - })); + CORRADE_COMPARE(data->attributeCount(), 2); + CORRADE_COMPARE_AS(data->attribute(MeshAttribute::Position), + Containers::arrayView({ + {0.5f, 2.0f, 3.0f}, + {0.0f, 1.5f, 1.0f}, + {0.5f, 2.0f, 3.0f}, + {0.0f, 1.5f, 1.0f} + }), TestSuite::Compare::Container); + CORRADE_COMPARE_AS(data->attribute(MeshAttribute::TextureCoordinates), + Containers::arrayView({ + {1.0f, 0.5f}, + {1.0f, 0.5f}, + {0.5f, 1.0f}, + {0.5f, 1.0f} + }), TestSuite::Compare::Container); + CORRADE_VERIFY(data->isIndexed()); + CORRADE_COMPARE(data->indexType(), MeshIndexType::UnsignedInt); + CORRADE_COMPARE_AS(data->indices(), + Containers::arrayView({0, 1, 2, 3, 1, 0}), + TestSuite::Compare::Container); } void ObjImporterTest::normals() { Containers::Pointer importer = _manager.instantiate("ObjImporter"); CORRADE_VERIFY(importer->openFile(Utility::Directory::join(OBJIMPORTER_TEST_DIR, "normals.obj"))); - CORRADE_COMPARE(importer->mesh3DCount(), 1); + CORRADE_COMPARE(importer->meshCount(), 1); - const Containers::Optional data = importer->mesh3D(0); + const Containers::Optional data = importer->mesh(0); CORRADE_VERIFY(data); CORRADE_COMPARE(data->primitive(), MeshPrimitive::Lines); - CORRADE_COMPARE(data->positionArrayCount(), 1); - CORRADE_VERIFY(!data->hasTextureCoords2D()); - CORRADE_COMPARE(data->normalArrayCount(), 1); - CORRADE_COMPARE(data->positions(0), (std::vector{ - {0.5f, 2.0f, 3.0f}, - {0.0f, 1.5f, 1.0f}, - {0.5f, 2.0f, 3.0f}, - {0.0f, 1.5f, 1.0f} - })); - CORRADE_COMPARE(data->normals(0), (std::vector{ - {1.0f, 0.5f, 3.5f}, - {1.0f, 0.5f, 3.5f}, - {0.5f, 1.0f, 0.5f}, - {0.5f, 1.0f, 0.5f} - })); - CORRADE_COMPARE(data->indices(), (std::vector{ - 0, 1, 2, 3, 1, 0 - })); + CORRADE_COMPARE(data->attributeCount(), 2); + CORRADE_COMPARE_AS(data->attribute(MeshAttribute::Position), + Containers::arrayView({ + {0.5f, 2.0f, 3.0f}, + {0.0f, 1.5f, 1.0f}, + {0.5f, 2.0f, 3.0f}, + {0.0f, 1.5f, 1.0f} + }), TestSuite::Compare::Container); + CORRADE_COMPARE_AS(data->attribute(MeshAttribute::Normal), + Containers::arrayView({ + {1.0f, 0.5f, 3.5f}, + {1.0f, 0.5f, 3.5f}, + {0.5f, 1.0f, 0.5f}, + {0.5f, 1.0f, 0.5f} + }), TestSuite::Compare::Container); + CORRADE_VERIFY(data->isIndexed()); + CORRADE_COMPARE(data->indexType(), MeshIndexType::UnsignedInt); + CORRADE_COMPARE_AS(data->indices(), + Containers::arrayView({0, 1, 2, 3, 1, 0}), + TestSuite::Compare::Container); } void ObjImporterTest::textureCoordinatesNormals() { Containers::Pointer importer = _manager.instantiate("ObjImporter"); CORRADE_VERIFY(importer->openFile(Utility::Directory::join(OBJIMPORTER_TEST_DIR, "textureCoordinatesNormals.obj"))); - CORRADE_COMPARE(importer->mesh3DCount(), 1); + CORRADE_COMPARE(importer->meshCount(), 1); - const Containers::Optional data = importer->mesh3D(0); + const Containers::Optional data = importer->mesh(0); CORRADE_VERIFY(data); CORRADE_COMPARE(data->primitive(), MeshPrimitive::Lines); - CORRADE_COMPARE(data->positionArrayCount(), 1); - CORRADE_COMPARE(data->textureCoords2DArrayCount(), 1); - CORRADE_COMPARE(data->normalArrayCount(), 1); - CORRADE_COMPARE(data->positions(0), (std::vector{ - {0.5f, 2.0f, 3.0f}, - {0.0f, 1.5f, 1.0f}, - {0.5f, 2.0f, 3.0f}, - {0.0f, 1.5f, 1.0f}, - {0.0f, 1.5f, 1.0f} - })); - CORRADE_COMPARE(data->textureCoords2D(0), (std::vector{ - {1.0f, 0.5f}, - {1.0f, 0.5f}, - {0.5f, 1.0f}, - {0.5f, 1.0f}, - {0.5f, 1.0f} - })); - CORRADE_COMPARE(data->normals(0), (std::vector{ - {1.0f, 0.5f, 3.5f}, - {0.5f, 1.0f, 0.5f}, - {0.5f, 1.0f, 0.5f}, - {1.0f, 0.5f, 3.5f}, - {0.5f, 1.0f, 0.5f} - })); - CORRADE_COMPARE(data->indices(), (std::vector{ - 0, 1, 2, 3, 1, 0, 4, 2 - })); + CORRADE_COMPARE(data->attributeCount(), 3); + CORRADE_COMPARE_AS(data->attribute(MeshAttribute::Position), + Containers::arrayView({ + {0.5f, 2.0f, 3.0f}, + {0.0f, 1.5f, 1.0f}, + {0.5f, 2.0f, 3.0f}, + {0.0f, 1.5f, 1.0f}, + {0.0f, 1.5f, 1.0f} + }), TestSuite::Compare::Container); + CORRADE_COMPARE_AS(data->attribute(MeshAttribute::TextureCoordinates), + Containers::arrayView({ + {1.0f, 0.5f}, + {1.0f, 0.5f}, + {0.5f, 1.0f}, + {0.5f, 1.0f}, + {0.5f, 1.0f} + }), TestSuite::Compare::Container); + CORRADE_COMPARE_AS(data->attribute(MeshAttribute::Normal), + Containers::arrayView({ + {1.0f, 0.5f, 3.5f}, + {0.5f, 1.0f, 0.5f}, + {0.5f, 1.0f, 0.5f}, + {1.0f, 0.5f, 3.5f}, + {0.5f, 1.0f, 0.5f} + }), TestSuite::Compare::Container); + CORRADE_VERIFY(data->isIndexed()); + CORRADE_COMPARE(data->indexType(), MeshIndexType::UnsignedInt); + CORRADE_COMPARE_AS(data->indices(), + Containers::arrayView({0, 1, 2, 3, 1, 0, 4, 2}), + TestSuite::Compare::Container); } void ObjImporterTest::emptyFile() { Containers::Pointer importer = _manager.instantiate("ObjImporter"); CORRADE_VERIFY(importer->openFile(Utility::Directory::join(OBJIMPORTER_TEST_DIR, "emptyFile.obj"))); - CORRADE_COMPARE(importer->mesh3DCount(), 1); + CORRADE_COMPARE(importer->meshCount(), 1); } void ObjImporterTest::unnamedMesh() { Containers::Pointer importer = _manager.instantiate("ObjImporter"); CORRADE_VERIFY(importer->openFile(Utility::Directory::join(OBJIMPORTER_TEST_DIR, "emptyFile.obj"))); - CORRADE_COMPARE(importer->mesh3DCount(), 1); - CORRADE_COMPARE(importer->mesh3DName(0), ""); - CORRADE_COMPARE(importer->mesh3DForName(""), -1); + CORRADE_COMPARE(importer->meshCount(), 1); + CORRADE_COMPARE(importer->meshName(0), ""); + CORRADE_COMPARE(importer->meshForName(""), -1); } void ObjImporterTest::namedMesh() { Containers::Pointer importer = _manager.instantiate("ObjImporter"); CORRADE_VERIFY(importer->openFile(Utility::Directory::join(OBJIMPORTER_TEST_DIR, "namedMesh.obj"))); - CORRADE_COMPARE(importer->mesh3DCount(), 1); - CORRADE_COMPARE(importer->mesh3DName(0), "MyMesh"); - CORRADE_COMPARE(importer->mesh3DForName("MyMesh"), 0); + CORRADE_COMPARE(importer->meshCount(), 1); + CORRADE_COMPARE(importer->meshName(0), "MyMesh"); + CORRADE_COMPARE(importer->meshForName("MyMesh"), 0); } void ObjImporterTest::moreMeshes() { Containers::Pointer importer = _manager.instantiate("ObjImporter"); CORRADE_VERIFY(importer->openFile(Utility::Directory::join(OBJIMPORTER_TEST_DIR, "moreMeshes.obj"))); - CORRADE_COMPARE(importer->mesh3DCount(), 3); + CORRADE_COMPARE(importer->meshCount(), 3); - CORRADE_COMPARE(importer->mesh3DName(0), "PointMesh"); - CORRADE_COMPARE(importer->mesh3DForName("PointMesh"), 0); - const Containers::Optional data = importer->mesh3D(0); + CORRADE_COMPARE(importer->meshName(0), "PointMesh"); + CORRADE_COMPARE(importer->meshForName("PointMesh"), 0); + const Containers::Optional data = importer->mesh(0); CORRADE_VERIFY(data); CORRADE_COMPARE(data->primitive(), MeshPrimitive::Points); - CORRADE_COMPARE(data->positionArrayCount(), 1); - CORRADE_COMPARE(data->positions(0), (std::vector{ - {0.5f, 2.0f, 3.0f}, - {0.0f, 1.5f, 1.0f} - })); - CORRADE_COMPARE(data->indices(), (std::vector{ - 0, 1 - })); - - CORRADE_COMPARE(importer->mesh3DName(1), "LineMesh"); - CORRADE_COMPARE(importer->mesh3DForName("LineMesh"), 1); - const Containers::Optional data1 = importer->mesh3D(1); + CORRADE_COMPARE(data->attributeCount(), 2); + CORRADE_COMPARE_AS(data->attribute(MeshAttribute::Position), + Containers::arrayView({ + {0.5f, 2.0f, 3.0f}, + {0.0f, 1.5f, 1.0f} + }), TestSuite::Compare::Container); + CORRADE_COMPARE_AS(data->attribute(MeshAttribute::Normal), + Containers::arrayView({ + {0.5f, 2.0f, 3.0f}, + {0.0f, 1.5f, 1.0f} + }), TestSuite::Compare::Container); + CORRADE_VERIFY(data->isIndexed()); + CORRADE_COMPARE(data->indexType(), MeshIndexType::UnsignedInt); + CORRADE_COMPARE_AS(data->indices(), + Containers::arrayView({0, 1}), + TestSuite::Compare::Container); + + CORRADE_COMPARE(importer->meshName(1), "LineMesh"); + CORRADE_COMPARE(importer->meshForName("LineMesh"), 1); + const Containers::Optional data1 = importer->mesh(1); CORRADE_VERIFY(data1); CORRADE_COMPARE(data1->primitive(), MeshPrimitive::Lines); - CORRADE_COMPARE(data1->positionArrayCount(), 1); - CORRADE_COMPARE(data1->positions(0), (std::vector{ - {0.5f, 2.0f, 3.0f}, - {0.0f, 1.5f, 1.0f} - })); - CORRADE_COMPARE(data1->indices(), (std::vector{ - 0, 1, 1, 0 - })); - - CORRADE_COMPARE(importer->mesh3DName(2), "TriangleMesh"); - CORRADE_COMPARE(importer->mesh3DForName("TriangleMesh"), 2); - const Containers::Optional data2 = importer->mesh3D(2); + CORRADE_COMPARE(data1->attributeCount(), 2); + CORRADE_COMPARE_AS(data1->attribute(MeshAttribute::Position), + Containers::arrayView({ + {0.5f, 2.0f, 3.0f}, + {0.0f, 1.5f, 1.0f} + }), TestSuite::Compare::Container); + CORRADE_COMPARE_AS(data1->attribute(MeshAttribute::TextureCoordinates), + Containers::arrayView({ + {0.5f, 2.0f}, + {0.0f, 1.5f} + }), TestSuite::Compare::Container); + CORRADE_VERIFY(data1->isIndexed()); + CORRADE_COMPARE(data1->indexType(), MeshIndexType::UnsignedInt); + CORRADE_COMPARE_AS(data1->indices(), + Containers::arrayView({0, 1, 1, 0}), + TestSuite::Compare::Container); + + CORRADE_COMPARE(importer->meshName(2), "TriangleMesh"); + CORRADE_COMPARE(importer->meshForName("TriangleMesh"), 2); + const Containers::Optional data2 = importer->mesh(2); CORRADE_VERIFY(data2); CORRADE_COMPARE(data2->primitive(), MeshPrimitive::Triangles); - CORRADE_COMPARE(data2->positionArrayCount(), 1); - CORRADE_COMPARE(data2->positions(0), (std::vector{ - {0.5f, 2.0f, 3.0f}, - {0.0f, 1.5f, 1.0f}, - {2.0f, 3.0f, 5.5f} - })); - CORRADE_COMPARE(data2->indices(), (std::vector{ - 0, 1, 2, 2, 1, 0 - })); + CORRADE_COMPARE(data2->attributeCount(), 3); + CORRADE_COMPARE_AS(data2->attribute(MeshAttribute::Position), + Containers::arrayView({ + {0.5f, 2.0f, 3.0f}, + {0.0f, 1.5f, 1.0f}, + {2.0f, 3.0f, 5.5f} + }), TestSuite::Compare::Container); + CORRADE_COMPARE_AS(data2->attribute(MeshAttribute::Normal), + Containers::arrayView({ + {0.5f, 2.0f, 3.0f}, + {0.5f, 2.0f, 3.0f}, + {0.5f, 2.0f, 3.0f} + }), TestSuite::Compare::Container); + CORRADE_COMPARE_AS(data2->attribute(MeshAttribute::TextureCoordinates), + Containers::arrayView({ + {0.5f, 2.0f}, + {0.5f, 2.0f}, + {0.5f, 2.0f} + }), TestSuite::Compare::Container); + CORRADE_VERIFY(data2->isIndexed()); + CORRADE_COMPARE(data2->indexType(), MeshIndexType::UnsignedInt); + CORRADE_COMPARE_AS(data2->indices(), + Containers::arrayView({0, 1, 2, 2, 1, 0}), + TestSuite::Compare::Container); } void ObjImporterTest::unnamedFirstMesh() { Containers::Pointer importer = _manager.instantiate("ObjImporter"); CORRADE_VERIFY(importer->openFile(Utility::Directory::join(OBJIMPORTER_TEST_DIR, "unnamedFirstMesh.obj"))); - CORRADE_COMPARE(importer->mesh3DCount(), 2); + CORRADE_COMPARE(importer->meshCount(), 2); - CORRADE_COMPARE(importer->mesh3DName(0), ""); - CORRADE_COMPARE(importer->mesh3DForName(""), -1); + CORRADE_COMPARE(importer->meshName(0), ""); + CORRADE_COMPARE(importer->meshForName(""), -1); - CORRADE_COMPARE(importer->mesh3DName(1), "SecondMesh"); - CORRADE_COMPARE(importer->mesh3DForName("SecondMesh"), 1); + CORRADE_COMPARE(importer->meshName(1), "SecondMesh"); + CORRADE_COMPARE(importer->meshForName("SecondMesh"), 1); } void ObjImporterTest::wrongFloat() { Containers::Pointer importer = _manager.instantiate("ObjImporter"); CORRADE_VERIFY(importer->openFile(Utility::Directory::join(OBJIMPORTER_TEST_DIR, "wrongNumbers.obj"))); - const Int id = importer->mesh3DForName("WrongFloat"); + const Int id = importer->meshForName("WrongFloat"); CORRADE_VERIFY(id > -1); std::ostringstream out; Error redirectError{&out}; - CORRADE_VERIFY(!importer->mesh3D(id)); + CORRADE_VERIFY(!importer->mesh(id)); CORRADE_COMPARE(out.str(), "Trade::ObjImporter::mesh(): error while converting numeric data\n"); } void ObjImporterTest::wrongInteger() { Containers::Pointer importer = _manager.instantiate("ObjImporter"); CORRADE_VERIFY(importer->openFile(Utility::Directory::join(OBJIMPORTER_TEST_DIR, "wrongNumbers.obj"))); - const Int id = importer->mesh3DForName("WrongInteger"); + const Int id = importer->meshForName("WrongInteger"); CORRADE_VERIFY(id > -1); std::ostringstream out; Error redirectError{&out}; - CORRADE_VERIFY(!importer->mesh3D(id)); + CORRADE_VERIFY(!importer->mesh(id)); CORRADE_COMPARE(out.str(), "Trade::ObjImporter::mesh(): error while converting numeric data\n"); } void ObjImporterTest::unmergedIndexOutOfRange() { Containers::Pointer importer = _manager.instantiate("ObjImporter"); CORRADE_VERIFY(importer->openFile(Utility::Directory::join(OBJIMPORTER_TEST_DIR, "wrongNumbers.obj"))); - const Int id = importer->mesh3DForName("PositionIndexOutOfRange"); + const Int id = importer->meshForName("PositionIndexOutOfRange"); CORRADE_VERIFY(id > -1); std::ostringstream out; Error redirectError{&out}; - CORRADE_VERIFY(!importer->mesh3D(id)); + CORRADE_VERIFY(!importer->mesh(id)); CORRADE_COMPARE(out.str(), "Trade::ObjImporter::mesh(): index 1 out of range for 1 vertices\n"); } void ObjImporterTest::mergedIndexOutOfRange() { Containers::Pointer importer = _manager.instantiate("ObjImporter"); CORRADE_VERIFY(importer->openFile(Utility::Directory::join(OBJIMPORTER_TEST_DIR, "wrongNumbers.obj"))); - const Int id = importer->mesh3DForName("TextureIndexOutOfRange"); + const Int id = importer->meshForName("TextureIndexOutOfRange"); CORRADE_VERIFY(id > -1); std::ostringstream out; Error redirectError{&out}; - CORRADE_VERIFY(!importer->mesh3D(id)); + CORRADE_VERIFY(!importer->mesh(id)); CORRADE_COMPARE(out.str(), "Trade::ObjImporter::mesh(): index 2 out of range for 1 vertices\n"); } void ObjImporterTest::zeroIndex() { Containers::Pointer importer = _manager.instantiate("ObjImporter"); CORRADE_VERIFY(importer->openFile(Utility::Directory::join(OBJIMPORTER_TEST_DIR, "wrongNumbers.obj"))); - const Int id = importer->mesh3DForName("ZeroIndex"); + const Int id = importer->meshForName("ZeroIndex"); CORRADE_VERIFY(id > -1); std::ostringstream out; Error redirectError{&out}; - CORRADE_VERIFY(!importer->mesh3D(id)); + CORRADE_VERIFY(!importer->mesh(id)); CORRADE_COMPARE(out.str(), "Trade::ObjImporter::mesh(): index 0 out of range for 1 vertices\n"); } void ObjImporterTest::explicitOptionalPositionCoordinate() { Containers::Pointer importer = _manager.instantiate("ObjImporter"); CORRADE_VERIFY(importer->openFile(Utility::Directory::join(OBJIMPORTER_TEST_DIR, "optionalCoordinates.obj"))); - const Int id = importer->mesh3DForName("SupportedPositionW"); + const Int id = importer->meshForName("SupportedPositionW"); CORRADE_VERIFY(id > -1); - const Containers::Optional data = importer->mesh3D(id); + const Containers::Optional data = importer->mesh(id); CORRADE_VERIFY(data); - CORRADE_COMPARE(data->positionArrayCount(), 1); - CORRADE_COMPARE(data->positions(0), (std::vector{ - {1.5f, 2.0f, 3.0f} - })); + CORRADE_COMPARE(data->attributeCount(), 1); + CORRADE_COMPARE_AS(data->attribute(MeshAttribute::Position), + Containers::arrayView({ + {1.5f, 2.0f, 3.0f} + }), TestSuite::Compare::Container); } void ObjImporterTest::explicitOptionalTextureCoordinate() { Containers::Pointer importer = _manager.instantiate("ObjImporter"); CORRADE_VERIFY(importer->openFile(Utility::Directory::join(OBJIMPORTER_TEST_DIR, "optionalCoordinates.obj"))); - const Int id = importer->mesh3DForName("SupportedTextureW"); + const Int id = importer->meshForName("SupportedTextureW"); CORRADE_VERIFY(id > -1); - const Containers::Optional data = importer->mesh3D(id); + const Containers::Optional data = importer->mesh(id); CORRADE_VERIFY(data); - CORRADE_COMPARE(data->textureCoords2DArrayCount(), 1); - CORRADE_COMPARE(data->textureCoords2D(0), (std::vector{ - {0.5f, 0.7f} - })); + CORRADE_COMPARE(data->attributeCount(MeshAttribute::TextureCoordinates), 1); + CORRADE_COMPARE_AS(data->attribute(MeshAttribute::TextureCoordinates), + Containers::arrayView({ + {0.5f, 0.7f} + }), TestSuite::Compare::Container); } void ObjImporterTest::unsupportedOptionalPositionCoordinate() { Containers::Pointer importer = _manager.instantiate("ObjImporter"); CORRADE_VERIFY(importer->openFile(Utility::Directory::join(OBJIMPORTER_TEST_DIR, "optionalCoordinates.obj"))); - const Int id = importer->mesh3DForName("UnsupportedPositionW"); + const Int id = importer->meshForName("UnsupportedPositionW"); CORRADE_VERIFY(id > -1); std::ostringstream out; Error redirectError{&out}; - CORRADE_VERIFY(!importer->mesh3D(id)); + CORRADE_VERIFY(!importer->mesh(id)); CORRADE_COMPARE(out.str(), "Trade::ObjImporter::mesh(): homogeneous coordinates are not supported\n"); } void ObjImporterTest::unsupportedOptionalTextureCoordinate() { Containers::Pointer importer = _manager.instantiate("ObjImporter"); CORRADE_VERIFY(importer->openFile(Utility::Directory::join(OBJIMPORTER_TEST_DIR, "optionalCoordinates.obj"))); - const Int id = importer->mesh3DForName("UnsupportedTextureW"); + const Int id = importer->meshForName("UnsupportedTextureW"); CORRADE_VERIFY(id > -1); std::ostringstream out; Error redirectError{&out}; - CORRADE_VERIFY(!importer->mesh3D(id)); + CORRADE_VERIFY(!importer->mesh(id)); CORRADE_COMPARE(out.str(), "Trade::ObjImporter::mesh(): 3D texture coordinates are not supported\n"); } void ObjImporterTest::shortFloatData() { Containers::Pointer importer = _manager.instantiate("ObjImporter"); CORRADE_VERIFY(importer->openFile(Utility::Directory::join(OBJIMPORTER_TEST_DIR, "wrongNumberCount.obj"))); - const Int id = importer->mesh3DForName("ShortFloat"); + const Int id = importer->meshForName("ShortFloat"); CORRADE_VERIFY(id > -1); std::ostringstream out; Error redirectError{&out}; - CORRADE_VERIFY(!importer->mesh3D(id)); + CORRADE_VERIFY(!importer->mesh(id)); CORRADE_COMPARE(out.str(), "Trade::ObjImporter::mesh(): invalid float array size\n"); } void ObjImporterTest::longFloatData() { Containers::Pointer importer = _manager.instantiate("ObjImporter"); CORRADE_VERIFY(importer->openFile(Utility::Directory::join(OBJIMPORTER_TEST_DIR, "wrongNumberCount.obj"))); - const Int id = importer->mesh3DForName("LongFloat"); + const Int id = importer->meshForName("LongFloat"); CORRADE_VERIFY(id > -1); std::ostringstream out; Error redirectError{&out}; - CORRADE_VERIFY(!importer->mesh3D(id)); + CORRADE_VERIFY(!importer->mesh(id)); CORRADE_COMPARE(out.str(), "Trade::ObjImporter::mesh(): invalid float array size\n"); } void ObjImporterTest::longOptionalFloatData() { Containers::Pointer importer = _manager.instantiate("ObjImporter"); CORRADE_VERIFY(importer->openFile(Utility::Directory::join(OBJIMPORTER_TEST_DIR, "wrongNumberCount.obj"))); - const Int id = importer->mesh3DForName("LongOptionalFloat"); + const Int id = importer->meshForName("LongOptionalFloat"); CORRADE_VERIFY(id > -1); std::ostringstream out; Error redirectError{&out}; - CORRADE_VERIFY(!importer->mesh3D(id)); + CORRADE_VERIFY(!importer->mesh(id)); CORRADE_COMPARE(out.str(), "Trade::ObjImporter::mesh(): invalid float array size\n"); } void ObjImporterTest::longIndexData() { Containers::Pointer importer = _manager.instantiate("ObjImporter"); CORRADE_VERIFY(importer->openFile(Utility::Directory::join(OBJIMPORTER_TEST_DIR, "wrongNumberCount.obj"))); - const Int id = importer->mesh3DForName("InvalidIndices"); + const Int id = importer->meshForName("InvalidIndices"); CORRADE_VERIFY(id > -1); std::ostringstream out; Error redirectError{&out}; - CORRADE_VERIFY(!importer->mesh3D(id)); + CORRADE_VERIFY(!importer->mesh(id)); CORRADE_COMPARE(out.str(), "Trade::ObjImporter::mesh(): invalid index data\n"); } void ObjImporterTest::wrongPointIndexData() { Containers::Pointer importer = _manager.instantiate("ObjImporter"); CORRADE_VERIFY(importer->openFile(Utility::Directory::join(OBJIMPORTER_TEST_DIR, "wrongNumberCount.obj"))); - const Int id = importer->mesh3DForName("WrongPointIndices"); + const Int id = importer->meshForName("WrongPointIndices"); CORRADE_VERIFY(id > -1); std::ostringstream out; Error redirectError{&out}; - CORRADE_VERIFY(!importer->mesh3D(id)); + CORRADE_VERIFY(!importer->mesh(id)); CORRADE_COMPARE(out.str(), "Trade::ObjImporter::mesh(): wrong index count for point\n"); } void ObjImporterTest::wrongLineIndexData() { Containers::Pointer importer = _manager.instantiate("ObjImporter"); CORRADE_VERIFY(importer->openFile(Utility::Directory::join(OBJIMPORTER_TEST_DIR, "wrongNumberCount.obj"))); - const Int id = importer->mesh3DForName("WrongLineIndices"); + const Int id = importer->meshForName("WrongLineIndices"); CORRADE_VERIFY(id > -1); std::ostringstream out; Error redirectError{&out}; - CORRADE_VERIFY(!importer->mesh3D(id)); + CORRADE_VERIFY(!importer->mesh(id)); CORRADE_COMPARE(out.str(), "Trade::ObjImporter::mesh(): wrong index count for line\n"); } void ObjImporterTest::wrongTriangleIndexData() { Containers::Pointer importer = _manager.instantiate("ObjImporter"); CORRADE_VERIFY(importer->openFile(Utility::Directory::join(OBJIMPORTER_TEST_DIR, "wrongNumberCount.obj"))); - const Int id = importer->mesh3DForName("WrongTriangleIndices"); + const Int id = importer->meshForName("WrongTriangleIndices"); CORRADE_VERIFY(id > -1); std::ostringstream out; Error redirectError{&out}; - CORRADE_VERIFY(!importer->mesh3D(id)); + CORRADE_VERIFY(!importer->mesh(id)); CORRADE_COMPARE(out.str(), "Trade::ObjImporter::mesh(): wrong index count for triangle\n"); } void ObjImporterTest::polygonIndexData() { Containers::Pointer importer = _manager.instantiate("ObjImporter"); CORRADE_VERIFY(importer->openFile(Utility::Directory::join(OBJIMPORTER_TEST_DIR, "wrongNumberCount.obj"))); - const Int id = importer->mesh3DForName("PolygonIndices"); + const Int id = importer->meshForName("PolygonIndices"); CORRADE_VERIFY(id > -1); std::ostringstream out; Error redirectError{&out}; - CORRADE_VERIFY(!importer->mesh3D(id)); + CORRADE_VERIFY(!importer->mesh(id)); CORRADE_COMPARE(out.str(), "Trade::ObjImporter::mesh(): polygons are not supported\n"); } void ObjImporterTest::missingPositionData() { Containers::Pointer importer = _manager.instantiate("ObjImporter"); CORRADE_VERIFY(importer->openFile(Utility::Directory::join(OBJIMPORTER_TEST_DIR, "missingData.obj"))); - const Int id = importer->mesh3DForName("MissingPositionData"); + const Int id = importer->meshForName("MissingPositionData"); CORRADE_VERIFY(id > -1); std::ostringstream out; Error redirectError{&out}; - CORRADE_VERIFY(!importer->mesh3D(id)); + CORRADE_VERIFY(!importer->mesh(id)); CORRADE_COMPARE(out.str(), "Trade::ObjImporter::mesh(): incomplete position data\n"); } void ObjImporterTest::missingPositionIndices() { Containers::Pointer importer = _manager.instantiate("ObjImporter"); CORRADE_VERIFY(importer->openFile(Utility::Directory::join(OBJIMPORTER_TEST_DIR, "missingData.obj"))); - const Int id = importer->mesh3DForName("MissingPositionIndices"); + const Int id = importer->meshForName("MissingPositionIndices"); CORRADE_VERIFY(id > -1); std::ostringstream out; Error redirectError{&out}; - CORRADE_VERIFY(!importer->mesh3D(id)); + CORRADE_VERIFY(!importer->mesh(id)); CORRADE_COMPARE(out.str(), "Trade::ObjImporter::mesh(): incomplete position data\n"); } void ObjImporterTest::missingNormalData() { Containers::Pointer importer = _manager.instantiate("ObjImporter"); CORRADE_VERIFY(importer->openFile(Utility::Directory::join(OBJIMPORTER_TEST_DIR, "missingData.obj"))); - const Int id = importer->mesh3DForName("MissingNormalData"); + const Int id = importer->meshForName("MissingNormalData"); CORRADE_VERIFY(id > -1); std::ostringstream out; Error redirectError{&out}; - CORRADE_VERIFY(!importer->mesh3D(id)); + CORRADE_VERIFY(!importer->mesh(id)); CORRADE_COMPARE(out.str(), "Trade::ObjImporter::mesh(): incomplete normal data\n"); } void ObjImporterTest::missingNormalIndices() { Containers::Pointer importer = _manager.instantiate("ObjImporter"); CORRADE_VERIFY(importer->openFile(Utility::Directory::join(OBJIMPORTER_TEST_DIR, "missingData.obj"))); - const Int id = importer->mesh3DForName("MissingNormalIndices"); + const Int id = importer->meshForName("MissingNormalIndices"); CORRADE_VERIFY(id > -1); std::ostringstream out; Error redirectError{&out}; - CORRADE_VERIFY(!importer->mesh3D(id)); + CORRADE_VERIFY(!importer->mesh(id)); CORRADE_COMPARE(out.str(), "Trade::ObjImporter::mesh(): incomplete normal data\n"); } void ObjImporterTest::missingTextureCoordinateData() { Containers::Pointer importer = _manager.instantiate("ObjImporter"); CORRADE_VERIFY(importer->openFile(Utility::Directory::join(OBJIMPORTER_TEST_DIR, "missingData.obj"))); - const Int id = importer->mesh3DForName("MissingTextureData"); + const Int id = importer->meshForName("MissingTextureData"); CORRADE_VERIFY(id > -1); std::ostringstream out; Error redirectError{&out}; - CORRADE_VERIFY(!importer->mesh3D(id)); + CORRADE_VERIFY(!importer->mesh(id)); CORRADE_COMPARE(out.str(), "Trade::ObjImporter::mesh(): incomplete texture coordinate data\n"); } void ObjImporterTest::missingTextureCoordinateIndices() { Containers::Pointer importer = _manager.instantiate("ObjImporter"); CORRADE_VERIFY(importer->openFile(Utility::Directory::join(OBJIMPORTER_TEST_DIR, "missingData.obj"))); - const Int id = importer->mesh3DForName("MissingTextureIndices"); + const Int id = importer->meshForName("MissingTextureIndices"); CORRADE_VERIFY(id > -1); std::ostringstream out; Error redirectError{&out}; - CORRADE_VERIFY(!importer->mesh3D(id)); + CORRADE_VERIFY(!importer->mesh(id)); CORRADE_COMPARE(out.str(), "Trade::ObjImporter::mesh(): incomplete texture coordinate data\n"); } void ObjImporterTest::wrongNormalIndexCount() { Containers::Pointer importer = _manager.instantiate("ObjImporter"); CORRADE_VERIFY(importer->openFile(Utility::Directory::join(OBJIMPORTER_TEST_DIR, "wrongIndexCount.obj"))); - const Int id = importer->mesh3DForName("ShortNormalIndices"); + const Int id = importer->meshForName("ShortNormalIndices"); CORRADE_VERIFY(id > -1); std::ostringstream out; Error redirectError{&out}; - CORRADE_VERIFY(!importer->mesh3D(id)); + CORRADE_VERIFY(!importer->mesh(id)); CORRADE_COMPARE(out.str(), "Trade::ObjImporter::mesh(): some normal indices are missing\n"); } void ObjImporterTest::wrongTextureCoordinateIndexCount() { Containers::Pointer importer = _manager.instantiate("ObjImporter"); CORRADE_VERIFY(importer->openFile(Utility::Directory::join(OBJIMPORTER_TEST_DIR, "wrongIndexCount.obj"))); - const Int id = importer->mesh3DForName("ShortTextureIndices"); + const Int id = importer->meshForName("ShortTextureIndices"); CORRADE_VERIFY(id > -1); std::ostringstream out; Error redirectError{&out}; - CORRADE_VERIFY(!importer->mesh3D(id)); + CORRADE_VERIFY(!importer->mesh(id)); CORRADE_COMPARE(out.str(), "Trade::ObjImporter::mesh(): some texture coordinate indices are missing\n"); } void ObjImporterTest::unsupportedKeyword() { Containers::Pointer importer = _manager.instantiate("ObjImporter"); CORRADE_VERIFY(importer->openFile(Utility::Directory::join(OBJIMPORTER_TEST_DIR, "keywords.obj"))); - const Int id = importer->mesh3DForName("UnsupportedKeyword"); + const Int id = importer->meshForName("UnsupportedKeyword"); CORRADE_VERIFY(id > -1); /* Everything should be parsed properly */ - const Containers::Optional data = importer->mesh3D(id); + const Containers::Optional data = importer->mesh(id); CORRADE_VERIFY(data); CORRADE_COMPARE(data->primitive(), MeshPrimitive::Points); - CORRADE_COMPARE(data->positionArrayCount(), 1); - CORRADE_COMPARE(data->positions(0), (std::vector{ - {0.0f, 1.0f, 2.0f} - })); - CORRADE_COMPARE(data->indices(), std::vector{0}); + CORRADE_COMPARE(data->attributeCount(), 1); + CORRADE_COMPARE_AS(data->attribute(MeshAttribute::Position), + Containers::arrayView({ + {0.0f, 1.0f, 2.0f} + }), TestSuite::Compare::Container); + CORRADE_VERIFY(data->isIndexed()); + CORRADE_COMPARE(data->indexType(), MeshIndexType::UnsignedInt); + CORRADE_COMPARE_AS(data->indices(), + Containers::arrayView({0}), + TestSuite::Compare::Container); } void ObjImporterTest::unknownKeyword() { Containers::Pointer importer = _manager.instantiate("ObjImporter"); CORRADE_VERIFY(importer->openFile(Utility::Directory::join(OBJIMPORTER_TEST_DIR, "keywords.obj"))); - const Int id = importer->mesh3DForName("UnknownKeyword"); + const Int id = importer->meshForName("UnknownKeyword"); CORRADE_VERIFY(id > -1); std::ostringstream out; Error redirectError{&out}; - CORRADE_VERIFY(!importer->mesh3D(id)); + CORRADE_VERIFY(!importer->mesh(id)); CORRADE_COMPARE(out.str(), "Trade::ObjImporter::mesh(): unknown keyword bleh\n"); }