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");
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() {

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)
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}/$<CONFIG>/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}/$<CONFIG>)
if(MAGNUM_ANYSCENECONVERTER_BUILD_STATIC)
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}"
#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

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); }
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<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 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<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 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<AbstractImporter> 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<AbstractImporter> 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<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() {
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
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}/$<CONFIG>)
if(MAGNUM_ANYSCENEIMPORTER_BUILD_STATIC)
target_link_libraries(AnySceneImporterTest PRIVATE AnySceneImporter)

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

Binary file not shown.
Loading…
Cancel
Save