diff --git a/src/MagnumPlugins/AnyImageImporter/AnyImageImporter.cpp b/src/MagnumPlugins/AnyImageImporter/AnyImageImporter.cpp index 097a41465..cf585340d 100644 --- a/src/MagnumPlugins/AnyImageImporter/AnyImageImporter.cpp +++ b/src/MagnumPlugins/AnyImageImporter/AnyImageImporter.cpp @@ -252,12 +252,24 @@ void AnyImageImporter::doOpenData(Containers::ArrayView data) { _in = std::move(importer); } +UnsignedInt AnyImageImporter::doImage1DCount() const { return _in->image1DCount(); } + +UnsignedInt AnyImageImporter::doImage1DLevelCount(UnsignedInt id) { return _in->image1DLevelCount(id); } + +Containers::Optional AnyImageImporter::doImage1D(const UnsignedInt id, const UnsignedInt level) { return _in->image1D(id, level); } + UnsignedInt AnyImageImporter::doImage2DCount() const { return _in->image2DCount(); } UnsignedInt AnyImageImporter::doImage2DLevelCount(UnsignedInt id) { return _in->image2DLevelCount(id); } Containers::Optional AnyImageImporter::doImage2D(const UnsignedInt id, const UnsignedInt level) { return _in->image2D(id, level); } +UnsignedInt AnyImageImporter::doImage3DCount() const { return _in->image3DCount(); } + +UnsignedInt AnyImageImporter::doImage3DLevelCount(UnsignedInt id) { return _in->image3DLevelCount(id); } + +Containers::Optional AnyImageImporter::doImage3D(const UnsignedInt id, const UnsignedInt level) { return _in->image3D(id, level); } + }} CORRADE_PLUGIN_REGISTER(AnyImageImporter, Magnum::Trade::AnyImageImporter, diff --git a/src/MagnumPlugins/AnyImageImporter/AnyImageImporter.h b/src/MagnumPlugins/AnyImageImporter/AnyImageImporter.h index abbbb5c63..59c306756 100644 --- a/src/MagnumPlugins/AnyImageImporter/AnyImageImporter.h +++ b/src/MagnumPlugins/AnyImageImporter/AnyImageImporter.h @@ -138,10 +138,11 @@ that, flags set via @ref setFlags() and options set through warning emitted in case given option is not present in the default configuration of the target plugin. -Calls to the @ref image2DCount(), @ref image2DLevelCount() and @ref image2D() -functions are then proxied to the concrete implementation. The @ref close() -function closes and discards the internally instantiated plugin; -@ref isOpened() works as usual. +Calls to the @ref image1DCount() / @ref image2DCount() / @ref image3DCount(), +@ref doImage1DLevelCount() / @ref image2DLevelCount() / @ref image3DLevelCount() +and @ref image1D() / @ref image2D() / @ref image3D() functions are then proxied +to the concrete implementation. The @ref close() function closes and discards +the internally instantiated plugin; @ref isOpened() works as usual. */ class MAGNUM_ANYIMAGEIMPORTER_EXPORT AnyImageImporter: public AbstractImporter { public: @@ -177,10 +178,18 @@ class MAGNUM_ANYIMAGEIMPORTER_EXPORT AnyImageImporter: public AbstractImporter { MAGNUM_ANYIMAGEIMPORTER_LOCAL void doOpenFile(const std::string& filename) override; MAGNUM_ANYIMAGEIMPORTER_LOCAL void doOpenData(Containers::ArrayView data) override; + MAGNUM_ANYIMAGEIMPORTER_LOCAL UnsignedInt doImage1DCount() const override; + MAGNUM_ANYIMAGEIMPORTER_LOCAL UnsignedInt doImage1DLevelCount(UnsignedInt id) override; + MAGNUM_ANYIMAGEIMPORTER_LOCAL Containers::Optional doImage1D(UnsignedInt id, UnsignedInt level) override; + MAGNUM_ANYIMAGEIMPORTER_LOCAL UnsignedInt doImage2DCount() const override; MAGNUM_ANYIMAGEIMPORTER_LOCAL UnsignedInt doImage2DLevelCount(UnsignedInt id) override; MAGNUM_ANYIMAGEIMPORTER_LOCAL Containers::Optional doImage2D(UnsignedInt id, UnsignedInt level) override; + MAGNUM_ANYIMAGEIMPORTER_LOCAL UnsignedInt doImage3DCount() const override; + MAGNUM_ANYIMAGEIMPORTER_LOCAL UnsignedInt doImage3DLevelCount(UnsignedInt id) override; + MAGNUM_ANYIMAGEIMPORTER_LOCAL Containers::Optional doImage3D(UnsignedInt id, UnsignedInt level) override; + Containers::Pointer _in; }; diff --git a/src/MagnumPlugins/AnyImageImporter/Test/AnyImageImporterTest.cpp b/src/MagnumPlugins/AnyImageImporter/Test/AnyImageImporterTest.cpp index c57a205a4..8e57cc9d2 100644 --- a/src/MagnumPlugins/AnyImageImporter/Test/AnyImageImporterTest.cpp +++ b/src/MagnumPlugins/AnyImageImporter/Test/AnyImageImporterTest.cpp @@ -45,7 +45,9 @@ namespace Magnum { namespace Trade { namespace Test { namespace { struct AnyImageImporterTest: TestSuite::Tester { explicit AnyImageImporterTest(); - void load(); + void load1D(); + void load2D(); + void load3D(); void detect(); void unknownExtension(); @@ -72,7 +74,7 @@ constexpr struct { const char* filename; Containers::Optional>(*callback)(const std::string&, InputFileCallbackPolicy, Containers::Array&); const char* messageFunctionName; -} LoadData[]{ +} Load2DData[]{ {"TGA", TGA_FILE, nullptr, "openFile"}, {"TGA data", TGA_FILE, fileCallback, "openData"} }; @@ -134,8 +136,12 @@ constexpr struct { }; AnyImageImporterTest::AnyImageImporterTest() { - addInstancedTests({&AnyImageImporterTest::load}, - Containers::arraySize(LoadData)); + addTests({&AnyImageImporterTest::load1D}); + + addInstancedTests({&AnyImageImporterTest::load2D}, + Containers::arraySize(Load2DData)); + + addTests({&AnyImageImporterTest::load3D}); addInstancedTests({&AnyImageImporterTest::detect}, Containers::arraySize(DetectData)); @@ -148,13 +154,13 @@ AnyImageImporterTest::AnyImageImporterTest() { addTests({&AnyImageImporterTest::emptyData}); addInstancedTests({&AnyImageImporterTest::propagateFlags}, - Containers::arraySize(LoadData)); + Containers::arraySize(Load2DData)); addInstancedTests({&AnyImageImporterTest::propagateConfiguration}, Containers::arraySize(PropagateConfigurationData)); addInstancedTests({&AnyImageImporterTest::propagateConfigurationUnknown}, - Containers::arraySize(LoadData)); + Containers::arraySize(Load2DData)); /* Load the plugin directly from the build tree. Otherwise it's static and already loaded. */ @@ -167,8 +173,12 @@ AnyImageImporterTest::AnyImageImporterTest() { #endif } -void AnyImageImporterTest::load() { - auto&& data = LoadData[testCaseInstanceId()]; +void AnyImageImporterTest::load1D() { + CORRADE_SKIP("No file formats supporting 1D images yet."); +} + +void AnyImageImporterTest::load2D() { + auto&& data = Load2DData[testCaseInstanceId()]; setTestCaseDescription(data.name); if(!(_manager.loadState("TgaImporter") & PluginManager::LoadState::Loaded)) @@ -190,6 +200,10 @@ void AnyImageImporterTest::load() { CORRADE_VERIFY(!importer->isOpened()); } +void AnyImageImporterTest::load3D() { + CORRADE_SKIP("No file formats supporting 3D images yet."); +} + void AnyImageImporterTest::detect() { auto&& data = DetectData[testCaseInstanceId()]; setTestCaseDescription(data.name); @@ -246,7 +260,7 @@ void AnyImageImporterTest::emptyData() { } void AnyImageImporterTest::propagateFlags() { - auto&& data = LoadData[testCaseInstanceId()]; + auto&& data = Load2DData[testCaseInstanceId()]; setTestCaseDescription(data.name); if(!(_manager.loadState("TgaImporter") & PluginManager::LoadState::Loaded)) @@ -304,7 +318,7 @@ void AnyImageImporterTest::propagateConfiguration() { } void AnyImageImporterTest::propagateConfigurationUnknown() { - auto&& data = LoadData[testCaseInstanceId()]; + auto&& data = Load2DData[testCaseInstanceId()]; setTestCaseDescription(data.name); if(!(_manager.loadState("TgaImporter") & PluginManager::LoadState::Loaded))