diff --git a/src/MagnumPlugins/AnySceneImporter/AnySceneImporter.cpp b/src/MagnumPlugins/AnySceneImporter/AnySceneImporter.cpp index 18c86b14a..0e7faa2b7 100644 --- a/src/MagnumPlugins/AnySceneImporter/AnySceneImporter.cpp +++ b/src/MagnumPlugins/AnySceneImporter/AnySceneImporter.cpp @@ -36,13 +36,19 @@ #include "Magnum/Trade/CameraData.h" #include "Magnum/Trade/ImageData.h" #include "Magnum/Trade/LightData.h" -#include "Magnum/Trade/MeshData2D.h" -#include "Magnum/Trade/MeshData3D.h" +#include "Magnum/Trade/MeshData.h" #include "Magnum/Trade/ObjectData2D.h" #include "Magnum/Trade/ObjectData3D.h" #include "Magnum/Trade/SceneData.h" #include "Magnum/Trade/TextureData.h" +#ifdef MAGNUM_BUILD_DEPRECATED +#define _MAGNUM_NO_DEPRECATED_MESHDATA /* So it doesn't yell here */ + +#include "Magnum/Trade/MeshData2D.h" +#include "Magnum/Trade/MeshData3D.h" +#endif + namespace Magnum { namespace Trade { AnySceneImporter::AnySceneImporter(PluginManager::Manager& manager): AbstractImporter{manager} {} @@ -175,6 +181,16 @@ Int AnySceneImporter::doObject3DForName(const std::string& name) { return _in->o std::string AnySceneImporter::doObject3DName(const UnsignedInt id) { return _in->object3DName(id); } Containers::Pointer AnySceneImporter::doObject3D(const UnsignedInt id) { return _in->object3D(id); } +UnsignedInt AnySceneImporter::doMeshCount() const { return _in->meshCount(); } +Int AnySceneImporter::doMeshForName(const std::string& name) { return _in->meshForName(name); } +std::string AnySceneImporter::doMeshName(const UnsignedInt id) { return _in->meshName(id); } +Containers::Optional AnySceneImporter::doMesh(const UnsignedInt id, const UnsignedInt level) { return _in->mesh(id, level); } + +MeshAttribute AnySceneImporter::doMeshAttributeForName(const std::string& name) { return _in->meshAttributeForName(name); } +std::string AnySceneImporter::doMeshAttributeName(const UnsignedShort id) { return _in->meshAttributeName(meshAttributeCustom(id)); } + +#ifdef MAGNUM_BUILD_DEPRECATED +CORRADE_IGNORE_DEPRECATED_PUSH UnsignedInt AnySceneImporter::doMesh2DCount() const { return _in->mesh2DCount(); } Int AnySceneImporter::doMesh2DForName(const std::string& name) { return _in->mesh2DForName(name); } std::string AnySceneImporter::doMesh2DName(const UnsignedInt id) { return _in->mesh2DName(id); } @@ -184,6 +200,8 @@ UnsignedInt AnySceneImporter::doMesh3DCount() const { return _in->mesh3DCount(); Int AnySceneImporter::doMesh3DForName(const std::string& name) { return _in->mesh3DForName(name); } std::string AnySceneImporter::doMesh3DName(const UnsignedInt id) { return _in->mesh3DName(id); } Containers::Optional AnySceneImporter::doMesh3D(const UnsignedInt id) { return _in->mesh3D(id); } +CORRADE_IGNORE_DEPRECATED_POP +#endif UnsignedInt AnySceneImporter::doMaterialCount() const { return _in->materialCount(); } Int AnySceneImporter::doMaterialForName(const std::string& name) { return _in->materialForName(name); } diff --git a/src/MagnumPlugins/AnySceneImporter/AnySceneImporter.h b/src/MagnumPlugins/AnySceneImporter/AnySceneImporter.h index 1cb4868b0..743bd86a4 100644 --- a/src/MagnumPlugins/AnySceneImporter/AnySceneImporter.h +++ b/src/MagnumPlugins/AnySceneImporter/AnySceneImporter.h @@ -175,15 +175,29 @@ class MAGNUM_ANYSCENEIMPORTER_EXPORT AnySceneImporter: public AbstractImporter { MAGNUM_ANYSCENEIMPORTER_LOCAL std::string doObject3DName(UnsignedInt id) override; MAGNUM_ANYSCENEIMPORTER_LOCAL Containers::Pointer doObject3D(UnsignedInt id) override; + MAGNUM_ANYSCENEIMPORTER_LOCAL UnsignedInt doMeshCount() const override; + MAGNUM_ANYSCENEIMPORTER_LOCAL Int doMeshForName(const std::string& name) override; + MAGNUM_ANYSCENEIMPORTER_LOCAL std::string doMeshName(UnsignedInt id) override; + MAGNUM_ANYSCENEIMPORTER_LOCAL Containers::Optional doMesh(UnsignedInt id, UnsignedInt level) override; + + MAGNUM_ANYSCENEIMPORTER_LOCAL MeshAttribute doMeshAttributeForName(const std::string& name) override; + MAGNUM_ANYSCENEIMPORTER_LOCAL std::string doMeshAttributeName(UnsignedShort id) override; + + #ifdef MAGNUM_BUILD_DEPRECATED MAGNUM_ANYSCENEIMPORTER_LOCAL UnsignedInt doMesh2DCount() const override; MAGNUM_ANYSCENEIMPORTER_LOCAL Int doMesh2DForName(const std::string& name) override; MAGNUM_ANYSCENEIMPORTER_LOCAL std::string doMesh2DName(UnsignedInt id) override; + CORRADE_IGNORE_DEPRECATED_PUSH MAGNUM_ANYSCENEIMPORTER_LOCAL Containers::Optional doMesh2D(UnsignedInt id) override; + CORRADE_IGNORE_DEPRECATED_POP MAGNUM_ANYSCENEIMPORTER_LOCAL UnsignedInt doMesh3DCount() const override; MAGNUM_ANYSCENEIMPORTER_LOCAL Int doMesh3DForName(const std::string& name) override; MAGNUM_ANYSCENEIMPORTER_LOCAL std::string doMesh3DName(UnsignedInt id) override; + CORRADE_IGNORE_DEPRECATED_PUSH MAGNUM_ANYSCENEIMPORTER_LOCAL Containers::Optional doMesh3D(UnsignedInt id) override; + CORRADE_IGNORE_DEPRECATED_POP + #endif MAGNUM_ANYSCENEIMPORTER_LOCAL UnsignedInt doMaterialCount() const override; MAGNUM_ANYSCENEIMPORTER_LOCAL Int doMaterialForName(const std::string& name) override; diff --git a/src/MagnumPlugins/AnySceneImporter/Test/AnySceneImporterTest.cpp b/src/MagnumPlugins/AnySceneImporter/Test/AnySceneImporterTest.cpp index 325f4cf2b..722754bb9 100644 --- a/src/MagnumPlugins/AnySceneImporter/Test/AnySceneImporterTest.cpp +++ b/src/MagnumPlugins/AnySceneImporter/Test/AnySceneImporterTest.cpp @@ -33,7 +33,13 @@ #include "Magnum/Math/Vector3.h" #include "Magnum/Trade/AbstractImporter.h" +#include "Magnum/Trade/MeshData.h" + +#ifdef MAGNUM_BUILD_DEPRECATED +#define _MAGNUM_NO_DEPRECATED_MESHDATA /* So it doesn't yell here */ + #include "Magnum/Trade/MeshData3D.h" +#endif #include "configure.h" @@ -43,6 +49,9 @@ struct AnySceneImporterTest: TestSuite::Tester { explicit AnySceneImporterTest(); void load(); + #ifdef MAGNUM_BUILD_DEPRECATED + void loadDeprecatedMeshData(); + #endif void detect(); void unknown(); @@ -79,6 +88,10 @@ AnySceneImporterTest::AnySceneImporterTest() { addInstancedTests({&AnySceneImporterTest::load}, Containers::arraySize(LoadData)); + #ifdef MAGNUM_BUILD_DEPRECATED + addTests({&AnySceneImporterTest::loadDeprecatedMeshData}); + #endif + addInstancedTests({&AnySceneImporterTest::detect}, Containers::arraySize(DetectData)); @@ -106,13 +119,35 @@ void AnySceneImporterTest::load() { CORRADE_VERIFY(importer->openFile(data.filename)); /* Check only size, as it is good enough proof that it is working */ + Containers::Optional mesh = importer->mesh(0); + CORRADE_VERIFY(mesh); + CORRADE_COMPARE(mesh->vertexCount(), 3); + + importer->close(); + CORRADE_VERIFY(!importer->isOpened()); +} + +#ifdef MAGNUM_BUILD_DEPRECATED +void AnySceneImporterTest::loadDeprecatedMeshData() { + if(!(_manager.loadState("ObjImporter") & PluginManager::LoadState::Loaded)) + CORRADE_SKIP("ObjImporter plugin not enabled, cannot test"); + + Containers::Pointer importer = _manager.instantiate("AnySceneImporter"); + CORRADE_VERIFY(importer->openFile(OBJ_FILE)); + + /* Check only size, as it is good enough proof that it is working */ + + /* MSVC warns also on positions() */ + CORRADE_IGNORE_DEPRECATED_PUSH Containers::Optional mesh = importer->mesh3D(0); CORRADE_VERIFY(mesh); CORRADE_COMPARE(mesh->positions(0).size(), 3); + CORRADE_IGNORE_DEPRECATED_POP importer->close(); CORRADE_VERIFY(!importer->isOpened()); } +#endif void AnySceneImporterTest::detect() { auto&& data = DetectData[testCaseInstanceId()];