Browse Source

AnySceneImporter: properly propagate mesh level count.

Importers with multi-level mesh support are here since 2020, yet somehow
this plugin never exposed those. Another reason for proper test
coverage. The original triangle.ply was used by AnySceneConverter tests,
so it was moved there instead.
pull/620/head
Vladimír Vondruš 3 years ago
parent
commit
7fd5eec964
  1. 8
      src/MagnumPlugins/AnySceneConverter/Test/AnySceneConverterTest.cpp
  2. 6
      src/MagnumPlugins/AnySceneConverter/Test/CMakeLists.txt
  3. 1
      src/MagnumPlugins/AnySceneConverter/Test/configure.h.cmake
  4. 0
      src/MagnumPlugins/AnySceneConverter/Test/triangle.ply
  5. 1
      src/MagnumPlugins/AnySceneImporter/AnySceneImporter.cpp
  6. 1
      src/MagnumPlugins/AnySceneImporter/AnySceneImporter.h
  7. 30
      src/MagnumPlugins/AnySceneImporter/Test/AnySceneImporterTest.cpp
  8. 3
      src/MagnumPlugins/AnySceneImporter/Test/CMakeLists.txt
  9. BIN
      src/MagnumPlugins/AnySceneImporter/Test/per-face-colors-be.ply

8
src/MagnumPlugins/AnySceneConverter/Test/AnySceneConverterTest.cpp

