diff --git a/src/MagnumPlugins/AnySceneConverter/Test/AnySceneConverterTest.cpp b/src/MagnumPlugins/AnySceneConverter/Test/AnySceneConverterTest.cpp index db4c62edd..feed3516e 100644 --- a/src/MagnumPlugins/AnySceneConverter/Test/AnySceneConverterTest.cpp +++ b/src/MagnumPlugins/AnySceneConverter/Test/AnySceneConverterTest.cpp @@ -160,9 +160,7 @@ void AnySceneConverterTest::convert() { Containers::Pointer converter = manager.instantiate("AnySceneConverter"); CORRADE_VERIFY(converter->convertToFile(mesh, filename)); - /* This file is reused in AnySceneImporter tests, so it's worth to save it - here */ - CORRADE_COMPARE_AS(filename, Utility::Path::join(ANYSCENEIMPORTER_TEST_DIR, "triangle.ply"), TestSuite::Compare::File); + CORRADE_COMPARE_AS(filename, Utility::Path::join(ANYSCENECONVERTER_TEST_DIR, "triangle.ply"), TestSuite::Compare::File); } void AnySceneConverterTest::convertBeginEnd() { @@ -193,9 +191,7 @@ void AnySceneConverterTest::convertBeginEnd() { CORRADE_COMPARE(converter->add(mesh), 0); CORRADE_VERIFY(converter->endFile()); - /* This file is reused in AnySceneImporter tests, so it's worth to save it - here */ - CORRADE_COMPARE_AS(filename, Utility::Path::join(ANYSCENEIMPORTER_TEST_DIR, "triangle.ply"), TestSuite::Compare::File); + CORRADE_COMPARE_AS(filename, Utility::Path::join(ANYSCENECONVERTER_TEST_DIR, "triangle.ply"), TestSuite::Compare::File); } void AnySceneConverterTest::detectConvert() { diff --git a/src/MagnumPlugins/AnySceneConverter/Test/CMakeLists.txt b/src/MagnumPlugins/AnySceneConverter/Test/CMakeLists.txt index 7a5c7fbf8..c770ba9a2 100644 --- a/src/MagnumPlugins/AnySceneConverter/Test/CMakeLists.txt +++ b/src/MagnumPlugins/AnySceneConverter/Test/CMakeLists.txt @@ -30,11 +30,9 @@ set(CMAKE_FOLDER "MagnumPlugins/AnySceneConverter/Test") if(CORRADE_TARGET_EMSCRIPTEN OR CORRADE_TARGET_ANDROID) set(ANYSCENECONVERTER_TEST_DIR .) set(ANYSCENECONVERTER_TEST_OUTPUT_DIR "write") - set(ANYSCENEIMPORTER_TEST_DIR .) else() set(ANYSCENECONVERTER_TEST_DIR ${CMAKE_CURRENT_SOURCE_DIR}) set(ANYSCENECONVERTER_TEST_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}) - set(ANYSCENEIMPORTER_TEST_DIR ${PROJECT_SOURCE_DIR}/src/MagnumPlugins/AnySceneImporter/Test) endif() if(NOT MAGNUM_ANYSCENECONVERTER_BUILD_STATIC) @@ -53,8 +51,8 @@ file(GENERATE OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/$/configure.h corrade_add_test(AnySceneConverterTest AnySceneConverterTest.cpp LIBRARIES MagnumTrade FILES - ${PROJECT_SOURCE_DIR}/src/MagnumPlugins/AnySceneImporter/Test/triangle.ply - objectid.ply) + objectid.ply + triangle.ply) target_include_directories(AnySceneConverterTest PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/$) if(MAGNUM_ANYSCENECONVERTER_BUILD_STATIC) target_link_libraries(AnySceneConverterTest PRIVATE AnySceneConverter) diff --git a/src/MagnumPlugins/AnySceneConverter/Test/configure.h.cmake b/src/MagnumPlugins/AnySceneConverter/Test/configure.h.cmake index 9d4c17444..cc98fc5d8 100644 --- a/src/MagnumPlugins/AnySceneConverter/Test/configure.h.cmake +++ b/src/MagnumPlugins/AnySceneConverter/Test/configure.h.cmake @@ -26,7 +26,6 @@ #cmakedefine ANYSCENECONVERTER_PLUGIN_FILENAME "${ANYSCENECONVERTER_PLUGIN_FILENAME}" #define ANYSCENECONVERTER_TEST_OUTPUT_DIR "${ANYSCENECONVERTER_TEST_OUTPUT_DIR}" #define ANYSCENECONVERTER_TEST_DIR "${ANYSCENECONVERTER_TEST_DIR}" -#define ANYSCENEIMPORTER_TEST_DIR "${ANYSCENEIMPORTER_TEST_DIR}" #ifdef CORRADE_TARGET_WINDOWS #ifdef CORRADE_IS_DEBUG_BUILD diff --git a/src/MagnumPlugins/AnySceneImporter/Test/triangle.ply b/src/MagnumPlugins/AnySceneConverter/Test/triangle.ply similarity index 100% rename from src/MagnumPlugins/AnySceneImporter/Test/triangle.ply rename to src/MagnumPlugins/AnySceneConverter/Test/triangle.ply diff --git a/src/MagnumPlugins/AnySceneImporter/AnySceneImporter.cpp b/src/MagnumPlugins/AnySceneImporter/AnySceneImporter.cpp index f213671ce..16a7e90a7 100644 --- a/src/MagnumPlugins/AnySceneImporter/AnySceneImporter.cpp +++ b/src/MagnumPlugins/AnySceneImporter/AnySceneImporter.cpp @@ -253,6 +253,7 @@ Containers::String AnySceneImporter::doSkin3DName(const UnsignedInt id) { return Containers::Optional AnySceneImporter::doSkin3D(const UnsignedInt id) { return _in->skin3D(id); } UnsignedInt AnySceneImporter::doMeshCount() const { return _in->meshCount(); } +UnsignedInt AnySceneImporter::doMeshLevelCount(UnsignedInt id) { return _in->meshLevelCount(id); } Int AnySceneImporter::doMeshForName(const Containers::StringView name) { return _in->meshForName(name); } Containers::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); } diff --git a/src/MagnumPlugins/AnySceneImporter/AnySceneImporter.h b/src/MagnumPlugins/AnySceneImporter/AnySceneImporter.h index 5c22d8b05..0f7d2fb50 100644 --- a/src/MagnumPlugins/AnySceneImporter/AnySceneImporter.h +++ b/src/MagnumPlugins/AnySceneImporter/AnySceneImporter.h @@ -235,6 +235,7 @@ class MAGNUM_ANYSCENEIMPORTER_EXPORT AnySceneImporter: public AbstractImporter { MAGNUM_ANYSCENEIMPORTER_LOCAL Containers::Optional doSkin3D(UnsignedInt id) override; MAGNUM_ANYSCENEIMPORTER_LOCAL UnsignedInt doMeshCount() const override; + MAGNUM_ANYSCENEIMPORTER_LOCAL UnsignedInt doMeshLevelCount(UnsignedInt id) override; MAGNUM_ANYSCENEIMPORTER_LOCAL Int doMeshForName(Containers::StringView name) override; MAGNUM_ANYSCENEIMPORTER_LOCAL Containers::String doMeshName(UnsignedInt id) override; MAGNUM_ANYSCENEIMPORTER_LOCAL Containers::Optional doMesh(UnsignedInt id, UnsignedInt level) override; diff --git a/src/MagnumPlugins/AnySceneImporter/Test/AnySceneImporterTest.cpp b/src/MagnumPlugins/AnySceneImporter/Test/AnySceneImporterTest.cpp index b6f327993..56c921fae 100644 --- a/src/MagnumPlugins/AnySceneImporter/Test/AnySceneImporterTest.cpp +++ b/src/MagnumPlugins/AnySceneImporter/Test/AnySceneImporterTest.cpp @@ -93,6 +93,7 @@ struct AnySceneImporterTest: TestSuite::Tester { void meshesDeprecated2D(); void meshesDeprecated3D(); #endif + void meshLevels(); void meshAttributeNameNoFileOpened(); void materials(); @@ -180,6 +181,7 @@ AnySceneImporterTest::AnySceneImporterTest() { &AnySceneImporterTest::meshesDeprecated2D, &AnySceneImporterTest::meshesDeprecated3D, #endif + &AnySceneImporterTest::meshLevels, &AnySceneImporterTest::meshAttributeNameNoFileOpened, &AnySceneImporterTest::materials, @@ -263,7 +265,7 @@ void AnySceneImporterTest::propagateFlags() { /* Ensure Assimp is used for PLY files and not our StanfordImporter */ manager.setPreferredPlugins("StanfordImporter", {"AssimpImporter"}); - Containers::String filename = Utility::Path::join(ANYSCENEIMPORTER_TEST_DIR, "triangle.ply"); + Containers::String filename = Utility::Path::join(ANYSCENEIMPORTER_TEST_DIR, "per-face-colors-be.ply"); Containers::Pointer importer = manager.instantiate("AnySceneImporter"); importer->setFlags(ImporterFlag::Verbose); @@ -292,7 +294,7 @@ void AnySceneImporterTest::propagateConfiguration() { /* Ensure Assimp is used for PLY files and not our StanfordImporter */ manager.setPreferredPlugins("StanfordImporter", {"AssimpImporter"}); - Containers::String filename = Utility::Path::join(ANYSCENEIMPORTER_TEST_DIR, "triangle.ply"); + Containers::String filename = Utility::Path::join(ANYSCENEIMPORTER_TEST_DIR, "per-face-colors-be.ply"); Containers::Pointer importer = manager.instantiate("AnySceneImporter"); @@ -337,7 +339,7 @@ void AnySceneImporterTest::propagateConfigurationUnknown() { std::ostringstream out; Warning redirectWarning{&out}; - CORRADE_VERIFY(importer->openFile(Utility::Path::join(ANYSCENEIMPORTER_TEST_DIR, "triangle.ply"))); + CORRADE_VERIFY(importer->openFile(Utility::Path::join(ANYSCENEIMPORTER_TEST_DIR, "per-face-colors-be.ply"))); if(data.quiet) CORRADE_COMPARE(out.str(), ""); else @@ -640,6 +642,28 @@ void AnySceneImporterTest::meshesDeprecated3D() { } #endif +void AnySceneImporterTest::meshLevels() { + PluginManager::Manager manager{MAGNUM_PLUGINS_IMPORTER_INSTALL_DIR}; + #ifdef ANYSCENEIMPORTER_PLUGIN_FILENAME + CORRADE_VERIFY(manager.load(ANYSCENEIMPORTER_PLUGIN_FILENAME) & PluginManager::LoadState::Loaded); + #endif + + if(manager.load("StanfordImporter") < PluginManager::LoadState::Loaded) + CORRADE_SKIP("StanfordImporter plugin can't be loaded."); + + Containers::Pointer importer = manager.instantiate("AnySceneImporter"); + importer->configuration().setValue("perFaceToPerVertex", false); + + CORRADE_VERIFY(importer->openFile(Utility::Path::join(ANYSCENEIMPORTER_TEST_DIR, "per-face-colors-be.ply"))); + CORRADE_COMPARE(importer->meshCount(), 1); + CORRADE_COMPARE(importer->meshLevelCount(0), 2); + + /* Check only primitive, a good enough proof that it's working */ + Containers::Optional mesh = importer->mesh(0, 1); + CORRADE_VERIFY(mesh); + CORRADE_COMPARE(mesh->primitive(), MeshPrimitive::Faces); +} + void AnySceneImporterTest::meshAttributeNameNoFileOpened() { Containers::Pointer importer = _manager.instantiate("AnySceneImporter"); diff --git a/src/MagnumPlugins/AnySceneImporter/Test/CMakeLists.txt b/src/MagnumPlugins/AnySceneImporter/Test/CMakeLists.txt index 0390dd559..8499d30aa 100644 --- a/src/MagnumPlugins/AnySceneImporter/Test/CMakeLists.txt +++ b/src/MagnumPlugins/AnySceneImporter/Test/CMakeLists.txt @@ -70,7 +70,8 @@ corrade_add_test(AnySceneImporterTest AnySceneImporterTest.cpp rgb.png 2d-mipmaps.ktx2 2d-mipmaps-and-layers.ktx2 - triangle.ply) + # Taken from StanfordImporter tests + per-face-colors-be.ply) target_include_directories(AnySceneImporterTest PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/$) if(MAGNUM_ANYSCENEIMPORTER_BUILD_STATIC) target_link_libraries(AnySceneImporterTest PRIVATE AnySceneImporter) diff --git a/src/MagnumPlugins/AnySceneImporter/Test/per-face-colors-be.ply b/src/MagnumPlugins/AnySceneImporter/Test/per-face-colors-be.ply new file mode 100644 index 000000000..62ce8cf59 Binary files /dev/null and b/src/MagnumPlugins/AnySceneImporter/Test/per-face-colors-be.ply differ