From e808d10c85447d44824e0ead7950c0404a0785db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Wed, 28 Sep 2022 22:52:57 +0200 Subject: [PATCH] sceneconverter: adapt tests to GltfImporter and SceneConverter changes. --- src/Magnum/SceneTools/Test/CMakeLists.txt | 1 + .../SceneTools/Test/SceneConverterTest.cpp | 6 ++ .../images-3d-1x1x1.gltf | 10 +++ ...riangles-transformed-no-default-scene.gltf | 75 +++++++++++++++++++ .../two-triangles-transformed.gltf | 3 +- src/Magnum/SceneTools/sceneconverter.cpp | 11 ++- 6 files changed, 101 insertions(+), 5 deletions(-) create mode 100644 src/Magnum/SceneTools/Test/SceneConverterTestFiles/two-triangles-transformed-no-default-scene.gltf diff --git a/src/Magnum/SceneTools/Test/CMakeLists.txt b/src/Magnum/SceneTools/Test/CMakeLists.txt index fa9b3a283..53f97dacc 100644 --- a/src/Magnum/SceneTools/Test/CMakeLists.txt +++ b/src/Magnum/SceneTools/Test/CMakeLists.txt @@ -138,6 +138,7 @@ if(CORRADE_TARGET_UNIX AND NOT CORRADE_PLUGINMANAGER_NO_DYNAMIC_PLUGIN_SUPPORT) SceneConverterTestFiles/two-quads.gltf SceneConverterTestFiles/two-triangles-transformed.bin SceneConverterTestFiles/two-triangles-transformed.gltf + SceneConverterTestFiles/two-triangles-transformed-no-default-scene.gltf SceneConverterTestFiles/two-triangles.obj) target_include_directories(SceneToolsSceneConverterTest PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/$) if(MAGNUM_WITH_SCENECONVERTER) diff --git a/src/Magnum/SceneTools/Test/SceneConverterTest.cpp b/src/Magnum/SceneTools/Test/SceneConverterTest.cpp index 3448621d1..dcec27dad 100644 --- a/src/Magnum/SceneTools/Test/SceneConverterTest.cpp +++ b/src/Magnum/SceneTools/Test/SceneConverterTest.cpp @@ -176,6 +176,12 @@ const struct { "GltfImporter", nullptr, "StanfordSceneConverter", {}, nullptr, "quad-duplicates.ply", nullptr, {}}, + {"concatenate meshes with a scene but no default scene", Containers::array({ + "--concatenate-meshes", + Utility::Path::join(SCENETOOLS_TEST_DIR, "SceneConverterTestFiles/two-triangles-transformed-no-default-scene.gltf"), Utility::Path::join(SCENETOOLS_TEST_OUTPUT_DIR, "SceneConverterTestFiles/quad-duplicates.ply")}), + "GltfImporter", nullptr, "StanfordSceneConverter", {}, nullptr, + "quad-duplicates.ply", nullptr, + {}}, /** @todo drop --mesh once it's not needed anymore again, then add a multi-mesh variant */ {"one mesh, filter mesh attributes", Containers::array({ diff --git a/src/Magnum/SceneTools/Test/SceneConverterTestFiles/images-3d-1x1x1.gltf b/src/Magnum/SceneTools/Test/SceneConverterTestFiles/images-3d-1x1x1.gltf index 3fae84d34..1cdc1f821 100644 --- a/src/Magnum/SceneTools/Test/SceneConverterTestFiles/images-3d-1x1x1.gltf +++ b/src/Magnum/SceneTools/Test/SceneConverterTestFiles/images-3d-1x1x1.gltf @@ -26,8 +26,17 @@ "byteLength": 255 } ], + "samplers": [ + { + "wrapS": 10497, + "wrapT": 10497, + "minFilter": 9987, + "magFilter": 9729 + } + ], "textures": [ { + "sampler": 0, "extensions": { "KHR_texture_ktx": { "source": 0, @@ -36,6 +45,7 @@ } }, { + "sampler": 0, "extensions": { "KHR_texture_ktx": { "source": 1, diff --git a/src/Magnum/SceneTools/Test/SceneConverterTestFiles/two-triangles-transformed-no-default-scene.gltf b/src/Magnum/SceneTools/Test/SceneConverterTestFiles/two-triangles-transformed-no-default-scene.gltf new file mode 100644 index 000000000..b9baca103 --- /dev/null +++ b/src/Magnum/SceneTools/Test/SceneConverterTestFiles/two-triangles-transformed-no-default-scene.gltf @@ -0,0 +1,75 @@ +{ + "asset": { + "version": "2.0" + }, + "buffers": [ + { + "uri": "two-triangles-transformed.bin", + "byteLength": 72 + } + ], + "bufferViews": [ + { + "buffer": 0, + "byteLength": 36 + }, + { + "buffer": 0, + "byteOffset": 36, + "byteLength": 36 + } + ], + "accessors": [ + { + "bufferView": 0, + "componentType": 5126, + "count": 3, + "type": "VEC3" + }, + { + "bufferView": 1, + "componentType": 5126, + "count": 3, + "type": "VEC3" + } + ], + "meshes": [ + { + "primitives": [ + { + "attributes": { + "POSITION": 0 + } + } + ] + }, + { + "primitives": [ + { + "attributes": { + "POSITION": 1 + } + } + ] + } + ], + "nodes": [ + { + "mesh": 0 + }, + { + "name": "Explicit intermediate node to test proper traversal", + "translation": [0, -5, 0], + "children": [2] + }, + { + "mesh": 1, + "translation": [0, -5, 0] + } + ], + "scenes": [ + { + "nodes": [0, 1] + } + ] +} diff --git a/src/Magnum/SceneTools/Test/SceneConverterTestFiles/two-triangles-transformed.gltf b/src/Magnum/SceneTools/Test/SceneConverterTestFiles/two-triangles-transformed.gltf index b9baca103..dc32c28de 100644 --- a/src/Magnum/SceneTools/Test/SceneConverterTestFiles/two-triangles-transformed.gltf +++ b/src/Magnum/SceneTools/Test/SceneConverterTestFiles/two-triangles-transformed.gltf @@ -71,5 +71,6 @@ { "nodes": [0, 1] } - ] + ], + "scene": 0 } diff --git a/src/Magnum/SceneTools/sceneconverter.cpp b/src/Magnum/SceneTools/sceneconverter.cpp index d585f42ed..1672e0de7 100644 --- a/src/Magnum/SceneTools/sceneconverter.cpp +++ b/src/Magnum/SceneTools/sceneconverter.cpp @@ -621,13 +621,16 @@ well, the IDs reference attributes of the first mesh.)") /* If there's a scene, use it to flatten mesh hierarchy. If not, assume all meshes are in the root. */ - /** @todo make it possible to choose the scene */ - if(importer->defaultScene() != -1) { + if(importer->defaultScene() != -1 || importer->sceneCount()) { Containers::Optional scene; { + /** @todo make it possible to choose the scene, or possibly + fail if there are multiple scenes but no default one + and require the user to pick? */ + const UnsignedInt defaultScene = importer->defaultScene() == -1 ? 0 : importer->defaultScene(); Trade::Implementation::Duration d{importConversionTime}; - if(!(scene = importer->scene(importer->defaultScene()))) { - Error{} << "Cannot import scene" << importer->defaultScene() << "for mesh concatenation"; + if(!(scene = importer->scene(defaultScene))) { + Error{} << "Cannot import scene" << defaultScene << "for mesh concatenation"; return 1; } }