Browse Source

sceneconverter: print the default scene ID as well.

Sometimes it's a vital piece of information, e.g. the file having no
default might lead to it being not displayed correctly as some end-user
application might think it has no scene.
pull/610/head
Vladimír Vondruš 4 years ago
parent
commit
613c1b238b
  1. 5
      src/Magnum/SceneTools/Implementation/sceneConverterUtilities.h
  2. 3
      src/Magnum/SceneTools/Test/CMakeLists.txt
  3. 22
      src/Magnum/SceneTools/Test/SceneConverterImplementationTest.cpp
  4. 11
      src/Magnum/SceneTools/Test/SceneConverterImplementationTestFiles/info-scenes-no-default.txt
  5. 1
      src/Magnum/SceneTools/Test/SceneConverterImplementationTestFiles/info-scenes-objects.txt
  6. 1
      src/Magnum/SceneTools/Test/SceneConverterImplementationTestFiles/info-scenes.txt

5
src/Magnum/SceneTools/Implementation/sceneConverterUtilities.h

@ -564,6 +564,11 @@ bool printInfo(const Debug::Flags useColor, const bool useColor24, const Utility
imageInfos = Trade::Implementation::imageInfo(importer, error, importTime); imageInfos = Trade::Implementation::imageInfo(importer, error, importTime);
} }
/* Print default scene also if sceneInfos is empty (for example due to an
import failure) */
if((args.isSet("info") || args.isSet("info-scenes")) && importer.defaultScene() != -1)
Debug{useColor} << Debug::boldColor(Debug::Color::Default) << "Default scene:" << Debug::resetColor << importer.defaultScene();
std::size_t totalSceneDataSize = 0; std::size_t totalSceneDataSize = 0;
for(const SceneInfo& info: sceneInfos) { for(const SceneInfo& info: sceneInfos) {
Debug d{useColor}; Debug d{useColor};

3
src/Magnum/SceneTools/Test/CMakeLists.txt

@ -67,8 +67,9 @@ corrade_add_test(SceneToolsSceneConverterImple___Test SceneConverterImplementati
SceneConverterImplementationTestFiles/info-meshes.txt SceneConverterImplementationTestFiles/info-meshes.txt
SceneConverterImplementationTestFiles/info-objects.txt SceneConverterImplementationTestFiles/info-objects.txt
SceneConverterImplementationTestFiles/info-references.txt SceneConverterImplementationTestFiles/info-references.txt
SceneConverterImplementationTestFiles/info-scenes-objects.txt
SceneConverterImplementationTestFiles/info-scenes.txt SceneConverterImplementationTestFiles/info-scenes.txt
SceneConverterImplementationTestFiles/info-scenes-no-default.txt
SceneConverterImplementationTestFiles/info-scenes-objects.txt
SceneConverterImplementationTestFiles/info-skins.txt SceneConverterImplementationTestFiles/info-skins.txt
SceneConverterImplementationTestFiles/info-textures.txt) SceneConverterImplementationTestFiles/info-textures.txt)
target_include_directories(SceneToolsSceneConverterImple___Test PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>) target_include_directories(SceneToolsSceneConverterImple___Test PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>)

22
src/Magnum/SceneTools/Test/SceneConverterImplementationTest.cpp

@ -77,11 +77,13 @@ const struct {
const char* name; const char* name;
const char* arg; const char* arg;
const char* expected; const char* expected;
Int defaultScene;
bool printVisualCheck; bool printVisualCheck;
} InfoScenesObjectsData[]{ } InfoScenesObjectsData[]{
{"", "--info", "info-scenes-objects.txt", true}, {"", "--info", "info-scenes-objects.txt", 1, true},
{"only scenes", "--info-scenes", "info-scenes.txt", false}, {"only scenes", "--info-scenes", "info-scenes.txt", 0, false},
{"only objects", "--info-objects", "info-objects.txt", false}, {"only scenes, no default scene", "--info-scenes", "info-scenes-no-default.txt", -1, false},
{"only objects", "--info-objects", "info-objects.txt", 1, false}
}; };
const struct { const struct {
@ -197,6 +199,8 @@ void SceneConverterImplementationTest::infoScenesObjects() {
setTestCaseDescription(data.name); setTestCaseDescription(data.name);
struct Importer: Trade::AbstractImporter { struct Importer: Trade::AbstractImporter {
explicit Importer(Int defaultScene): _defaultScene{defaultScene} {}
Trade::ImporterFeatures doFeatures() const override { return {}; } Trade::ImporterFeatures doFeatures() const override { return {}; }
bool doIsOpened() const override { return true; } bool doIsOpened() const override { return true; }
void doClose() override {} void doClose() override {}
@ -205,6 +209,9 @@ void SceneConverterImplementationTest::infoScenesObjects() {
thus not listed. Object 5 has no fields and thus not listed either. */ thus not listed. Object 5 has no fields and thus not listed either. */
UnsignedLong doObjectCount() const override { return 10; } UnsignedLong doObjectCount() const override { return 10; }
UnsignedInt doSceneCount() const override { return 2; } UnsignedInt doSceneCount() const override { return 2; }
Int doDefaultScene() const override {
return _defaultScene;
}
Containers::String doSceneName(UnsignedInt id) override { Containers::String doSceneName(UnsignedInt id) override {
return id == 0 ? "A simple scene" : ""; return id == 0 ? "A simple scene" : "";
} }
@ -262,7 +269,9 @@ void SceneConverterImplementationTest::infoScenesObjects() {
/* No need to fill the data, zero-init is fine */ /* No need to fill the data, zero-init is fine */
{7, 3}, {}, {2, 4, 4}, {} {7, 3}, {}, {2, 4, 4}, {}
}}; }};
} importer;
Int _defaultScene;
} importer{data.defaultScene};
const char* argv[]{"", data.arg}; const char* argv[]{"", data.arg};
CORRADE_VERIFY(_infoArgs.tryParse(Containers::arraySize(argv), argv)); CORRADE_VERIFY(_infoArgs.tryParse(Containers::arraySize(argv), argv));
@ -1185,6 +1194,8 @@ void SceneConverterImplementationTest::infoError() {
return {}; return {};
} }
Int doDefaultScene() const override { return 1; }
UnsignedInt doAnimationCount() const override { return 2; } UnsignedInt doAnimationCount() const override { return 2; }
Containers::Optional<Trade::AnimationData> doAnimation(UnsignedInt id) override { Containers::Optional<Trade::AnimationData> doAnimation(UnsignedInt id) override {
Error{} << "Animation" << id << "error!"; Error{} << "Animation" << id << "error!";
@ -1293,6 +1304,9 @@ void SceneConverterImplementationTest::infoError() {
"Can't import 2D image 0 level 0\n" "Can't import 2D image 0 level 0\n"
"Image 1 error!\n" "Image 1 error!\n"
"Can't import 2D image 1 level 0\n" "Can't import 2D image 1 level 0\n"
/* It should print the default scene even if all of them failed to
import */
"Default scene: 1\n"
/* ... and it should print all info output after the errors */ /* ... and it should print all info output after the errors */
"Object 0: A name\n"); "Object 0: A name\n");
} }