@ -160,9 +160,7 @@ void AnySceneConverterTest::convert() {
Containers::Pointer<AbstractSceneConverter> converter = manager.instantiate("AnySceneConverter"); Containers::Pointer<AbstractSceneConverter> converter = manager.instantiate("AnySceneConverter");
CORRADE_VERIFY(converter->convertToFile(mesh, filename)); CORRADE_VERIFY(converter->convertToFile(mesh, filename));
/* This file is reused in AnySceneImporter tests, so it's worth to save it CORRADE_COMPARE_AS(filename, Utility::Path::join(ANYSCENECONVERTER_TEST_DIR, "triangle.ply"), TestSuite::Compare::File);
here */
CORRADE_COMPARE_AS(filename, Utility::Path::join(ANYSCENEIMPORTER_TEST_DIR, "triangle.ply"), TestSuite::Compare::File);
} }
void AnySceneConverterTest::convertBeginEnd() { void AnySceneConverterTest::convertBeginEnd() {
@ -193,9 +191,7 @@ void AnySceneConverterTest::convertBeginEnd() {
CORRADE_COMPARE(converter->add(mesh), 0); CORRADE_COMPARE(converter->add(mesh), 0);
CORRADE_VERIFY(converter->endFile()); CORRADE_VERIFY(converter->endFile());
/* This file is reused in AnySceneImporter tests, so it's worth to save it CORRADE_COMPARE_AS(filename, Utility::Path::join(ANYSCENECONVERTER_TEST_DIR, "triangle.ply"), TestSuite::Compare::File);
here */
CORRADE_COMPARE_AS(filename, Utility::Path::join(ANYSCENEIMPORTER_TEST_DIR, "triangle.ply"), TestSuite::Compare::File);
} }
void AnySceneConverterTest::detectConvert() { void AnySceneConverterTest::detectConvert() {

6
src/MagnumPlugins/AnySceneConverter/Test/CMakeLists.txt

@ -30,11 +30,9 @@ set(CMAKE_FOLDER "MagnumPlugins/AnySceneConverter/Test")
if(CORRADE_TARGET_EMSCRIPTEN OR CORRADE_TARGET_ANDROID) if(CORRADE_TARGET_EMSCRIPTEN OR CORRADE_TARGET_ANDROID)
set(ANYSCENECONVERTER_TEST_DIR .) set(ANYSCENECONVERTER_TEST_DIR .)
set(ANYSCENECONVERTER_TEST_OUTPUT_DIR "write") set(ANYSCENECONVERTER_TEST_OUTPUT_DIR "write")
set(ANYSCENEIMPORTER_TEST_DIR .)
else() else()
set(ANYSCENECONVERTER_TEST_DIR ${CMAKE_CURRENT_SOURCE_DIR}) set(ANYSCENECONVERTER_TEST_DIR ${CMAKE_CURRENT_SOURCE_DIR})
set(ANYSCENECONVERTER_TEST_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}) set(ANYSCENECONVERTER_TEST_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR})
set(ANYSCENEIMPORTER_TEST_DIR ${PROJECT_SOURCE_DIR}/src/MagnumPlugins/AnySceneImporter/Test)
endif() endif()
if(NOT MAGNUM_ANYSCENECONVERTER_BUILD_STATIC) if(NOT MAGNUM_ANYSCENECONVERTER_BUILD_STATIC)
@ -53,8 +51,8 @@ file(GENERATE OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/configure.h
corrade_add_test(AnySceneConverterTest AnySceneConverterTest.cpp corrade_add_test(AnySceneConverterTest AnySceneConverterTest.cpp
LIBRARIES MagnumTrade LIBRARIES MagnumTrade
FILES 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}/$<CONFIG>) target_include_directories(AnySceneConverterTest PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>)
if(MAGNUM_ANYSCENECONVERTER_BUILD_STATIC) if(MAGNUM_ANYSCENECONVERTER_BUILD_STATIC)
target_link_libraries(AnySceneConverterTest PRIVATE AnySceneConverter) target_link_libraries(AnySceneConverterTest PRIVATE AnySceneConverter)

1
src/MagnumPlugins/AnySceneConverter/Test/configure.h.cmake

@ -26,7 +26,6 @@
#cmakedefine ANYSCENECONVERTER_PLUGIN_FILENAME "${ANYSCENECONVERTER_PLUGIN_FILENAME}" #cmakedefine ANYSCENECONVERTER_PLUGIN_FILENAME "${ANYSCENECONVERTER_PLUGIN_FILENAME}"
#define ANYSCENECONVERTER_TEST_OUTPUT_DIR "${ANYSCENECONVERTER_TEST_OUTPUT_DIR}" #define ANYSCENECONVERTER_TEST_OUTPUT_DIR "${ANYSCENECONVERTER_TEST_OUTPUT_DIR}"
#define ANYSCENECONVERTER_TEST_DIR "${ANYSCENECONVERTER_TEST_DIR}" #define ANYSCENECONVERTER_TEST_DIR "${ANYSCENECONVERTER_TEST_DIR}"
#define ANYSCENEIMPORTER_TEST_DIR "${ANYSCENEIMPORTER_TEST_DIR}"
#ifdef CORRADE_TARGET_WINDOWS #ifdef CORRADE_TARGET_WINDOWS
#ifdef CORRADE_IS_DEBUG_BUILD #ifdef CORRADE_IS_DEBUG_BUILD

0
src/MagnumPlugins/AnySceneImporter/Test/triangle.ply → src/MagnumPlugins/AnySceneConverter/Test/triangle.ply

1
src/MagnumPlugins/AnySceneImporter/AnySceneImporter.cpp

@ -253,6 +253,7 @@ Containers::String AnySceneImporter::doSkin3DName(const UnsignedInt id) { return
Containers::Optional<SkinData3D> AnySceneImporter::doSkin3D(const UnsignedInt id) { return _in->skin3D(id); } Containers::Optional<SkinData3D> AnySceneImporter::doSkin3D(const UnsignedInt id) { return _in->skin3D(id); }
UnsignedInt AnySceneImporter::doMeshCount() const { return _in->meshCount(); } 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); } Int AnySceneImporter::doMeshForName(const Containers::StringView name) { return _in->meshForName(name); }
Containers::String AnySceneImporter::doMeshName(const UnsignedInt id) { return _in->meshName(id); } Containers::String AnySceneImporter::doMeshName(const UnsignedInt id) { return _in->meshName(id); }
Containers::Optional<MeshData> AnySceneImporter::doMesh(const UnsignedInt id, const UnsignedInt level) { return _in->mesh(id, level); } Containers::Optional<MeshData> AnySceneImporter::doMesh(const UnsignedInt id, const UnsignedInt level) { return _in->mesh(id, level); }

1
src/MagnumPlugins/AnySceneImporter/AnySceneImporter.h

@ -235,6 +235,7 @@ class MAGNUM_ANYSCENEIMPORTER_EXPORT AnySceneImporter: public AbstractImporter {
MAGNUM_ANYSCENEIMPORTER_LOCAL Containers::Optional<SkinData3D> doSkin3D(UnsignedInt id) override; MAGNUM_ANYSCENEIMPORTER_LOCAL Containers::Optional<SkinData3D> doSkin3D(UnsignedInt id) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL UnsignedInt doMeshCount() const 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 Int doMeshForName(Containers::StringView name) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Containers::String doMeshName(UnsignedInt id) override; MAGNUM_ANYSCENEIMPORTER_LOCAL Containers::String doMeshName(UnsignedInt id) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Containers::Optional<MeshData> doMesh(UnsignedInt id, UnsignedInt level) override; MAGNUM_ANYSCENEIMPORTER_LOCAL Containers::Optional<MeshData> doMesh(UnsignedInt id, UnsignedInt level) override;

30
src/MagnumPlugins/AnySceneImporter/Test/AnySceneImporterTest.cpp

@ -93,6 +93,7 @@ struct AnySceneImporterTest: TestSuite::Tester {
void meshesDeprecated2D(); void meshesDeprecated2D();
void meshesDeprecated3D(); void meshesDeprecated3D();
#endif #endif
void meshLevels();
void meshAttributeNameNoFileOpened(); void meshAttributeNameNoFileOpened();
void materials(); void materials();
@ -180,6 +181,7 @@ AnySceneImporterTest::AnySceneImporterTest() {
&AnySceneImporterTest::meshesDeprecated2D, &AnySceneImporterTest::meshesDeprecated2D,
&AnySceneImporterTest::meshesDeprecated3D, &AnySceneImporterTest::meshesDeprecated3D,
#endif #endif
&AnySceneImporterTest::meshLevels,
&AnySceneImporterTest::meshAttributeNameNoFileOpened, &AnySceneImporterTest::meshAttributeNameNoFileOpened,
&AnySceneImporterTest::materials, &AnySceneImporterTest::materials,
@ -263,7 +265,7 @@ void AnySceneImporterTest::propagateFlags() {
/* Ensure Assimp is used for PLY files and not our StanfordImporter */ /* Ensure Assimp is used for PLY files and not our StanfordImporter */
manager.setPreferredPlugins("StanfordImporter", {"AssimpImporter"}); 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<AbstractImporter> importer = manager.instantiate("AnySceneImporter"); Containers::Pointer<AbstractImporter> importer = manager.instantiate("AnySceneImporter");
importer->setFlags(ImporterFlag::Verbose); importer->setFlags(ImporterFlag::Verbose);
@ -292,7 +294,7 @@ void AnySceneImporterTest::propagateConfiguration() {
/* Ensure Assimp is used for PLY files and not our StanfordImporter */ /* Ensure Assimp is used for PLY files and not our StanfordImporter */
manager.setPreferredPlugins("StanfordImporter", {"AssimpImporter"}); 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<AbstractImporter> importer = manager.instantiate("AnySceneImporter"); Containers::Pointer<AbstractImporter> importer = manager.instantiate("AnySceneImporter");
@ -337,7 +339,7 @@ void AnySceneImporterTest::propagateConfigurationUnknown() {
std::ostringstream out; std::ostringstream out;
Warning redirectWarning{&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) if(data.quiet)
CORRADE_COMPARE(out.str(), ""); CORRADE_COMPARE(out.str(), "");
else else
@ -640,6 +642,28 @@ void AnySceneImporterTest::meshesDeprecated3D() {
} }
#endif #endif
void AnySceneImporterTest::meshLevels() {
PluginManager::Manager<AbstractImporter> 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<AbstractImporter> 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<Trade::MeshData> mesh = importer->mesh(0, 1);
CORRADE_VERIFY(mesh);
CORRADE_COMPARE(mesh->primitive(), MeshPrimitive::Faces);
}
void AnySceneImporterTest::meshAttributeNameNoFileOpened() { void AnySceneImporterTest::meshAttributeNameNoFileOpened() {
Containers::Pointer<AbstractImporter> importer = _manager.instantiate("AnySceneImporter"); Containers::Pointer<AbstractImporter> importer = _manager.instantiate("AnySceneImporter");

3
src/MagnumPlugins/AnySceneImporter/Test/CMakeLists.txt

@ -70,7 +70,8 @@ corrade_add_test(AnySceneImporterTest AnySceneImporterTest.cpp
rgb.png rgb.png
2d-mipmaps.ktx2 2d-mipmaps.ktx2
2d-mipmaps-and-layers.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}/$<CONFIG>) target_include_directories(AnySceneImporterTest PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>)
if(MAGNUM_ANYSCENEIMPORTER_BUILD_STATIC) if(MAGNUM_ANYSCENEIMPORTER_BUILD_STATIC)
target_link_libraries(AnySceneImporterTest PRIVATE AnySceneImporter) target_link_libraries(AnySceneImporterTest PRIVATE AnySceneImporter)

BIN
src/MagnumPlugins/AnySceneImporter/Test/per-face-colors-be.ply

Binary file not shown.
Loading…
Cancel
Save