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);
}
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::doImage2DLevelCount(UnsignedInt id) { return _in->image2DLevelCount(id); }
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,

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
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<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 doImage2DLevelCount(UnsignedInt id) 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;
};

34
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<Containers::ArrayView<const char>>(*callback)(const std::string&, InputFileCallbackPolicy, Containers::Array<char>&);
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))

Loading…
Cancel
Save