Browse Source

[wip] AnySceneImporter: correctly propagate custom scene field names.

TODO: tests, also for file not open
TODO: and also for mesh attribs file not open
sceneconverter
Vladimír Vondruš 4 years ago
parent
commit
21ef0f66eb
  1. 22
      src/MagnumPlugins/AnySceneImporter/AnySceneImporter.cpp
  2. 2
      src/MagnumPlugins/AnySceneImporter/AnySceneImporter.h
  3. 14
      src/MagnumPlugins/AnySceneImporter/Test/AnySceneImporterTest.cpp

22
src/MagnumPlugins/AnySceneImporter/AnySceneImporter.cpp

@ -191,6 +191,16 @@ Long AnySceneImporter::doObjectForName(const Containers::StringView name) { retu
Containers::String AnySceneImporter::doSceneName(const UnsignedInt id) { return _in->sceneName(id); }
Containers::String AnySceneImporter::doObjectName(const UnsignedLong id) { return _in->objectName(id); }
Containers::Optional<SceneData> AnySceneImporter::doScene(const UnsignedInt id) { return _in->scene(id); }
SceneField AnySceneImporter::doSceneFieldForName(const Containers::StringView name) {
/* This API can be called even if no file is opened, in that case return
an invalid ID */
return _in ? _in->sceneFieldForName(name) : SceneField{};
}
Containers::String AnySceneImporter::doSceneFieldName(const UnsignedInt name) {
/* This API can be called even if no file is opened, in that case return
an invalid ID */
return _in ? _in->sceneFieldName(sceneFieldCustom(name)) : Containers::String{};
}
UnsignedInt AnySceneImporter::doLightCount() const { return _in->lightCount(); }
Int AnySceneImporter::doLightForName(const Containers::StringView name) { return _in->lightForName(name); }
@ -231,8 +241,16 @@ Int AnySceneImporter::doMeshForName(const Containers::StringView name) { return
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); }
MeshAttribute AnySceneImporter::doMeshAttributeForName(const Containers::StringView name) { return _in->meshAttributeForName(name); }
Containers::String AnySceneImporter::doMeshAttributeName(const UnsignedShort id) { return _in->meshAttributeName(meshAttributeCustom(id)); }
MeshAttribute AnySceneImporter::doMeshAttributeForName(const Containers::StringView name) {
/* This API can be called even if no file is opened, in that case return
an invalid ID */
return _in ? _in->meshAttributeForName(name) : MeshAttribute{};
}
Containers::String AnySceneImporter::doMeshAttributeName(const UnsignedShort id) {
/* This API can be called even if no file is opened, in that case return
an invalid ID */
return _in ? _in->meshAttributeName(meshAttributeCustom(id)) : Containers::String{};
}
#ifdef MAGNUM_BUILD_DEPRECATED
CORRADE_IGNORE_DEPRECATED_PUSH

2
src/MagnumPlugins/AnySceneImporter/AnySceneImporter.h

@ -177,6 +177,8 @@ class MAGNUM_ANYSCENEIMPORTER_EXPORT AnySceneImporter: public AbstractImporter {
MAGNUM_ANYSCENEIMPORTER_LOCAL Containers::String doSceneName(UnsignedInt id) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Containers::String doObjectName(UnsignedLong id) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Containers::Optional<SceneData> doScene(UnsignedInt id) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL SceneField doSceneFieldForName(Containers::StringView name) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Containers::String doSceneFieldName(Magnum::UnsignedInt name) override;
MAGNUM_ANYSCENEIMPORTER_LOCAL UnsignedInt doLightCount() const override;
MAGNUM_ANYSCENEIMPORTER_LOCAL Int doLightForName(Containers::StringView name) override;

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

@ -63,6 +63,9 @@ struct AnySceneImporterTest: TestSuite::Tester {
void propagateConfigurationUnknown();
void propagateFileCallback();
void sceneFieldNameNoFileOpened();
void meshAttributeNameNoFileOpened();
/* Explicitly forbid system-wide plugin dependencies */
PluginManager::Manager<AbstractImporter> _manager{"nonexistent"};
};
@ -107,7 +110,10 @@ AnySceneImporterTest::AnySceneImporterTest() {
&AnySceneImporterTest::propagateFlags,
&AnySceneImporterTest::propagateConfiguration,
&AnySceneImporterTest::propagateConfigurationUnknown,
&AnySceneImporterTest::propagateFileCallback});
&AnySceneImporterTest::propagateFileCallback,
&AnySceneImporterTest::sceneFieldNameNoFileOpened,
&AnySceneImporterTest::meshAttributeNameNoFileOpened});
/* Load the plugin directly from the build tree. Otherwise it's static and
already loaded. */
@ -303,6 +309,12 @@ void AnySceneImporterTest::propagateFileCallback() {
CORRADE_VERIFY(!importer->isOpened());
}
void AnySceneImporterTest::sceneFieldNameNoFileOpened() {
}
void AnySceneImporterTest::meshAttributeNameNoFileOpened() {
}
}}}}
CORRADE_TEST_MAIN(Magnum::Trade::Test::AnySceneImporterTest)

Loading…
Cancel
Save