Browse Source

AnyImageImporter: proxy 1D and 3D images as well.

There's no format/plugin that would support these at the moment, so just
placeholder test cases for now.
pull/529/head
Vladimír Vondruš 5 years ago
parent
commit
c30bfa76ab
  1. 12
      src/MagnumPlugins/AnyImageImporter/AnyImageImporter.cpp
  2. 17
      src/MagnumPlugins/AnyImageImporter/AnyImageImporter.h
  3. 34
      src/MagnumPlugins/AnyImageImporter/Test/AnyImageImporterTest.cpp

12
src/MagnumPlugins/AnyImageImporter/AnyImageImporter.cpp

@ -252,12 +252,24 @@ void AnyImageImporter::doOpenData(Containers::ArrayView<const char> data) {
_in = std::move(importer); _in = std::move(importer);
} }
UnsignedInt AnyImageImporter::doImage1DCount() const { return _in->image1DCount(); }
UnsignedInt AnyImageImporter::doImage1DLevelCount(UnsignedInt id) { return _in->image1DLevelCount(id); }
Containers::Optional<ImageData1D> AnyImageImporter::doImage1D(const UnsignedInt id, const UnsignedInt level) { return _in->image1D(id, level); }
UnsignedInt AnyImageImporter::doImage2DCount() const { return _in->image2DCount(); } UnsignedInt AnyImageImporter::doImage2DCount() const { return _in->image2DCount(); }
UnsignedInt AnyImageImporter::doImage2DLevelCount(UnsignedInt id) { return _in->image2DLevelCount(id); } UnsignedInt AnyImageImporter::doImage2DLevelCount(UnsignedInt id) { return _in->image2DLevelCount(id); }
Containers::Optional<ImageData2D> AnyImageImporter::doImage2D(const UnsignedInt id, const UnsignedInt level) { return _in->image2D(id, level); } Containers::Optional<ImageData2D> 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<ImageData3D> AnyImageImporter::doImage3D(const UnsignedInt id, const UnsignedInt level) { return _in->image3D(id, level); }
}} }}
CORRADE_PLUGIN_REGISTER(AnyImageImporter, Magnum::Trade::AnyImageImporter, CORRADE_PLUGIN_REGISTER(AnyImageImporter, Magnum::Trade::AnyImageImporter,

17
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 warning emitted in case given option is not present in the default
configuration of the target plugin. configuration of the target plugin.
Calls to the @ref image2DCount(), @ref image2DLevelCount() and @ref image2D() Calls to the @ref image1DCount() / @ref image2DCount() / @ref image3DCount(),
functions are then proxied to the concrete implementation. The @ref close() @ref doImage1DLevelCount() / @ref image2DLevelCount() / @ref image3DLevelCount()
function closes and discards the internally instantiated plugin; and @ref image1D() / @ref image2D() / @ref image3D() functions are then proxied
@ref isOpened() works as usual. 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 { class MAGNUM_ANYIMAGEIMPORTER_EXPORT AnyImageImporter: public AbstractImporter {
public: 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 doOpenFile(const std::string& filename) override;
MAGNUM_ANYIMAGEIMPORTER_LOCAL void doOpenData(Containers::ArrayView<const char> data) override; MAGNUM_ANYIMAGEIMPORTER_LOCAL void doOpenData(Containers::ArrayView<const char> data) override;
MAGNUM_ANYIMAGEIMPORTER_LOCAL UnsignedInt doImage1DCount() const override;
MAGNUM_ANYIMAGEIMPORTER_LOCAL UnsignedInt doImage1DLevelCount(UnsignedInt id) override;
MAGNUM_ANYIMAGEIMPORTER_LOCAL Containers::Optional<ImageData1D> doImage1D(UnsignedInt id, UnsignedInt level) override;
MAGNUM_ANYIMAGEIMPORTER_LOCAL UnsignedInt doImage2DCount() const override; MAGNUM_ANYIMAGEIMPORTER_LOCAL UnsignedInt doImage2DCount() const override;
MAGNUM_ANYIMAGEIMPORTER_LOCAL UnsignedInt doImage2DLevelCount(UnsignedInt id) override; MAGNUM_ANYIMAGEIMPORTER_LOCAL UnsignedInt doImage2DLevelCount(UnsignedInt id) override;
MAGNUM_ANYIMAGEIMPORTER_LOCAL Containers::Optional<ImageData2D> doImage2D(UnsignedInt id, UnsignedInt level) override; MAGNUM_ANYIMAGEIMPORTER_LOCAL Containers::Optional<ImageData2D> 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<ImageData3D> doImage3D(UnsignedInt id, UnsignedInt level) override;
Containers::Pointer<AbstractImporter> _in; Containers::Pointer<AbstractImporter> _in;
}; };

34
src/MagnumPlugins/AnyImageImporter/Test/AnyImageImporterTest.cpp

@ -45,7 +45,9 @@ namespace Magnum { namespace Trade { namespace Test { namespace {
struct AnyImageImporterTest: TestSuite::Tester { struct AnyImageImporterTest: TestSuite::Tester {
explicit AnyImageImporterTest(); explicit AnyImageImporterTest();
void load(); void load1D();
void load2D();
void load3D();
void detect(); void detect();
void unknownExtension(); void unknownExtension();
@ -72,7 +74,7 @@ constexpr struct {
const char* filename; const char* filename;
Containers::Optional<Containers::ArrayView<const char>>(*callback)(const std::string&, InputFileCallbackPolicy, Containers::Array<char>&); Containers::Optional<Containers::ArrayView<const char>>(*callback)(const std::string&, InputFileCallbackPolicy, Containers::Array<char>&);
const char* messageFunctionName; const char* messageFunctionName;
} LoadData[]{ } Load2DData[]{
{"TGA", TGA_FILE, nullptr, "openFile"}, {"TGA", TGA_FILE, nullptr, "openFile"},
{"TGA data", TGA_FILE, fileCallback, "openData"} {"TGA data", TGA_FILE, fileCallback, "openData"}
}; };
@ -134,8 +136,12 @@ constexpr struct {
}; };
AnyImageImporterTest::AnyImageImporterTest() { AnyImageImporterTest::AnyImageImporterTest() {
addInstancedTests({&AnyImageImporterTest::load}, addTests({&AnyImageImporterTest::load1D});
Containers::arraySize(LoadData));
addInstancedTests({&AnyImageImporterTest::load2D},
Containers::arraySize(Load2DData));
addTests({&AnyImageImporterTest::load3D});
addInstancedTests({&AnyImageImporterTest::detect}, addInstancedTests({&AnyImageImporterTest::detect},
Containers::arraySize(DetectData)); Containers::arraySize(DetectData));
@ -148,13 +154,13 @@ AnyImageImporterTest::AnyImageImporterTest() {
addTests({&AnyImageImporterTest::emptyData}); addTests({&AnyImageImporterTest::emptyData});
addInstancedTests({&AnyImageImporterTest::propagateFlags}, addInstancedTests({&AnyImageImporterTest::propagateFlags},
Containers::arraySize(LoadData)); Containers::arraySize(Load2DData));
addInstancedTests({&AnyImageImporterTest::propagateConfiguration}, addInstancedTests({&AnyImageImporterTest::propagateConfiguration},
Containers::arraySize(PropagateConfigurationData)); Containers::arraySize(PropagateConfigurationData));
addInstancedTests({&AnyImageImporterTest::propagateConfigurationUnknown}, addInstancedTests({&AnyImageImporterTest::propagateConfigurationUnknown},
Containers::arraySize(LoadData)); Containers::arraySize(Load2DData));
/* Load the plugin directly from the build tree. Otherwise it's static and /* Load the plugin directly from the build tree. Otherwise it's static and
already loaded. */ already loaded. */
@ -167,8 +173,12 @@ AnyImageImporterTest::AnyImageImporterTest() {
#endif #endif
} }
void AnyImageImporterTest::load() { void AnyImageImporterTest::load1D() {
auto&& data = LoadData[testCaseInstanceId()]; CORRADE_SKIP("No file formats supporting 1D images yet.");
}
void AnyImageImporterTest::load2D() {
auto&& data = Load2DData[testCaseInstanceId()];
setTestCaseDescription(data.name); setTestCaseDescription(data.name);
if(!(_manager.loadState("TgaImporter") & PluginManager::LoadState::Loaded)) if(!(_manager.loadState("TgaImporter") & PluginManager::LoadState::Loaded))
@ -190,6 +200,10 @@ void AnyImageImporterTest::load() {
CORRADE_VERIFY(!importer->isOpened()); CORRADE_VERIFY(!importer->isOpened());
} }
void AnyImageImporterTest::load3D() {
CORRADE_SKIP("No file formats supporting 3D images yet.");
}
void AnyImageImporterTest::detect() { void AnyImageImporterTest::detect() {
auto&& data = DetectData[testCaseInstanceId()]; auto&& data = DetectData[testCaseInstanceId()];
setTestCaseDescription(data.name); setTestCaseDescription(data.name);
@ -246,7 +260,7 @@ void AnyImageImporterTest::emptyData() {
} }
void AnyImageImporterTest::propagateFlags() { void AnyImageImporterTest::propagateFlags() {
auto&& data = LoadData[testCaseInstanceId()]; auto&& data = Load2DData[testCaseInstanceId()];
setTestCaseDescription(data.name); setTestCaseDescription(data.name);
if(!(_manager.loadState("TgaImporter") & PluginManager::LoadState::Loaded)) if(!(_manager.loadState("TgaImporter") & PluginManager::LoadState::Loaded))
@ -304,7 +318,7 @@ void AnyImageImporterTest::propagateConfiguration() {
} }
void AnyImageImporterTest::propagateConfigurationUnknown() { void AnyImageImporterTest::propagateConfigurationUnknown() {
auto&& data = LoadData[testCaseInstanceId()]; auto&& data = Load2DData[testCaseInstanceId()];
setTestCaseDescription(data.name); setTestCaseDescription(data.name);
if(!(_manager.loadState("TgaImporter") & PluginManager::LoadState::Loaded)) if(!(_manager.loadState("TgaImporter") & PluginManager::LoadState::Loaded))

Loading…
Cancel
Save