11
src/Magnum/SceneTools/Test/SceneConverterImplementationTestFiles/info-scenes-no-default.txt

@ -0,0 +1,11 @@
Scene 0: A simple scene
Bound: 4 objects @ UnsignedInt (0.1 kB)
Fields:
Parent @ Int, 3 entries
Mesh @ UnsignedInt, OrderedMapping, 4 entries
Scene 1:
Bound: 8 objects @ UnsignedByte (0.0 kB, ExternallyOwned|Mutable)
Fields:
Custom(42:) @ Double, 2 entries
Custom(1337:DirectionVector) @ Short[3], 3 entries
Total scene data size: 0.1 kB

1
src/Magnum/SceneTools/Test/SceneConverterImplementationTestFiles/info-scenes-objects.txt

@ -1,3 +1,4 @@
Default scene: 1
Scene 0: A simple scene Scene 0: A simple scene
Bound: 4 objects @ UnsignedInt (0.1 kB) Bound: 4 objects @ UnsignedInt (0.1 kB)
Fields: Fields:

1
src/Magnum/SceneTools/Test/SceneConverterImplementationTestFiles/info-scenes.txt

@ -1,3 +1,4 @@
Default scene: 0
Scene 0: A simple scene Scene 0: A simple scene
Bound: 4 objects @ UnsignedInt (0.1 kB) Bound: 4 objects @ UnsignedInt (0.1 kB)
Fields: Fields:

Loading…
Cancel
Save