From 54d0b999b15f1ce8d0623e48c2aec11a08f25852 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Mon, 22 Aug 2022 14:17:10 +0200 Subject: [PATCH] Trade: un-combinatorially-explode ImageConverterFeatures. Unlike most other options, where a plugin can support 3D but not 2D or compressed but not uncompressed data, the "levels" option is orthogonal to the rest -- if a format supports multi-level data, it obviously also supports a case where there is just a single level, and if it supports multi-level images, then it likely supports them for 1D, 2D and 3D, not just some. I used the same reasoning for the new SceneConverterFeatures interfaces already, just "backporting" it here as well. The bit pattern actually followed this already, but for some reason I still went ahead and stamped out all possible combinations. Because of that, nothing really changes on the ABI side either and the deprecated aliases are now exactly as they were before, so no need to bump the plugin interface version. --- src/Magnum/Trade/AbstractImageConverter.cpp | 119 ++-- src/Magnum/Trade/AbstractImageConverter.h | 525 ++++++++---------- .../Trade/Test/AbstractImageConverterTest.cpp | 488 ++++++++++++---- src/Magnum/Trade/imageconverter.cpp | 6 +- .../AnyImageConverter/AnyImageConverter.cpp | 7 +- 5 files changed, 672 insertions(+), 473 deletions(-) diff --git a/src/Magnum/Trade/AbstractImageConverter.cpp b/src/Magnum/Trade/AbstractImageConverter.cpp index 29f12b250..56068481c 100644 --- a/src/Magnum/Trade/AbstractImageConverter.cpp +++ b/src/Magnum/Trade/AbstractImageConverter.cpp @@ -343,7 +343,7 @@ AbstractImageConverter::convertToData(const ImageView1D& image) { } Containers::Optional> AbstractImageConverter::doConvertToData(const ImageView1D& image) { - CORRADE_ASSERT(features() >= ImageConverterFeature::ConvertLevels1DToData, + CORRADE_ASSERT(features() >= ImageConverterFeature::Levels, "Trade::AbstractImageConverter::convertToData(): 1D image conversion advertised but not implemented", {}); return doConvertToData(Containers::arrayView({image})); @@ -376,7 +376,7 @@ AbstractImageConverter::convertToData(const ImageView2D& image) { } Containers::Optional> AbstractImageConverter::doConvertToData(const ImageView2D& image) { - CORRADE_ASSERT(features() >= ImageConverterFeature::ConvertLevels2DToData, + CORRADE_ASSERT(features() >= ImageConverterFeature::Levels, "Trade::AbstractImageConverter::convertToData(): 2D image conversion advertised but not implemented", {}); return doConvertToData(Containers::arrayView({image})); @@ -416,7 +416,7 @@ AbstractImageConverter::convertToData(const ImageView3D& image) { } Containers::Optional> AbstractImageConverter::doConvertToData(const ImageView3D& image) { - CORRADE_ASSERT(features() >= ImageConverterFeature::ConvertLevels3DToData, + CORRADE_ASSERT(features() >= ImageConverterFeature::Levels, "Trade::AbstractImageConverter::convertToData(): 3D image conversion advertised but not implemented", {}); return doConvertToData(Containers::arrayView({image})); @@ -449,7 +449,7 @@ AbstractImageConverter::convertToData(const CompressedImageView1D& image) { } Containers::Optional> AbstractImageConverter::doConvertToData(const CompressedImageView1D& image) { - CORRADE_ASSERT(features() >= ImageConverterFeature::ConvertCompressedLevels1DToData, + CORRADE_ASSERT(features() >= ImageConverterFeature::Levels, "Trade::AbstractImageConverter::convertToData(): compressed 1D image conversion advertised but not implemented", {}); return doConvertToData(Containers::arrayView({image})); @@ -482,7 +482,7 @@ AbstractImageConverter::convertToData(const CompressedImageView2D& image) { } Containers::Optional> AbstractImageConverter::doConvertToData(const CompressedImageView2D& image) { - CORRADE_ASSERT(features() >= ImageConverterFeature::ConvertCompressedLevels2DToData, + CORRADE_ASSERT(features() >= ImageConverterFeature::Levels, "Trade::AbstractImageConverter::convertToData(): compressed 2D image conversion advertised but not implemented", {}); return doConvertToData(Containers::arrayView({image})); @@ -522,7 +522,7 @@ AbstractImageConverter::convertToData(const CompressedImageView3D& image) { } Containers::Optional> AbstractImageConverter::doConvertToData(const CompressedImageView3D& image) { - CORRADE_ASSERT(features() >= ImageConverterFeature::ConvertCompressedLevels3DToData, + CORRADE_ASSERT(features() >= ImageConverterFeature::Levels, "Trade::AbstractImageConverter::convertToData(): compressed 3D image conversion advertised but not implemented", {}); return doConvertToData(Containers::arrayView({image})); @@ -623,7 +623,7 @@ Containers::Optional> Implementation::ImageConverterOptionalButAlsoArray #endif AbstractImageConverter::convertToData(const Containers::ArrayView imageLevels) { - CORRADE_ASSERT(features() >= ImageConverterFeature::ConvertLevels1DToData, + CORRADE_ASSERT(features() >= ImageConverterFeature::Levels, "Trade::AbstractImageConverter::convertToData(): multi-level 1D image conversion not supported", {}); #ifndef CORRADE_NO_ASSERT @@ -662,7 +662,7 @@ Containers::Optional> Implementation::ImageConverterOptionalButAlsoArray #endif AbstractImageConverter::convertToData(const Containers::ArrayView imageLevels) { - CORRADE_ASSERT(features() >= ImageConverterFeature::ConvertLevels2DToData, + CORRADE_ASSERT(features() >= ImageConverterFeature::Levels, "Trade::AbstractImageConverter::convertToData(): multi-level 2D image conversion not supported", {}); #ifndef CORRADE_NO_ASSERT @@ -701,7 +701,7 @@ Containers::Optional> Implementation::ImageConverterOptionalButAlsoArray #endif AbstractImageConverter::convertToData(const Containers::ArrayView imageLevels) { - CORRADE_ASSERT(features() >= ImageConverterFeature::ConvertLevels3DToData, + CORRADE_ASSERT(features() >= ImageConverterFeature::Levels, "Trade::AbstractImageConverter::convertToData(): multi-level 3D image conversion not supported", {}); #ifndef CORRADE_NO_ASSERT @@ -740,7 +740,7 @@ Containers::Optional> Implementation::ImageConverterOptionalButAlsoArray #endif AbstractImageConverter::convertToData(const Containers::ArrayView imageLevels) { - CORRADE_ASSERT(features() >= ImageConverterFeature::ConvertCompressedLevels1DToData, + CORRADE_ASSERT(features() >= ImageConverterFeature::Levels, "Trade::AbstractImageConverter::convertToData(): multi-level compressed 1D image conversion not supported", {}); #ifndef CORRADE_NO_ASSERT @@ -779,7 +779,7 @@ Containers::Optional> Implementation::ImageConverterOptionalButAlsoArray #endif AbstractImageConverter::convertToData(const Containers::ArrayView imageLevels) { - CORRADE_ASSERT(features() >= ImageConverterFeature::ConvertCompressedLevels2DToData, + CORRADE_ASSERT(features() >= ImageConverterFeature::Levels, "Trade::AbstractImageConverter::convertToData(): multi-level compressed 2D image conversion not supported", {}); #ifndef CORRADE_NO_ASSERT @@ -818,7 +818,7 @@ Containers::Optional> Implementation::ImageConverterOptionalButAlsoArray #endif AbstractImageConverter::convertToData(const Containers::ArrayView imageLevels) { - CORRADE_ASSERT(features() >= ImageConverterFeature::ConvertCompressedLevels3DToData, + CORRADE_ASSERT(features() >= ImageConverterFeature::Levels, "Trade::AbstractImageConverter::convertToData(): multi-level compressed 3D image conversion not supported", {}); #ifndef CORRADE_NO_ASSERT @@ -868,7 +868,7 @@ bool AbstractImageConverter::doConvertToFile(const ImageView1D& image, const Con /* Prefer to go through the ToFile variant instead of ToData assuming that it could have a more memory-efficient implementation than having to materialize the whole output in memory first */ - if(features() >= ImageConverterFeature::ConvertLevels1DToFile) + if(features() >= ImageConverterFeature::Levels) return doConvertToFile(Containers::arrayView({image}), filename); CORRADE_ASSERT(features() >= ImageConverterFeature::Convert1DToData, "Trade::AbstractImageConverter::convertToFile(): 1D image conversion advertised but not implemented", false); @@ -902,7 +902,7 @@ bool AbstractImageConverter::doConvertToFile(const ImageView2D& image, const Con /* Prefer to go through the ToFile variant instead of ToData assuming that it could have a more memory-efficient implementation than having to materialize the whole output in memory first */ - if(features() >= ImageConverterFeature::ConvertLevels2DToFile) + if(features() >= ImageConverterFeature::Levels) return doConvertToFile(Containers::arrayView({image}), filename); CORRADE_ASSERT(features() >= ImageConverterFeature::Convert2DToData, "Trade::AbstractImageConverter::convertToFile(): 2D image conversion advertised but not implemented", false); @@ -942,7 +942,7 @@ bool AbstractImageConverter::doConvertToFile(const ImageView3D& image, const Con /* Prefer to go through the ToFile variant instead of ToData assuming that it could have a more memory-efficient implementation than having to materialize the whole output in memory first */ - if(features() >= ImageConverterFeature::ConvertLevels3DToFile) + if(features() >= ImageConverterFeature::Levels) return doConvertToFile(Containers::arrayView({image}), filename); CORRADE_ASSERT(features() >= ImageConverterFeature::Convert3DToData, "Trade::AbstractImageConverter::convertToFile(): 3D image conversion advertised but not implemented", false); @@ -976,7 +976,7 @@ bool AbstractImageConverter::doConvertToFile(const CompressedImageView1D& image, /* Prefer to go through the ToFile variant instead of ToData assuming that it could have a more memory-efficient implementation than having to materialize the whole output in memory first */ - if(features() >= ImageConverterFeature::ConvertCompressedLevels1DToFile) + if(features() >= ImageConverterFeature::Levels) return doConvertToFile(Containers::arrayView({image}), filename); CORRADE_ASSERT(features() >= ImageConverterFeature::ConvertCompressed1DToData, "Trade::AbstractImageConverter::convertToFile(): compressed 1D image conversion advertised but not implemented", false); @@ -1010,7 +1010,7 @@ bool AbstractImageConverter::doConvertToFile(const CompressedImageView2D& image, /* Prefer to go through the ToFile variant instead of ToData assuming that it could have a more memory-efficient implementation than having to materialize the whole output in memory first */ - if(features() >= ImageConverterFeature::ConvertCompressedLevels2DToFile) + if(features() >= ImageConverterFeature::Levels) return doConvertToFile(Containers::arrayView({image}), filename); CORRADE_ASSERT(features() >= ImageConverterFeature::ConvertCompressed2DToData, "Trade::AbstractImageConverter::convertToFile(): compressed 2D image conversion advertised but not implemented", false); @@ -1050,7 +1050,7 @@ bool AbstractImageConverter::doConvertToFile(const CompressedImageView3D& image, /* Prefer to go through the ToFile variant instead of ToData assuming that it could have a more memory-efficient implementation than having to materialize the whole output in memory first */ - if(features() >= ImageConverterFeature::ConvertCompressedLevels3DToFile) + if(features() >= ImageConverterFeature::Levels) return doConvertToFile(Containers::arrayView({image}), filename); CORRADE_ASSERT(features() >= ImageConverterFeature::ConvertCompressed3DToData, "Trade::AbstractImageConverter::convertToFile(): compressed 3D image conversion advertised but not implemented", false); @@ -1086,7 +1086,7 @@ bool AbstractImageConverter::convertToFile(const ImageData3D& image, const Conta } bool AbstractImageConverter::convertToFile(const Containers::ArrayView imageLevels, const Containers::StringView filename) { - CORRADE_ASSERT(features() & ImageConverterFeature::ConvertLevels1DToFile, + CORRADE_ASSERT(features() >= (ImageConverterFeature::Convert1DToFile|ImageConverterFeature::Levels), "Trade::AbstractImageConverter::convertToFile(): multi-level 1D image conversion not supported", {}); #ifndef CORRADE_NO_ASSERT @@ -1103,7 +1103,7 @@ bool AbstractImageConverter::convertToFile(const std::initializer_list imageLevels, const Containers::StringView filename) { - CORRADE_ASSERT(features() >= ImageConverterFeature::ConvertLevels1DToData, "Trade::AbstractImageConverter::convertToFile(): multi-level 1D image conversion advertised but not implemented", false); + CORRADE_ASSERT(features() >= ImageConverterFeature::Convert1DToData, "Trade::AbstractImageConverter::convertToFile(): multi-level 1D image conversion advertised but not implemented", false); const Containers::Optional> data = doConvertToData(imageLevels); /* No deleter checks as it doesn't matter here */ @@ -1118,7 +1118,7 @@ bool AbstractImageConverter::doConvertToFile(const Containers::ArrayView imageLevels, const Containers::StringView filename) { - CORRADE_ASSERT(features() & ImageConverterFeature::ConvertLevels2DToFile, + CORRADE_ASSERT(features() >= (ImageConverterFeature::Convert2DToFile|ImageConverterFeature::Levels), "Trade::AbstractImageConverter::convertToFile(): multi-level 2D image conversion not supported", {}); #ifndef CORRADE_NO_ASSERT @@ -1135,7 +1135,7 @@ bool AbstractImageConverter::convertToFile(const std::initializer_list imageLevels, const Containers::StringView filename) { - CORRADE_ASSERT(features() >= ImageConverterFeature::ConvertLevels2DToData, "Trade::AbstractImageConverter::convertToFile(): multi-level 2D image conversion advertised but not implemented", false); + CORRADE_ASSERT(features() >= ImageConverterFeature::Convert2DToData, "Trade::AbstractImageConverter::convertToFile(): multi-level 2D image conversion advertised but not implemented", false); const Containers::Optional> data = doConvertToData(imageLevels); /* No deleter checks as it doesn't matter here */ @@ -1150,7 +1150,7 @@ bool AbstractImageConverter::doConvertToFile(const Containers::ArrayView imageLevels, const Containers::StringView filename) { - CORRADE_ASSERT(features() & ImageConverterFeature::ConvertLevels3DToFile, + CORRADE_ASSERT(features() >= (ImageConverterFeature::Convert3DToFile|ImageConverterFeature::Levels), "Trade::AbstractImageConverter::convertToFile(): multi-level 3D image conversion not supported", {}); #ifndef CORRADE_NO_ASSERT @@ -1167,7 +1167,7 @@ bool AbstractImageConverter::convertToFile(const std::initializer_list imageLevels, const Containers::StringView filename) { - CORRADE_ASSERT(features() >= ImageConverterFeature::ConvertLevels3DToData, "Trade::AbstractImageConverter::convertToFile(): multi-level 3D image conversion advertised but not implemented", false); + CORRADE_ASSERT(features() >= ImageConverterFeature::Convert3DToData, "Trade::AbstractImageConverter::convertToFile(): multi-level 3D image conversion advertised but not implemented", false); const Containers::Optional> data = doConvertToData(imageLevels); /* No deleter checks as it doesn't matter here */ @@ -1182,7 +1182,7 @@ bool AbstractImageConverter::doConvertToFile(const Containers::ArrayView imageLevels, const Containers::StringView filename) { - CORRADE_ASSERT(features() & ImageConverterFeature::ConvertCompressedLevels1DToFile, + CORRADE_ASSERT(features() >= (ImageConverterFeature::ConvertCompressed1DToFile|ImageConverterFeature::Levels), "Trade::AbstractImageConverter::convertToFile(): multi-level compressed 1D image conversion not supported", {}); #ifndef CORRADE_NO_ASSERT @@ -1199,7 +1199,7 @@ bool AbstractImageConverter::convertToFile(const std::initializer_list imageLevels, Containers::StringView filename) { - CORRADE_ASSERT(features() >= ImageConverterFeature::ConvertCompressedLevels1DToData, "Trade::AbstractImageConverter::convertToFile(): multi-level compressed 1D image conversion advertised but not implemented", false); + CORRADE_ASSERT(features() >= ImageConverterFeature::ConvertCompressed1DToData, "Trade::AbstractImageConverter::convertToFile(): multi-level compressed 1D image conversion advertised but not implemented", false); const Containers::Optional> data = doConvertToData(imageLevels); /* No deleter checks as it doesn't matter here */ @@ -1214,7 +1214,7 @@ bool AbstractImageConverter::doConvertToFile(const Containers::ArrayView imageLevels, const Containers::StringView filename) { - CORRADE_ASSERT(features() & ImageConverterFeature::ConvertCompressedLevels2DToFile, + CORRADE_ASSERT(features() >= (ImageConverterFeature::ConvertCompressed2DToFile|ImageConverterFeature::Levels), "Trade::AbstractImageConverter::convertToFile(): multi-level compressed 2D image conversion not supported", {}); #ifndef CORRADE_NO_ASSERT @@ -1231,7 +1231,7 @@ bool AbstractImageConverter::convertToFile(const std::initializer_list imageLevels, Containers::StringView filename) { - CORRADE_ASSERT(features() >= ImageConverterFeature::ConvertCompressedLevels2DToData, "Trade::AbstractImageConverter::convertToFile(): multi-level compressed 2D image conversion advertised but not implemented", false); + CORRADE_ASSERT(features() >= ImageConverterFeature::ConvertCompressed2DToData, "Trade::AbstractImageConverter::convertToFile(): multi-level compressed 2D image conversion advertised but not implemented", false); const Containers::Optional> data = doConvertToData(imageLevels); /* No deleter checks as it doesn't matter here */ @@ -1246,7 +1246,7 @@ bool AbstractImageConverter::doConvertToFile(const Containers::ArrayView imageLevels, const Containers::StringView filename) { - CORRADE_ASSERT(features() & ImageConverterFeature::ConvertCompressedLevels3DToFile, + CORRADE_ASSERT(features() >= (ImageConverterFeature::ConvertCompressed3DToFile|ImageConverterFeature::Levels), "Trade::AbstractImageConverter::convertToFile(): multi-level compressed 3D image conversion not supported", {}); #ifndef CORRADE_NO_ASSERT @@ -1263,7 +1263,7 @@ bool AbstractImageConverter::convertToFile(const std::initializer_list imageLevels, Containers::StringView filename) { - CORRADE_ASSERT(features() >= ImageConverterFeature::ConvertCompressedLevels3DToData, "Trade::AbstractImageConverter::convertToFile(): multi-level compressed 3D image conversion advertised but not implemented", false); + CORRADE_ASSERT(features() >= ImageConverterFeature::ConvertCompressed3DToData, "Trade::AbstractImageConverter::convertToFile(): multi-level compressed 3D image conversion advertised but not implemented", false); const Containers::Optional> data = doConvertToData(imageLevels); /* No deleter checks as it doesn't matter here */ @@ -1278,6 +1278,13 @@ bool AbstractImageConverter::doConvertToFile(const Containers::ArrayView(UnsignedInt(value)) << Debug::nospace << ")"; @@ -1328,22 +1344,6 @@ Debug& operator<<(Debug& debug, const ImageConverterFeatures value) { ImageConverterFeature::ConvertCompressed1D, ImageConverterFeature::ConvertCompressed2D, ImageConverterFeature::ConvertCompressed3D, - ImageConverterFeature::ConvertLevels1DToData, - ImageConverterFeature::ConvertLevels2DToData, - ImageConverterFeature::ConvertLevels3DToData, - ImageConverterFeature::ConvertCompressedLevels1DToData, - ImageConverterFeature::ConvertCompressedLevels2DToData, - ImageConverterFeature::ConvertCompressedLevels3DToData, - /* These 6 are implied by Convert[Compressed]LevelsToData, so have to - be after */ - ImageConverterFeature::ConvertLevels1DToFile, - ImageConverterFeature::ConvertLevels2DToFile, - ImageConverterFeature::ConvertLevels3DToFile, - ImageConverterFeature::ConvertCompressedLevels1DToFile, - ImageConverterFeature::ConvertCompressedLevels2DToFile, - ImageConverterFeature::ConvertCompressedLevels3DToFile, - /* These 12 are implied by Convert[Compressed]LevelsTo{File,Data}, so - have to be after */ ImageConverterFeature::Convert1DToData, ImageConverterFeature::Convert2DToData, ImageConverterFeature::Convert3DToData, @@ -1357,7 +1357,8 @@ Debug& operator<<(Debug& debug, const ImageConverterFeatures value) { ImageConverterFeature::Convert3DToFile, ImageConverterFeature::ConvertCompressed1DToFile, ImageConverterFeature::ConvertCompressed2DToFile, - ImageConverterFeature::ConvertCompressed3DToFile}); + ImageConverterFeature::ConvertCompressed3DToFile, + ImageConverterFeature::Levels}); } Debug& operator<<(Debug& debug, const ImageConverterFlag value) { diff --git a/src/Magnum/Trade/AbstractImageConverter.h b/src/Magnum/Trade/AbstractImageConverter.h index ae2f0a01e..fc819399a 100644 --- a/src/Magnum/Trade/AbstractImageConverter.h +++ b/src/Magnum/Trade/AbstractImageConverter.h @@ -242,112 +242,126 @@ enum class ImageConverterFeature: UnsignedInt { ConvertCompressed3DToData = ConvertCompressed3DToFile|(1 << 13), /** - * Convert a set of 1D image levels to a file with - * @ref AbstractImageConverter::convertToFile(Containers::ArrayView, Containers::StringView). - * Implies @ref ImageConverterFeature::Convert1DToFile. + * Convert multiple image levels with + * @ref AbstractImageConverter::convertToFile(Containers::ArrayView, Containers::StringView) / + * @ref AbstractImageConverter::convertToFile(Containers::ArrayView, Containers::StringView) + * if @ref ImageConverterFeature::Convert1DToFile / + * @relativeref{ImageConverterFeature,ConvertCompressed1DToFile} is also + * supported; with + * @ref AbstractImageConverter::convertToFile(Containers::ArrayView, Containers::StringView) / + * @ref AbstractImageConverter::convertToFile(Containers::ArrayView, Containers::StringView) + * if @ref ImageConverterFeature::Convert2DToFile / + * @relativeref{ImageConverterFeature,ConvertCompressed2DToFile} is also + * supported; with + * @ref AbstractImageConverter::convertToFile(Containers::ArrayView, Containers::StringView) / + * @ref AbstractImageConverter::convertToFile(Containers::ArrayView, Containers::StringView) + * if @ref ImageConverterFeature::Convert3DToFile / + * @relativeref{ImageConverterFeature,ConvertCompressed3DToFile} is also + * supported; with + * @ref AbstractImageConverter::convertToData(Containers::ArrayView) / + * @ref AbstractImageConverter::convertToData(Containers::ArrayView) + * if @ref ImageConverterFeature::Convert1DToData / + * @relativeref{ImageConverterFeature,ConvertCompressed1DToData} is also + * supported; with + * @ref AbstractImageConverter::convertToData(Containers::ArrayView) / + * @ref AbstractImageConverter::convertToData(Containers::ArrayView) + * if @ref ImageConverterFeature::Convert2DToData / + * @relativeref{ImageConverterFeature,ConvertCompressed2DToData} is also + * supported; with + * @ref AbstractImageConverter::convertToData(Containers::ArrayView) / + * @ref AbstractImageConverter::convertToData(Containers::ArrayView) + * if @ref ImageConverterFeature::Convert3DToData / + * @relativeref{ImageConverterFeature,ConvertCompressed3DToData} is also + * supported. * @m_since_latest */ - ConvertLevels1DToFile = Convert1DToFile|(1 << 14), + Levels = 1 << 14, + #ifdef MAGNUM_BUILD_DEPRECATED /** - * Convert a set of 2D image levels to a file with - * @ref AbstractImageConverter::convertToFile(Containers::ArrayView, Containers::StringView). - * Implies @ref ImageConverterFeature::Convert2DToFile. - * @m_since_latest + * @m_deprecated_since_latest Use + * @ref ImageConverterFeature::Convert1DToFile together with + * @relativeref{ImageConverterFeature,Levels} instead. */ - ConvertLevels2DToFile = Convert2DToFile|(1 << 14), + ConvertLevels1DToFile CORRADE_DEPRECATED_ENUM("use Convert1DToFile together with Levels instead") = Convert1DToFile|Levels, /** - * Convert a set of 3D image levels to a file with - * @ref AbstractImageConverter::convertToFile(Containers::ArrayView, Containers::StringView). - * Implies @ref ImageConverterFeature::Convert3DToFile. - * @m_since_latest + * @m_deprecated_since_latest Use + * @ref ImageConverterFeature::Convert2DToFile together with + * @relativeref{ImageConverterFeature,Levels} instead. */ - ConvertLevels3DToFile = Convert3DToFile|(1 << 14), + ConvertLevels2DToFile CORRADE_DEPRECATED_ENUM("use Convert2DToFile together with Levels instead") = Convert2DToFile|Levels, /** - * Convert a set of compressed 1D image levels to a file with - * @ref AbstractImageConverter::convertToFile(Containers::ArrayView, Containers::StringView). - * Implies @ref ImageConverterFeature::ConvertCompressed1DToFile. - * @m_since_latest + * @m_deprecated_since_latest Use + * @ref ImageConverterFeature::Convert3DToFile together with + * @relativeref{ImageConverterFeature,Levels} instead. */ - ConvertCompressedLevels1DToFile = ConvertCompressed1DToFile|(1 << 14), + ConvertLevels3DToFile CORRADE_DEPRECATED_ENUM("use Convert3DToFile together with Levels instead") = Convert3DToFile|Levels, /** - * Convert a set of compressed 2D image levels to a file with - * @ref AbstractImageConverter::convertToFile(Containers::ArrayView, Containers::StringView). - * Implies @ref ImageConverterFeature::ConvertCompressed2DToFile. - * @m_since_latest + * @m_deprecated_since_latest Use + * @ref ImageConverterFeature::ConvertCompressed1DToFile together with + * @relativeref{ImageConverterFeature,Levels} instead. */ - ConvertCompressedLevels2DToFile = ConvertCompressed2DToFile|(1 << 14), + ConvertCompressedLevels1DToFile CORRADE_DEPRECATED_ENUM("use ConvertCompressed1DToFile together with Levels instead") = ConvertCompressed1DToFile|Levels, /** - * Convert a set of compressed 3D image levels to a file with - * @ref AbstractImageConverter::convertToFile(Containers::ArrayView, Containers::StringView). - * Implies @ref ImageConverterFeature::ConvertCompressed3DToFile. - * @m_since_latest + * @m_deprecated_since_latest Use + * @ref ImageConverterFeature::ConvertCompressed2DToFile together with + * @relativeref{ImageConverterFeature,Levels} instead. */ - ConvertCompressedLevels3DToFile = ConvertCompressed3DToFile|(1 << 14), + ConvertCompressedLevels2DToFile CORRADE_DEPRECATED_ENUM("use ConvertCompressed2DToFile together with Levels instead") = ConvertCompressed2DToFile|Levels, /** - * Convert a set of 1D image levels to raw data with - * @ref AbstractImageConverter::convertToData(Containers::ArrayView). - * Implies @ref ImageConverterFeature::ConvertLevels1DToFile and - * @relativeref{ImageConverterFeature,Convert1DToData}, which implies also - * @relativeref{ImageConverterFeature,Convert1DToFile}. - * @m_since_latest + * @m_deprecated_since_latest Use + * @ref ImageConverterFeature::ConvertCompressed3DToFile together with + * @relativeref{ImageConverterFeature,Levels} instead. */ - ConvertLevels1DToData = ConvertLevels1DToFile|Convert1DToData|(1 << 14), + ConvertCompressedLevels3DToFile CORRADE_DEPRECATED_ENUM("use ConvertCompressed3DToFile together with Levels instead") = ConvertCompressed3DToFile|Levels, /** - * Convert a set of 2D image levels to raw data with - * @ref AbstractImageConverter::convertToData(Containers::ArrayView). - * Implies @ref ImageConverterFeature::ConvertLevels2DToFile and - * @relativeref{ImageConverterFeature,Convert2DToData}, which implies also - * @relativeref{ImageConverterFeature,Convert2DToFile}. - * @m_since_latest + * @m_deprecated_since_latest Use + * @ref ImageConverterFeature::Convert1DToData together with + * @relativeref{ImageConverterFeature,Levels} instead. */ - ConvertLevels2DToData = ConvertLevels2DToFile|Convert2DToData|(1 << 14), + ConvertLevels1DToData CORRADE_DEPRECATED_ENUM("use Convert1DToData together with Levels instead") = Convert1DToData|Levels, /** - * Convert a set of 3D image levels to raw data with - * @ref AbstractImageConverter::convertToData(Containers::ArrayView). - * Implies @ref ImageConverterFeature::ConvertLevels3DToFile and - * @relativeref{ImageConverterFeature,Convert3DToData}, which implies also - * @relativeref{ImageConverterFeature,Convert3DToFile}. - * @m_since_latest + * @m_deprecated_since_latest Use + * @ref ImageConverterFeature::Convert2DToData together with + * @relativeref{ImageConverterFeature,Levels} instead. */ - ConvertLevels3DToData = ConvertLevels3DToFile|Convert3DToData|(1 << 14), + ConvertLevels2DToData CORRADE_DEPRECATED_ENUM("use Convert2DToData together with Levels instead") = Convert2DToData|Levels, /** - * Convert a set of compressed 1D image levels to raw data with - * @ref AbstractImageConverter::convertToData(Containers::ArrayView). - * Implies @ref ImageConverterFeature::ConvertCompressedLevels1DToFile and - * @relativeref{ImageConverterFeature,ConvertCompressed1DToData}, which - * implies also @relativeref{ImageConverterFeature,ConvertCompressed1DToFile}. - * @m_since_latest + * @m_deprecated_since_latest Use + * @ref ImageConverterFeature::Convert3DToData together with + * @relativeref{ImageConverterFeature,Levels} instead. */ - ConvertCompressedLevels1DToData = ConvertCompressedLevels1DToFile|ConvertCompressed1DToData|(1 << 14), + ConvertLevels3DToData CORRADE_DEPRECATED_ENUM("use Convert3DToData together with Levels instead") = Convert3DToData|Levels, /** - * Convert a set of compressed 2D image levels to raw data with - * @ref AbstractImageConverter::convertToData(Containers::ArrayView). - * Implies @ref ImageConverterFeature::ConvertCompressedLevels2DToFile and - * @relativeref{ImageConverterFeature,ConvertCompressed2DToData}, which - * implies also @relativeref{ImageConverterFeature,ConvertCompressed2DToFile}. - * @m_since_latest + * @m_deprecated_since_latest Use + * @ref ImageConverterFeature::ConvertCompressed1DToData together with + * @relativeref{ImageConverterFeature,Levels} instead. */ - ConvertCompressedLevels2DToData = ConvertCompressedLevels2DToFile|ConvertCompressed2DToData|(1 << 14), + ConvertCompressedLevels1DToData CORRADE_DEPRECATED_ENUM("use ConvertCompressed1DToData together with Levels instead") = ConvertCompressed1DToData|Levels, /** - * Convert a set of compressed 3D image levels to raw data with - * @ref AbstractImageConverter::convertToData(Containers::ArrayView). - * Implies @ref ImageConverterFeature::ConvertCompressedLevels3DToFile and - * @relativeref{ImageConverterFeature,ConvertCompressed3DToData}, which - * implies also @relativeref{ImageConverterFeature,ConvertCompressed3DToFile}. - * @m_since_latest + * @m_deprecated_since_latest Use + * @ref ImageConverterFeature::ConvertCompressed2DToData together with + * @relativeref{ImageConverterFeature,Levels} instead. + */ + ConvertCompressedLevels2DToData CORRADE_DEPRECATED_ENUM("use ConvertCompressed2DToData together with Levels instead") = ConvertCompressed2DToData|Levels, + + /** + * @m_deprecated_since_latest Use + * @ref ImageConverterFeature::ConvertCompressed3DToData together with + * @relativeref{ImageConverterFeature,Levels} instead. */ - ConvertCompressedLevels3DToData = ConvertCompressedLevels3DToFile|ConvertCompressed3DToData|(1 << 14) + ConvertCompressedLevels3DToData CORRADE_DEPRECATED_ENUM("use ConvertCompressed3DToData together with Levels instead") = ConvertCompressed3DToData|Levels + #endif }; /** @@ -454,20 +468,9 @@ commonly advertising support for a subset of them via @ref features(): - Saving a set of (compressed) 1D/2D/3D image levels to a file / data using @ref convertToFile() / @ref convertToData(). Common use case is to save already pregenerated levels instead of having to create them during load. - Advertised with @ref ImageConverterFeature::ConvertLevels1DToFile / - @relativeref{ImageConverterFeature,ConvertLevels2DToFile} / - @relativeref{ImageConverterFeature,ConvertLevels3DToFile} or - @ref ImageConverterFeature::ConvertLevels1DToData / - @relativeref{ImageConverterFeature,ConvertLevels2DToData} / - @relativeref{ImageConverterFeature,ConvertLevels3DToData} and - @ref ImageConverterFeature::ConvertCompressedLevels1DToFile / - @relativeref{ImageConverterFeature,ConvertCompressedLevels2DToFile} / - @relativeref{ImageConverterFeature,ConvertCompressedLevels3DToFile} or - @ref ImageConverterFeature::ConvertCompressedLevels1DToData - @relativeref{ImageConverterFeature,ConvertCompressedLevels2DToData} / - @relativeref{ImageConverterFeature,ConvertCompressedLevels3DToData} for - compressed input images. Note that if a plugin advertises those, it's also - capable of saving single images --- in that case the single-image + Advertised with @ref ImageConverterFeature::Levels in addition to the + single-image feature. Note that if a plugin advertises multi-level support, + it's also capable of saving single images --- in that case the single-image @ref convertToFile() / @ref convertToData() delegates to the multi-level variant with just a single image. - Performing an operation on the image data itself using @ref convert(), from @@ -576,39 +579,9 @@ checked by the implementation: if @ref ImageConverterFeature::Convert2DToData "ImageConverterFeature::Convert*ToData" or @ref ImageConverterFeature::Convert2DToFile "Convert*ToFile" is supported -- The @ref doConvert(const ImageView2D&) function is called only if - @ref ImageConverterFeature::Convert2D is supported; equivalently for the - 1D and 3D case. -- The @ref doConvert(const CompressedImageView2D&) function is called only if - @ref ImageConverterFeature::ConvertCompressed2D is supported; equivalently - for the 1D and 3D case. -- The @ref doConvertToData(const ImageView2D&) function is called only if - @ref ImageConverterFeature::Convert2DToData is supported; equivalently - for the 1D and 3D case. -- The @ref doConvertToData(Containers::ArrayView) function - is called only if @ref ImageConverterFeature::ConvertLevels2DToData is - supported; equivalently for the 1D and 3D case. -- The @ref doConvertToData(const CompressedImageView2D&) function is called - only if @ref ImageConverterFeature::ConvertCompressed2DToData is supported; - equivalently for the 1D and 3D case. -- The @ref doConvertToData(Containers::ArrayView) - function is called only if - @ref ImageConverterFeature::ConvertCompressedLevels2DToData is supported; - equivalently for the 1D and 3D case. -- The @ref doConvertToFile(const ImageView2D&, Containers::StringView) - function is called only if @ref ImageConverterFeature::Convert2DToFile is - supported; equivalently for the 1D and 3D case. -- The @ref doConvertToFile(Containers::ArrayView, Containers::StringView) - function is called only if @ref ImageConverterFeature::ConvertLevels2DToFile - is supported; equivalently for the 1D and 3D case. -- The @ref doConvertToFile(const CompressedImageView2D&, Containers::StringView) - function is called only if - @ref ImageConverterFeature::ConvertCompressed2DToFile is supported; - equivalently for the 1D and 3D case. -- The @ref doConvertToFile(Containers::ArrayView, Containers::StringView) - function is called only if - @ref ImageConverterFeature::ConvertCompressedLevels2DToFile is supported; - equivalently for the 1D and 3D case. +- The @ref doConvert(), @ref doConvertToData() and @ref doConvertToFile() + functions are called only if a corresponding @ref ImageConverterFeature is + supported - All @ref doConvertToData() and @ref doConvertToFile() functions taking a single (compressed) image are called only if the image has a non-zero size in all dimensions and the view is not @cpp nullptr @ce. Note that this does @@ -918,10 +891,9 @@ class MAGNUM_TRADE_EXPORT AbstractImageConverter: public PluginManager::Abstract * @brief Convert a 1D image to a raw data * @m_since_latest * - * Available only if @ref ImageConverterFeature::Convert1DToData or - * @ref ImageConverterFeature::ConvertLevels1DToData is supported. The - * image view is expected to not be @cpp nullptr @ce and to have a - * non-zero size. On failure prints a message to + * Available only if @ref ImageConverterFeature::Convert1DToData is + * supported. The image view is expected to not be @cpp nullptr @ce and + * to have a non-zero size. On failure prints a message to * @relativeref{Magnum,Error} and returns @ref Containers::NullOpt. * @see @ref features(), @ref convertToData(const CompressedImageView1D&), * @ref convertToData(const ImageData1D&), @ref convert(), @@ -938,11 +910,11 @@ class MAGNUM_TRADE_EXPORT AbstractImageConverter: public PluginManager::Abstract * @brief Convert a 2D image to a raw data * @m_since_latest * - * Available only if @ref ImageConverterFeature::Convert2DToData or - * @ref ImageConverterFeature::ConvertLevels2DToData is supported. The - * image view is expected to not be @cpp nullptr @ce and to have a - * non-zero size in all dimensions. On failure prints a message to - * @relativeref{Magnum,Error} and returns @ref Containers::NullOpt. + * Available only if @ref ImageConverterFeature::Convert2DToData is + * supported. The image view is expected to not be @cpp nullptr @ce and + * to have a non-zero size in all dimensions. On failure prints a + * message to @relativeref{Magnum,Error} and returns + * @ref Containers::NullOpt. * @see @ref features(), @ref convertToData(const CompressedImageView2D&), * @ref convertToData(const ImageData2D&), @ref convert(), * @ref convertToFile() @@ -967,11 +939,11 @@ class MAGNUM_TRADE_EXPORT AbstractImageConverter: public PluginManager::Abstract * @brief Convert a 3D image to a raw data * @m_since_latest * - * Available only if @ref ImageConverterFeature::Convert3DToData or - * @ref ImageConverterFeature::ConvertLevels3DToData is supported. The - * image view is expected to not be @cpp nullptr @ce and to have a - * non-zero size in all dimensions. On failure prints a message to - * @relativeref{Magnum,Error} and returns @ref Containers::NullOpt. + * Available only if @ref ImageConverterFeature::Convert3DToData is + * supported. The image view is expected to not be @cpp nullptr @ce and + * to have a non-zero size in all dimensions. On failure prints a + * message to @relativeref{Magnum,Error} and returns + * @ref Containers::NullOpt. * @see @ref features(), @ref convertToData(const CompressedImageView3D&), * @ref convertToData(const ImageData3D&), @ref convert(), * @ref convertToFile() @@ -988,9 +960,8 @@ class MAGNUM_TRADE_EXPORT AbstractImageConverter: public PluginManager::Abstract * @m_since_latest * * Available only if @ref ImageConverterFeature::ConvertCompressed1DToData - * or @ref ImageConverterFeature::ConvertCompressedLevels1DToData is - * supported. The image view is expected to not be @cpp nullptr @ce and - * to have a non-zero size. On failure prints a message to + * is supported. The image view is expected to not be @cpp nullptr @ce + * and to have a non-zero size. On failure prints a message to * @relativeref{Magnum,Error} and returns @ref Containers::NullOpt. * @see @ref features(), @ref convertToData(const ImageView1D&), * @ref convertToData(const ImageData1D&), @ref convert(), @@ -1008,9 +979,8 @@ class MAGNUM_TRADE_EXPORT AbstractImageConverter: public PluginManager::Abstract * @m_since_latest * * Available only if @ref ImageConverterFeature::ConvertCompressed2DToData - * or @ref ImageConverterFeature::ConvertCompressedLevels2DToData is - * supported. The image view is expected to not be @cpp nullptr @ce and - * to have a non-zero size in all dimensions. On failure prints a + * is supported. The image view is expected to not be @cpp nullptr @ce + * and to have a non-zero size in all dimensions. On failure prints a * message to @relativeref{Magnum,Error} and returns * @ref Containers::NullOpt. * @see @ref features(), @ref convertToData(const ImageView2D&), @@ -1038,9 +1008,8 @@ class MAGNUM_TRADE_EXPORT AbstractImageConverter: public PluginManager::Abstract * @m_since_latest * * Available only if @ref ImageConverterFeature::ConvertCompressed3DToData - * or @ref ImageConverterFeature::ConvertCompressedLevels3DToData is - * supported. The image view is expected to not be @cpp nullptr @ce and - * to have a non-zero size in all dimensions. On failure prints a + * is supported. The image view is expected to not be @cpp nullptr @ce + * and to have a non-zero size in all dimensions. On failure prints a * message to @relativeref{Magnum,Error} and returns * @ref Containers::NullOpt. * @see @ref features(), @ref convertToData(const ImageView3D&), @@ -1118,14 +1087,15 @@ class MAGNUM_TRADE_EXPORT AbstractImageConverter: public PluginManager::Abstract * @brief Convert a set of 1D image levels to a raw data * @m_since_latest * - * Available only if @ref ImageConverterFeature::ConvertLevels1DToData - * is supported. The function expects at least one image to be passed, - * with each view expected to not be @cpp nullptr @ce, to have a - * non-zero size, and all of them sharing the same pixel format and - * layout flags. Note that certain converters may impose additional - * size and order restrictions on the images, see documentation of a - * particular plugin for more information. On failure prints a message - * to @relativeref{Magnum,Error} and returns @ref Containers::NullOpt. + * Available only if @ref ImageConverterFeature::Levels together with + * @relativeref{ImageConverterFeature,Convert1DToData} is supported. + * The function expects at least one image to be passed, with each view + * expected to not be @cpp nullptr @ce, to have a non-zero size, and + * all of them sharing the same pixel format and layout flags. Note + * that certain converters may impose additional size and order + * restrictions on the images, see documentation of a particular plugin + * for more information. On failure prints a message to + * @relativeref{Magnum,Error} and returns @ref Containers::NullOpt. * @see @ref features(), @ref convertToData(Containers::ArrayView), * @ref convert(), @ref convertToFile() */ @@ -1150,15 +1120,15 @@ class MAGNUM_TRADE_EXPORT AbstractImageConverter: public PluginManager::Abstract * @brief Convert a set of 2D image levels to a raw data * @m_since_latest * - * Available only if @ref ImageConverterFeature::ConvertLevels2DToData - * is supported. The function expects at least one image to be passed, - * with each view expected to not be @cpp nullptr @ce, to have a - * non-zero size in all dimensions, and all views sharing the same - * pixel format and layout flags. Note that certain converters may - * impose additional size and order restrictions on the images, see - * documentation of a particular plugin for more information. On - * failure prints a message to @relativeref{Magnum,Error} and returns - * @ref Containers::NullOpt. + * Available only if @ref ImageConverterFeature::Levels together with + * @relativeref{ImageConverterFeature,Convert2DToData} is supported. + * The function expects at least one image to be passed, with each view + * expected to not be @cpp nullptr @ce, to have a non-zero size in all + * dimensions, and all views sharing the same pixel format and layout + * flags. Note that certain converters may impose additional size and + * order restrictions on the images, see documentation of a particular + * plugin for more information. On failure prints a message to + * @relativeref{Magnum,Error} and returns @ref Containers::NullOpt. * @see @ref features(), @ref convertToData(Containers::ArrayView), * @ref convert(), @ref convertToFile() */ @@ -1183,15 +1153,15 @@ class MAGNUM_TRADE_EXPORT AbstractImageConverter: public PluginManager::Abstract * @brief Convert a set of 3D image levels to a raw data * @m_since_latest * - * Available only if @ref ImageConverterFeature::ConvertLevels3DToData - * is supported. The function expects at least one image to be passed, - * with each view expected to not be @cpp nullptr @ce, to have a - * non-zero size in all dimensions, and all views sharing the same - * pixel format and layout flags. Note that certain converters may - * impose additional size and order restrictions on the images, see - * documentation of a particular plugin for more information. On - * failure prints a message to @relativeref{Magnum,Error} and returns - * @ref Containers::NullOpt. + * Available only if @ref ImageConverterFeature::Levels together with + * @relativeref{ImageConverterFeature,Convert3DToData} is supported. + * The function expects at least one image to be passed, with each view + * expected to not be @cpp nullptr @ce, to have a non-zero size in all + * dimensions, and all views sharing the same pixel format and layout + * flags. Note that certain converters may impose additional size and + * order restrictions on the images, see documentation of a particular + * plugin for more information. On failure prints a message to + * @relativeref{Magnum,Error} and returns @ref Containers::NullOpt. * @see @ref features(), @ref convertToData(Containers::ArrayView), * @ref convert(), @ref convertToFile() */ @@ -1216,8 +1186,9 @@ class MAGNUM_TRADE_EXPORT AbstractImageConverter: public PluginManager::Abstract * @brief Convert a set of compressed 1D image levels to a raw data * @m_since_latest * - * Available only if @ref ImageConverterFeature::ConvertCompressedLevels1DToData - * is supported. The function expects at least one image to be passed, + * Available only if @ref ImageConverterFeature::Levels together with + * @relativeref{ImageConverterFeature,ConvertCompressed1DToData} is + * supported. The function expects at least one image to be passed, * with each view expected to not be @cpp nullptr @ce, to have a * non-zero size, and all views sharing the same pixel format and * layout flags. Note that certain converters may impose additional @@ -1248,8 +1219,9 @@ class MAGNUM_TRADE_EXPORT AbstractImageConverter: public PluginManager::Abstract * @brief Convert a set of compressed 2D image levels to a raw data * @m_since_latest * - * Available only if @ref ImageConverterFeature::ConvertCompressedLevels2DToData - * is supported. The function expects at least one image to be passed, + * Available only if @ref ImageConverterFeature::Levels together with + * @relativeref{ImageConverterFeature,ConvertCompressed2DToData} is + * supported. The function expects at least one image to be passed, * with each view expected to not be @cpp nullptr @ce, to have a * non-zero size in all dimensions, and all views sharing the same * pixel format and layout flags. Note that certain converters may @@ -1281,8 +1253,8 @@ class MAGNUM_TRADE_EXPORT AbstractImageConverter: public PluginManager::Abstract * @brief Convert a set of compressed 3D image levels to a raw data * @m_since_latest * - * Available only if @ref ImageConverterFeature::ConvertCompressedLevels3DToData - * is supported. The function expects at least one image to be passed, + * Available only if @ref ImageConverterFeature::Levels together with + * @relativeref{ImageConverterFeature,ConvertCompressed3DToData} is supported. The function expects at least one image to be passed, * with each view expected to not be @cpp nullptr @ce, to have a * non-zero size in all dimensions, and all views sharing the same * pixel format and layout flags. Note that certain converters may @@ -1314,11 +1286,10 @@ class MAGNUM_TRADE_EXPORT AbstractImageConverter: public PluginManager::Abstract * @brief Convert a 1D image to a file * @m_since_latest * - * Available only if @ref ImageConverterFeature::Convert1DToFile or - * @ref ImageConverterFeature::Convert1DToData is supported. The image - * view is expected to not be @cpp nullptr @ce and to have a non-zero - * size. On failure prints a message to @relativeref{Magnum,Error} and - * returns @cpp false @ce. + * Available only if @ref ImageConverterFeature::Convert1DToFile is + * supported. The image view is expected to not be @cpp nullptr @ce and + * to have a non-zero size. On failure prints a message to + * @relativeref{Magnum,Error} and returns @cpp false @ce. * @see @ref features(), @ref convertToFile(const CompressedImageView1D&, Containers::StringView), * @ref convertToFile(const ImageData1D&, Containers::StringView), * @ref convert(), @ref convertToData() @@ -1329,11 +1300,10 @@ class MAGNUM_TRADE_EXPORT AbstractImageConverter: public PluginManager::Abstract * @brief Convert a 2D image to a file * @m_since_latest * - * Available only if @ref ImageConverterFeature::Convert2DToFile or - * @ref ImageConverterFeature::Convert2DToData is supported. The image - * view is expected to not be @cpp nullptr @ce and to have a non-zero - * size in all dimensions. Returns @cpp true @ce on success, - * @cpp false @ce otherwise. + * Available only if @ref ImageConverterFeature::Convert2DToFile is + * supported. The image view is expected to not be @cpp nullptr @ce and + * to have a non-zero size in all dimensions. Returns @cpp true @ce on + * success, @cpp false @ce otherwise. * @see @ref features(), @ref convertToFile(const CompressedImageView2D&, Containers::StringView), * @ref convertToFile(const ImageData2D&, Containers::StringView), * @ref convert(), @ref convertToData() @@ -1354,11 +1324,10 @@ class MAGNUM_TRADE_EXPORT AbstractImageConverter: public PluginManager::Abstract * @brief Convert a 3D image to a file * @m_since_latest * - * Available only if @ref ImageConverterFeature::Convert3DToFile or - * @ref ImageConverterFeature::Convert3DToData is supported. The image - * view is expected to not be @cpp nullptr @ce and to have a non-zero - * size. On failure prints a message to @relativeref{Magnum,Error} and - * returns @cpp false @ce. + * Available only if @ref ImageConverterFeature::Convert3DToFile is + * supported. The image view is expected to not be @cpp nullptr @ce and + * to have a non-zero size. On failure prints a message to + * @relativeref{Magnum,Error} and returns @cpp false @ce. * @see @ref features(), @ref convertToFile(const CompressedImageView3D&, Containers::StringView), * @ref convertToFile(const ImageData3D&, Containers::StringView), * @ref convert(), @ref convertToData() @@ -1370,9 +1339,8 @@ class MAGNUM_TRADE_EXPORT AbstractImageConverter: public PluginManager::Abstract * @m_since_latest * * Available only if @ref ImageConverterFeature::ConvertCompressed1DToFile - * or @ref ImageConverterFeature::ConvertCompressed1DToData is - * supported. The image view is expected to not be @cpp nullptr @ce and - * to have a non-zero size in all dimensions. On failure prints a + * is supported. The image view is expected to not be @cpp nullptr @ce + * and to have a non-zero size in all dimensions. On failure prints a * message to @relativeref{Magnum,Error} and returns @cpp false @ce. * @see @ref features(), @ref convertToFile(const ImageView1D&, Containers::StringView), * @ref convertToFile(const ImageData1D&, Containers::StringView), @@ -1385,9 +1353,8 @@ class MAGNUM_TRADE_EXPORT AbstractImageConverter: public PluginManager::Abstract * @m_since_latest * * Available only if @ref ImageConverterFeature::ConvertCompressed2DToFile - * or @ref ImageConverterFeature::ConvertCompressed2DToData is - * supported. The image view is expected to not be @cpp nullptr @ce and - * to have a non-zero size in all dimensions. On failure prints a + * is supported. The image view is expected to not be @cpp nullptr @ce + * and to have a non-zero size in all dimensions. On failure prints a * message to @relativeref{Magnum,Error} and returns @cpp false @ce. * @see @ref features(), @ref convertToFile(const ImageView2D&, Containers::StringView), * @ref convertToFile(const ImageData2D&, Containers::StringView), @@ -1410,9 +1377,8 @@ class MAGNUM_TRADE_EXPORT AbstractImageConverter: public PluginManager::Abstract * @m_since_latest * * Available only if @ref ImageConverterFeature::ConvertCompressed3DToFile - * or @ref ImageConverterFeature::ConvertCompressed3DToData is - * supported. The image view is expected to not be @cpp nullptr @ce and - * to have a non-zero size in all dimensions. On failure prints a + * is supported. The image view is expected to not be @cpp nullptr @ce + * and to have a non-zero size in all dimensions. On failure prints a * message to @relativeref{Magnum,Error} and returns @cpp false @ce. * @see @ref features(), @ref convertToFile(const ImageView3D&, Containers::StringView), * @ref convertToFile(const ImageData3D&, Containers::StringView), @@ -1482,13 +1448,14 @@ class MAGNUM_TRADE_EXPORT AbstractImageConverter: public PluginManager::Abstract * @brief Convert a set of 1D image levels to a file * @m_since_latest * - * Available only if @ref ImageConverterFeature::ConvertLevels1DToFile - * is supported. The function expects at least one image to be passed, - * with each view expected to not be @cpp nullptr @ce, to have a - * non-zero size, and all views sharing the same pixel format. Note - * that certain converters may impose additional size and order - * restrictions on the images, see documentation of a particular plugin - * for more information. On failure prints a message to + * Available only if @ref ImageConverterFeature::Levels together with + * @relativeref{ImageConverterFeature,Convert1DToFile} is supported. + * The function expects at least one image to be passed, with each view + * expected to not be @cpp nullptr @ce, to have a non-zero size, and + * all views sharing the same pixel format and layout flags. Note that + * certain converters may impose additional size and order restrictions + * on the images, see documentation of a particular plugin for more + * information. On failure prints a message to * @relativeref{Magnum,Error} and returns @cpp false @ce. * @see @ref features(), @ref convertToFile(Containers::ArrayView, Containers::StringView), * @ref convert(), @ref convertToData() @@ -1504,15 +1471,15 @@ class MAGNUM_TRADE_EXPORT AbstractImageConverter: public PluginManager::Abstract * @brief Convert a set of 2D image levels to a file * @m_since_latest * - * Available only if @ref ImageConverterFeature::ConvertLevels2DToFile - * is supported. The function expects at least one image to be passed, - * with each view expected to not be @cpp nullptr @ce, to have a - * non-zero size in all dimensions, and all views sharing the same - * pixel format and layout flags. Note that certain converters may - * impose additional size and order restrictions on the images, see - * documentation of a particular plugin for more information. On - * failure prints a message to @relativeref{Magnum,Error} and returns - * @cpp false @ce. + * Available only if @ref ImageConverterFeature::Levels together with + * @relativeref{ImageConverterFeature,Convert2DToFile} is supported. + * The function expects at least one image to be passed, with each view + * expected to not be @cpp nullptr @ce, to have a non-zero size in all + * dimensions, and all views sharing the same pixel format and layout + * flags. Note that certain converters may impose additional size and + * order restrictions on the images, see documentation of a particular + * plugin for more information. On failure prints a message to + * @relativeref{Magnum,Error} and returns @cpp false @ce. * @see @ref features(), @ref convertToFile(Containers::ArrayView, Containers::StringView), * @ref convert(), @ref convertToData() */ @@ -1527,15 +1494,15 @@ class MAGNUM_TRADE_EXPORT AbstractImageConverter: public PluginManager::Abstract * @brief Convert a set of 3D image levels to a file * @m_since_latest * - * Available only if @ref ImageConverterFeature::ConvertLevels3DToFile - * is supported. The function expects at least one image to be passed, - * with each view expected to not be @cpp nullptr @ce, to have a - * non-zero size in all dimensions, and all views sharing the same - * pixel format and layout flags. Note that certain converters may - * impose additional size and order restrictions on the images, see - * documentation of a particular plugin for more information. On - * failure prints a message to @relativeref{Magnum,Error} and returns - * @cpp false @ce. + * Available only if @ref ImageConverterFeature::Levels together with + * @relativeref{ImageConverterFeature,Convert3DToFile} is supported. + * The function expects at least one image to be passed, with each view + * expected to not be @cpp nullptr @ce, to have a non-zero size in all + * dimensions, and all views sharing the same pixel format and layout + * flags. Note that certain converters may impose additional size and + * order restrictions on the images, see documentation of a particular + * plugin for more information. On failure prints a message to + * @relativeref{Magnum,Error} and returns @cpp false @ce. * @see @ref features(), @ref convertToFile(Containers::ArrayView, Containers::StringView), * @ref convert(), @ref convertToData() */ @@ -1550,8 +1517,9 @@ class MAGNUM_TRADE_EXPORT AbstractImageConverter: public PluginManager::Abstract * @brief Convert a set of compressed 1D image levels to a file * @m_since_latest * - * Available only if @ref ImageConverterFeature::ConvertCompressedLevels1DToFile - * is supported. The function expects at least one image to be passed, + * Available only if @ref ImageConverterFeature::Levels together with + * @relativeref{ImageConverterFeature,ConvertCompressed1DToFile} is + * supported. The function expects at least one image to be passed, * with each view expected to not be @cpp nullptr @ce, to have a * non-zero size, and all views sharing the same pixel format and * layout flags. Note that certain converters may impose additional @@ -1572,8 +1540,9 @@ class MAGNUM_TRADE_EXPORT AbstractImageConverter: public PluginManager::Abstract * @brief Convert a set of compressed 2D image levels to a file * @m_since_latest * - * Available only if @ref ImageConverterFeature::ConvertCompressedLevels2DToFile - * is supported. The function expects at least one image to be passed, + * Available only if @ref ImageConverterFeature::Levels together with + * @relativeref{ImageConverterFeature,ConvertCompressed2DToFile} is + * supported. The function expects at least one image to be passed, * with each view expected to not be @cpp nullptr @ce, to have a * non-zero size in all dimensions, and all views sharing the same * pixel format and layout flags. Note that certain converters may @@ -1595,8 +1564,9 @@ class MAGNUM_TRADE_EXPORT AbstractImageConverter: public PluginManager::Abstract * @brief Convert a set of compressed 3D image levels to a file * @m_since_latest * - * Available only if @ref ImageConverterFeature::ConvertCompressedLevels3DToFile - * is supported. The function expects at least one image to be passed, + * Available only if @ref ImageConverterFeature::Levels together with + * @relativeref{ImageConverterFeature,ConvertCompressed3DToFile} is + * supported. The function expects at least one image to be passed, * with each view expected to not be @cpp nullptr @ce, to have a * non-zero size in all dimensions, and all views sharing the same * pixel format and layout flags. Note that certain converters may @@ -1619,9 +1589,8 @@ class MAGNUM_TRADE_EXPORT AbstractImageConverter: public PluginManager::Abstract * @brief Implementation for @ref convertToFile(const ImageView1D&, Containers::StringView) * @m_since_latest * - * If @ref ImageConverterFeature::ConvertLevels1DToFile is supported, - * default implementation calls - * @ref doConvertToFile(Containers::ArrayView, Containers::StringView) + * If @ref ImageConverterFeature::Levels is supported, default + * implementation calls @ref doConvertToFile(Containers::ArrayView, Containers::StringView) * with just the single @p image. Otherwise, if * @ref ImageConverterFeature::Convert1DToData is supported, default * implementation calls @ref doConvertToData(const ImageView1D&) and @@ -1635,9 +1604,8 @@ class MAGNUM_TRADE_EXPORT AbstractImageConverter: public PluginManager::Abstract * @brief Implementation for @ref convertToFile(const ImageView2D&, Containers::StringView) * @m_since_latest * - * If @ref ImageConverterFeature::ConvertLevels2DToFile is supported, - * default implementation calls - * @ref doConvertToFile(Containers::ArrayView, Containers::StringView) + * If @ref ImageConverterFeature::Levels is supported, default + * implementation calls @ref doConvertToFile(Containers::ArrayView, Containers::StringView) * with just the single @p image. Otherwise, if * @ref ImageConverterFeature::Convert2DToData is supported, default * implementation calls @ref doConvertToData(const ImageView2D&) and @@ -1651,9 +1619,8 @@ class MAGNUM_TRADE_EXPORT AbstractImageConverter: public PluginManager::Abstract * @brief Implementation for @ref convertToFile(const ImageView3D&, Containers::StringView) * @m_since_latest * - * If @ref ImageConverterFeature::ConvertLevels3DToFile is supported, - * default implementation calls - * @ref doConvertToFile(Containers::ArrayView, Containers::StringView) + * If @ref ImageConverterFeature::Levels is supported, default + * implementation calls @ref doConvertToFile(Containers::ArrayView, Containers::StringView) * with just the single @p image. Otherwise, if * @ref ImageConverterFeature::Convert3DToData is supported, default * implementation calls @ref doConvertToData(const ImageView3D&) and @@ -1667,9 +1634,8 @@ class MAGNUM_TRADE_EXPORT AbstractImageConverter: public PluginManager::Abstract * @brief Implementation for @ref convertToFile(const CompressedImageView1D&, Containers::StringView) * @m_since_latest * - * If @ref ImageConverterFeature::ConvertCompressedLevels1DToFile is - * supported, default implementation calls - * @ref doConvertToFile(Containers::ArrayView, Containers::StringView) + * If @ref ImageConverterFeature::Levels is supported, default + * implementation calls @ref doConvertToFile(Containers::ArrayView, Containers::StringView) * with just the single @p image. Otherwise, if * @ref ImageConverterFeature::ConvertCompressed1DToData is supported, * default implementation calls @ref doConvertToData(const CompressedImageView1D&) @@ -1684,9 +1650,8 @@ class MAGNUM_TRADE_EXPORT AbstractImageConverter: public PluginManager::Abstract * @brief Implementation for @ref convertToFile(const CompressedImageView2D&, Containers::StringView) * @m_since_latest * - * If @ref ImageConverterFeature::ConvertCompressedLevels2DToFile is - * supported, default implementation calls - * @ref doConvertToFile(Containers::ArrayView, Containers::StringView) + * If @ref ImageConverterFeature::Levels is supported, default + * implementation calls @ref doConvertToFile(Containers::ArrayView, Containers::StringView) * with just the single @p image. Otherwise, if * @ref ImageConverterFeature::ConvertCompressed2DToData is supported, * default implementation calls @ref doConvertToData(const CompressedImageView2D&) @@ -1701,9 +1666,8 @@ class MAGNUM_TRADE_EXPORT AbstractImageConverter: public PluginManager::Abstract * @brief Implementation for @ref convertToFile(const CompressedImageView3D&, Containers::StringView) * @m_since_latest * - * If @ref ImageConverterFeature::ConvertCompressedLevels3DToFile is - * supported, default implementation calls - * @ref doConvertToFile(Containers::ArrayView, Containers::StringView) + * If @ref ImageConverterFeature::Levels is supported, default + * implementation calls @ref doConvertToFile(Containers::ArrayView, Containers::StringView) * with just the single @p image. Otherwise, if * @ref ImageConverterFeature::ConvertCompressed3DToData is supported, * default implementation calls @ref doConvertToData(const CompressedImageView3D&) @@ -1718,12 +1682,12 @@ class MAGNUM_TRADE_EXPORT AbstractImageConverter: public PluginManager::Abstract * @brief Implementation for @ref convertToFile(Containers::ArrayView, Containers::StringView) * @m_since_latest * - * If @ref ImageConverterFeature::ConvertLevels1DToData is supported, - * default implementation calls - * @ref doConvertToData(Containers::ArrayView) and - * saves the result to given file. It is allowed to call this function - * from your @ref doConvertToFile() implementation, for example when - * you only need to do format detection based on file extension. + * If @ref ImageConverterFeature::Convert1DToData is supported, default + * implementation calls @ref doConvertToData(Containers::ArrayView) + * and saves the result to given file. It is allowed to call this + * function from your @ref doConvertToFile() implementation, for + * example when you only need to do format detection based on file + * extension. */ virtual bool doConvertToFile(Containers::ArrayView imageLevels, Containers::StringView filename); @@ -1731,12 +1695,12 @@ class MAGNUM_TRADE_EXPORT AbstractImageConverter: public PluginManager::Abstract * @brief Implementation for @ref convertToFile(Containers::ArrayView, Containers::StringView) * @m_since_latest * - * If @ref ImageConverterFeature::ConvertLevels1DToData is supported, - * default implementation calls - * @ref doConvertToData(Containers::ArrayView) and - * saves the result to given file. It is allowed to call this function - * from your @ref doConvertToFile() implementation, for example when - * you only need to do format detection based on file extension. + * If @ref ImageConverterFeature::Convert2DToData is supported, default + * implementation calls @ref doConvertToData(Containers::ArrayView) + * and saves the result to given file. It is allowed to call this + * function from your @ref doConvertToFile() implementation, for + * example when you only need to do format detection based on file + * extension. */ virtual bool doConvertToFile(Containers::ArrayView imageLevels, Containers::StringView filename); @@ -1744,12 +1708,12 @@ class MAGNUM_TRADE_EXPORT AbstractImageConverter: public PluginManager::Abstract * @brief Implementation for @ref convertToFile(Containers::ArrayView, Containers::StringView) * @m_since_latest * - * If @ref ImageConverterFeature::ConvertLevels1DToData is supported, - * default implementation calls - * @ref doConvertToData(Containers::ArrayView) and - * saves the result to given file. It is allowed to call this function - * from your @ref doConvertToFile() implementation, for example when - * you only need to do format detection based on file extension. + * If @ref ImageConverterFeature::Convert3DToData is supported, default + * implementation calls @ref doConvertToData(Containers::ArrayView) + * and saves the result to given file. It is allowed to call this + * function from your @ref doConvertToFile() implementation, for + * example when you only need to do format detection based on file + * extension. */ virtual bool doConvertToFile(Containers::ArrayView imageLevels, Containers::StringView filename); @@ -1757,7 +1721,7 @@ class MAGNUM_TRADE_EXPORT AbstractImageConverter: public PluginManager::Abstract * @brief Implementation for @ref convertToFile(Containers::ArrayView, Containers::StringView) * @m_since_latest * - * If @ref ImageConverterFeature::ConvertCompressedLevels1DToData is + * If @ref ImageConverterFeature::ConvertCompressed1DToData is * supported, default implementation calls * @ref doConvertToData(Containers::ArrayView) * and saves the result to given file. It is allowed to call this @@ -1771,7 +1735,7 @@ class MAGNUM_TRADE_EXPORT AbstractImageConverter: public PluginManager::Abstract * @brief Implementation for @ref convertToFile(Containers::ArrayView, Containers::StringView) * @m_since_latest * - * If @ref ImageConverterFeature::ConvertCompressedLevels2DToData is + * If @ref ImageConverterFeature::ConvertCompressed2DToData is * supported, default implementation calls @ref doConvertToData(Containers::ArrayView) * and saves the result to given file. It is allowed to call this * function from your @ref doConvertToFile() implementation, for @@ -1784,7 +1748,7 @@ class MAGNUM_TRADE_EXPORT AbstractImageConverter: public PluginManager::Abstract * @brief Implementation for @ref convertToFile(Containers::ArrayView, Containers::StringView) * @m_since_latest * - * If @ref ImageConverterFeature::ConvertCompressedLevels3DToData is + * If @ref ImageConverterFeature::ConvertCompressed3DToData is * supported, default implementation calls @ref doConvertToData(Containers::ArrayView) * and saves the result to given file. It is allowed to call this * function from your @ref doConvertToFile() implementation, for @@ -1869,8 +1833,8 @@ class MAGNUM_TRADE_EXPORT AbstractImageConverter: public PluginManager::Abstract * @brief Implementation for @ref convertToData(const ImageView1D&) * @m_since_latest * - * If @ref ImageConverterFeature::ConvertLevels1DToData is supported, - * default implementation calls @ref doConvertToData(Containers::ArrayView) + * If @ref ImageConverterFeature::Levels is supported, default + * implementation calls @ref doConvertToData(Containers::ArrayView) * with just the single @p image and propagates the result back. */ virtual Containers::Optional> doConvertToData(const ImageView1D& image); @@ -1879,8 +1843,8 @@ class MAGNUM_TRADE_EXPORT AbstractImageConverter: public PluginManager::Abstract * @brief Implementation for @ref convertToData(const ImageView2D&) * @m_since_latest * - * If @ref ImageConverterFeature::ConvertLevels2DToData is supported, - * default implementation calls @ref doConvertToData(Containers::ArrayView) + * If @ref ImageConverterFeature::Levels is supported, default + * implementation calls @ref doConvertToData(Containers::ArrayView) * with just the single @p image and propagates the result back. */ virtual Containers::Optional> doConvertToData(const ImageView2D& image); @@ -1889,8 +1853,8 @@ class MAGNUM_TRADE_EXPORT AbstractImageConverter: public PluginManager::Abstract * @brief Implementation for @ref convertToData(const ImageView3D&) * @m_since_latest * - * If @ref ImageConverterFeature::ConvertLevels3DToData is supported, - * default implementation calls @ref doConvertToData(Containers::ArrayView) + * If @ref ImageConverterFeature::Levels is supported, default + * implementation calls @ref doConvertToData(Containers::ArrayView) * with just the single @p image and propagates the result back. */ virtual Containers::Optional> doConvertToData(const ImageView3D& image); @@ -1899,9 +1863,8 @@ class MAGNUM_TRADE_EXPORT AbstractImageConverter: public PluginManager::Abstract * @brief Implementation for @ref convertToData(const CompressedImageView1D&) * @m_since_latest * - * If @ref ImageConverterFeature::ConvertCompressedLevels1DToData is - * supported, default implementation calls - * @ref doConvertToData(Containers::ArrayView) + * If @ref ImageConverterFeature::Levels is supported, default + * implementation calls @ref doConvertToData(Containers::ArrayView) * with just the single @p image and propagates the result back. */ virtual Containers::Optional> doConvertToData(const CompressedImageView1D& image); @@ -1910,9 +1873,8 @@ class MAGNUM_TRADE_EXPORT AbstractImageConverter: public PluginManager::Abstract * @brief Implementation for @ref convertToData(const CompressedImageView2D&) * @m_since_latest * - * If @ref ImageConverterFeature::ConvertCompressedLevels2DToData is - * supported, default implementation calls - * @ref doConvertToData(Containers::ArrayView) + * If @ref ImageConverterFeature::Levels is supported, default + * implementation calls @ref doConvertToData(Containers::ArrayView) * with just the single @p image and propagates the result back. */ virtual Containers::Optional> doConvertToData(const CompressedImageView2D& image); @@ -1921,9 +1883,8 @@ class MAGNUM_TRADE_EXPORT AbstractImageConverter: public PluginManager::Abstract * @brief Implementation for @ref convertToData(const CompressedImageView3D&) * @m_since_latest * - * If @ref ImageConverterFeature::ConvertCompressedLevels3DToData is - * supported, default implementation calls - * @ref doConvertToData(Containers::ArrayView) + * If @ref ImageConverterFeature::Levels is supported, default + * implementation calls @ref doConvertToData(Containers::ArrayView) * with just the single @p image and propagates the result back. */ virtual Containers::Optional> doConvertToData(const CompressedImageView3D& image); diff --git a/src/Magnum/Trade/Test/AbstractImageConverterTest.cpp b/src/Magnum/Trade/Test/AbstractImageConverterTest.cpp index 1c6354b46..6b7b07739 100644 --- a/src/Magnum/Trade/Test/AbstractImageConverterTest.cpp +++ b/src/Magnum/Trade/Test/AbstractImageConverterTest.cpp @@ -296,6 +296,9 @@ struct AbstractImageConverterTest: TestSuite::Tester { void convertCompressed3DToFileThroughLevels(); void debugFeature(); + #ifdef MAGNUM_BUILD_DEPRECATED + void debugFeatureDeprecated(); + #endif void debugFeatures(); void debugFeaturesSupersets(); void debugFlag(); @@ -532,6 +535,9 @@ AbstractImageConverterTest::AbstractImageConverterTest() { &AbstractImageConverterTest::convertCompressed3DToFileThroughLevels, &AbstractImageConverterTest::debugFeature, + #ifdef MAGNUM_BUILD_DEPRECATED + &AbstractImageConverterTest::debugFeatureDeprecated, + #endif &AbstractImageConverterTest::debugFeatures, &AbstractImageConverterTest::debugFeaturesSupersets, &AbstractImageConverterTest::debugFlag, @@ -677,7 +683,7 @@ void AbstractImageConverterTest::thingNotSupported() { void AbstractImageConverterTest::extensionMimeType() { struct: AbstractImageConverter { ImageConverterFeatures doFeatures() const override { - return ImageConverterFeature::ConvertCompressedLevels3DToData; + return ImageConverterFeature::ConvertCompressed3DToData; } Containers::String doExtension() const override { return "yello"; } Containers::String doMimeType() const override { return "yel/low"; } @@ -1766,7 +1772,10 @@ void AbstractImageConverterTest::convertImageData3DToData() { void AbstractImageConverterTest::convertLevels1DToData() { struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertLevels1DToData; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::Convert1DToData| + ImageConverterFeature::Levels; + } Containers::Optional> doConvertToData(Containers::ArrayView imageLevels) override { return Containers::Array{nullptr, std::size_t(imageLevels[0].size().product()*imageLevels.size())}; } @@ -1785,7 +1794,10 @@ void AbstractImageConverterTest::convertLevels1DToData() { void AbstractImageConverterTest::convertLevels2DToData() { struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertLevels2DToData; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::Convert2DToData| + ImageConverterFeature::Levels; + } Containers::Optional> doConvertToData(Containers::ArrayView imageLevels) override { return Containers::Array{nullptr, std::size_t(imageLevels[0].size().product()*imageLevels.size())}; } @@ -1804,7 +1816,10 @@ void AbstractImageConverterTest::convertLevels2DToData() { void AbstractImageConverterTest::convertLevels3DToData() { struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertLevels3DToData; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::Convert3DToData| + ImageConverterFeature::Levels; + } Containers::Optional> doConvertToData(Containers::ArrayView imageLevels) override { return Containers::Array{nullptr, std::size_t(imageLevels[0].size().product()*imageLevels.size())}; } @@ -1824,7 +1839,8 @@ void AbstractImageConverterTest::convertLevels3DToData() { void AbstractImageConverterTest::convertLevels1DToDataFailed() { struct: AbstractImageConverter { ImageConverterFeatures doFeatures() const override { - return ImageConverterFeature::ConvertLevels1DToData; + return ImageConverterFeature::Convert1DToData| + ImageConverterFeature::Levels; } Containers::Optional> doConvertToData(Containers::ArrayView) override { return {}; @@ -1843,7 +1859,8 @@ void AbstractImageConverterTest::convertLevels1DToDataFailed() { void AbstractImageConverterTest::convertLevels2DToDataFailed() { struct: AbstractImageConverter { ImageConverterFeatures doFeatures() const override { - return ImageConverterFeature::ConvertLevels2DToData; + return ImageConverterFeature::Convert2DToData| + ImageConverterFeature::Levels; } Containers::Optional> doConvertToData(Containers::ArrayView) override { return {}; @@ -1862,7 +1879,8 @@ void AbstractImageConverterTest::convertLevels2DToDataFailed() { void AbstractImageConverterTest::convertLevels3DToDataFailed() { struct: AbstractImageConverter { ImageConverterFeatures doFeatures() const override { - return ImageConverterFeature::ConvertLevels3DToData; + return ImageConverterFeature::Convert3DToData| + ImageConverterFeature::Levels; } Containers::Optional> doConvertToData(Containers::ArrayView) override { return {}; @@ -1882,7 +1900,10 @@ void AbstractImageConverterTest::convertLevels1DToDataInvalidImage() { CORRADE_SKIP_IF_NO_ASSERT(); struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertLevels1DToData; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::Convert1DToData| + ImageConverterFeature::Levels; + } } converter; std::ostringstream out; @@ -1895,7 +1916,10 @@ void AbstractImageConverterTest::convertLevels2DToDataNoLevels() { CORRADE_SKIP_IF_NO_ASSERT(); struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertLevels2DToData; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::Convert2DToData| + ImageConverterFeature::Levels; + } } converter; std::ostringstream out; @@ -1908,7 +1932,10 @@ void AbstractImageConverterTest::convertLevels2DToDataZeroSize() { CORRADE_SKIP_IF_NO_ASSERT(); struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertLevels2DToData; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::Convert2DToData| + ImageConverterFeature::Levels; + } } converter; const char data[16]{}; @@ -1925,7 +1952,10 @@ void AbstractImageConverterTest::convertLevels2DToDataNullptr() { CORRADE_SKIP_IF_NO_ASSERT(); struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertLevels2DToData; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::Convert2DToData| + ImageConverterFeature::Levels; + } } converter; const char data[16]{}; @@ -1942,7 +1972,10 @@ void AbstractImageConverterTest::convertLevels2DToDataInconsistentFormat() { CORRADE_SKIP_IF_NO_ASSERT(); struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertLevels2DToData; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::Convert2DToData| + ImageConverterFeature::Levels; + } } converter; const char data[16]{}; @@ -1960,7 +1993,10 @@ void AbstractImageConverterTest::convertLevels2DToDataInconsistentFormatExtra() CORRADE_SKIP_IF_NO_ASSERT(); struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertLevels2DToData; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::Convert2DToData| + ImageConverterFeature::Levels; + } } converter; const char data[16]{}; @@ -1978,7 +2014,10 @@ void AbstractImageConverterTest::convertLevels2DToDataInconsistentFlags() { CORRADE_SKIP_IF_NO_ASSERT(); struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertLevels2DToData; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::Convert2DToData| + ImageConverterFeature::Levels; + } } converter; const char data[16]{}; @@ -1996,7 +2035,10 @@ void AbstractImageConverterTest::convertLevels3DToDataInvalidImage() { CORRADE_SKIP_IF_NO_ASSERT(); struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertLevels3DToData; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::Convert3DToData| + ImageConverterFeature::Levels; + } } converter; std::ostringstream out; @@ -2009,7 +2051,10 @@ void AbstractImageConverterTest::convertLevels1DToDataNotImplemented() { CORRADE_SKIP_IF_NO_ASSERT(); struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertLevels1DToData; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::Convert1DToData| + ImageConverterFeature::Levels; + } } converter; const char data[4]{}; @@ -2023,7 +2068,10 @@ void AbstractImageConverterTest::convertLevels2DToDataNotImplemented() { CORRADE_SKIP_IF_NO_ASSERT(); struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertLevels2DToData; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::Convert2DToData| + ImageConverterFeature::Levels; + } } converter; const char data[4]{}; @@ -2037,7 +2085,10 @@ void AbstractImageConverterTest::convertLevels3DToDataNotImplemented() { CORRADE_SKIP_IF_NO_ASSERT(); struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertLevels3DToData; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::Convert3DToData| + ImageConverterFeature::Levels; + } } converter; const char data[4]{}; @@ -2051,7 +2102,10 @@ void AbstractImageConverterTest::convertLevels1DToDataCustomDeleter() { CORRADE_SKIP_IF_NO_ASSERT(); struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertLevels1DToData; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::Convert1DToData| + ImageConverterFeature::Levels; + } Containers::Optional> doConvertToData(Containers::ArrayView) override { return Containers::Array{nullptr, 0, [](char*, std::size_t) {}}; } @@ -2068,7 +2122,10 @@ void AbstractImageConverterTest::convertLevels2DToDataCustomDeleter() { CORRADE_SKIP_IF_NO_ASSERT(); struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertLevels2DToData; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::Convert2DToData| + ImageConverterFeature::Levels; + } Containers::Optional> doConvertToData(Containers::ArrayView) override { return Containers::Array{nullptr, 0, [](char*, std::size_t) {}}; } @@ -2085,7 +2142,10 @@ void AbstractImageConverterTest::convertLevels3DToDataCustomDeleter() { CORRADE_SKIP_IF_NO_ASSERT(); struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertLevels3DToData; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::Convert3DToData| + ImageConverterFeature::Levels; + } Containers::Optional> doConvertToData(Containers::ArrayView) override { return Containers::Array{nullptr, 0, [](char*, std::size_t) {}}; } @@ -2100,7 +2160,10 @@ void AbstractImageConverterTest::convertLevels3DToDataCustomDeleter() { void AbstractImageConverterTest::convertCompressedLevels1DToData() { struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertCompressedLevels1DToData; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::ConvertCompressed1DToData| + ImageConverterFeature::Levels; + } Containers::Optional> doConvertToData(Containers::ArrayView imageLevels) override { return Containers::Array{nullptr, std::size_t(imageLevels[0].size().product()*imageLevels.size())}; } @@ -2119,7 +2182,10 @@ void AbstractImageConverterTest::convertCompressedLevels1DToData() { void AbstractImageConverterTest::convertCompressedLevels2DToData() { struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertCompressedLevels2DToData; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::ConvertCompressed2DToData| + ImageConverterFeature::Levels; + } Containers::Optional> doConvertToData(Containers::ArrayView imageLevels) override { return Containers::Array{nullptr, std::size_t(imageLevels[0].size().product()*imageLevels.size())}; } @@ -2138,7 +2204,10 @@ void AbstractImageConverterTest::convertCompressedLevels2DToData() { void AbstractImageConverterTest::convertCompressedLevels3DToData() { struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertCompressedLevels3DToData; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::ConvertCompressed3DToData| + ImageConverterFeature::Levels; + } Containers::Optional> doConvertToData(Containers::ArrayView imageLevels) override { return Containers::Array{nullptr, std::size_t(imageLevels[0].size().product()*imageLevels.size())}; } @@ -2158,7 +2227,8 @@ void AbstractImageConverterTest::convertCompressedLevels3DToData() { void AbstractImageConverterTest::convertCompressedLevels1DToDataFailed() { struct: AbstractImageConverter { ImageConverterFeatures doFeatures() const override { - return ImageConverterFeature::ConvertCompressedLevels1DToData; + return ImageConverterFeature::ConvertCompressed1DToData| + ImageConverterFeature::Levels; } Containers::Optional> doConvertToData(Containers::ArrayView) override { return {}; @@ -2177,7 +2247,8 @@ void AbstractImageConverterTest::convertCompressedLevels1DToDataFailed() { void AbstractImageConverterTest::convertCompressedLevels2DToDataFailed() { struct: AbstractImageConverter { ImageConverterFeatures doFeatures() const override { - return ImageConverterFeature::ConvertCompressedLevels2DToData; + return ImageConverterFeature::ConvertCompressed2DToData| + ImageConverterFeature::Levels; } Containers::Optional> doConvertToData(Containers::ArrayView) override { return {}; @@ -2196,7 +2267,8 @@ void AbstractImageConverterTest::convertCompressedLevels2DToDataFailed() { void AbstractImageConverterTest::convertCompressedLevels3DToDataFailed() { struct: AbstractImageConverter { ImageConverterFeatures doFeatures() const override { - return ImageConverterFeature::ConvertCompressedLevels3DToData; + return ImageConverterFeature::ConvertCompressed3DToData| + ImageConverterFeature::Levels; } Containers::Optional> doConvertToData(Containers::ArrayView) override { return {}; @@ -2216,7 +2288,10 @@ void AbstractImageConverterTest::convertCompressedLevels1DToDataInvalidImage() { CORRADE_SKIP_IF_NO_ASSERT(); struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertCompressedLevels1DToData; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::ConvertCompressed1DToData| + ImageConverterFeature::Levels; + } } converter; std::ostringstream out; @@ -2229,7 +2304,10 @@ void AbstractImageConverterTest::convertCompressedLevels2DToDataNoLevels() { CORRADE_SKIP_IF_NO_ASSERT(); struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertCompressedLevels2DToData; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::ConvertCompressed2DToData| + ImageConverterFeature::Levels; + } } converter; std::ostringstream out; @@ -2242,7 +2320,10 @@ void AbstractImageConverterTest::convertCompressedLevels2DToDataZeroSize() { CORRADE_SKIP_IF_NO_ASSERT(); struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertCompressedLevels2DToData; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::ConvertCompressed2DToData| + ImageConverterFeature::Levels; + } } converter; const char data[16]{}; @@ -2259,7 +2340,10 @@ void AbstractImageConverterTest::convertCompressedLevels2DToDataNullptr() { CORRADE_SKIP_IF_NO_ASSERT(); struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertCompressedLevels2DToData; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::ConvertCompressed2DToData| + ImageConverterFeature::Levels; + } } converter; const char data[16]{}; @@ -2276,7 +2360,10 @@ void AbstractImageConverterTest::convertCompressedLevels2DToDataInconsistentForm CORRADE_SKIP_IF_NO_ASSERT(); struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertCompressedLevels2DToData; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::ConvertCompressed2DToData| + ImageConverterFeature::Levels; + } } converter; const char data[16]{}; @@ -2294,7 +2381,10 @@ void AbstractImageConverterTest::convertCompressedLevels2DToDataInconsistentFlag CORRADE_SKIP_IF_NO_ASSERT(); struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertCompressedLevels2DToData; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::ConvertCompressed2DToData| + ImageConverterFeature::Levels; + } } converter; const char data[16]{}; @@ -2312,7 +2402,10 @@ void AbstractImageConverterTest::convertCompressedLevels3DToDataInvalidImage() { CORRADE_SKIP_IF_NO_ASSERT(); struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertCompressedLevels3DToData; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::ConvertCompressed3DToData| + ImageConverterFeature::Levels; + } } converter; std::ostringstream out; @@ -2325,7 +2418,10 @@ void AbstractImageConverterTest::convertCompressedLevels1DToDataNotImplemented() CORRADE_SKIP_IF_NO_ASSERT(); struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertCompressedLevels1DToData; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::ConvertCompressed1DToData| + ImageConverterFeature::Levels; + } } converter; const char data[8]{}; @@ -2339,7 +2435,10 @@ void AbstractImageConverterTest::convertCompressedLevels2DToDataNotImplemented() CORRADE_SKIP_IF_NO_ASSERT(); struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertCompressedLevels2DToData; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::ConvertCompressed2DToData| + ImageConverterFeature::Levels; + } } converter; const char data[8]{}; @@ -2353,7 +2452,10 @@ void AbstractImageConverterTest::convertCompressedLevels3DToDataNotImplemented() CORRADE_SKIP_IF_NO_ASSERT(); struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertCompressedLevels3DToData; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::ConvertCompressed3DToData| + ImageConverterFeature::Levels; + } } converter; const char data[8]{}; @@ -2367,7 +2469,10 @@ void AbstractImageConverterTest::convertCompressedLevels1DToDataCustomDeleter() CORRADE_SKIP_IF_NO_ASSERT(); struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertCompressedLevels1DToData; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::ConvertCompressed1DToData| + ImageConverterFeature::Levels; + } Containers::Optional> doConvertToData(Containers::ArrayView) override { return Containers::Array{nullptr, 0, [](char*, std::size_t) {}}; } @@ -2384,7 +2489,10 @@ void AbstractImageConverterTest::convertCompressedLevels2DToDataCustomDeleter() CORRADE_SKIP_IF_NO_ASSERT(); struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertCompressedLevels2DToData; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::ConvertCompressed2DToData| + ImageConverterFeature::Levels; + } Containers::Optional> doConvertToData(Containers::ArrayView) override { return Containers::Array{nullptr, 0, [](char*, std::size_t) {}}; } @@ -2401,7 +2509,10 @@ void AbstractImageConverterTest::convertCompressedLevels3DToDataCustomDeleter() CORRADE_SKIP_IF_NO_ASSERT(); struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertCompressedLevels3DToData; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::ConvertCompressed3DToData| + ImageConverterFeature::Levels; + } Containers::Optional> doConvertToData(Containers::ArrayView) override { return Containers::Array{nullptr, 0, [](char*, std::size_t) {}}; } @@ -2416,7 +2527,10 @@ void AbstractImageConverterTest::convertCompressedLevels3DToDataCustomDeleter() void AbstractImageConverterTest::convert1DToDataThroughLevels() { struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertLevels1DToData; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::Convert1DToData| + ImageConverterFeature::Levels; + } Containers::Optional> doConvertToData(Containers::ArrayView imageLevels) override { return Containers::Array{nullptr, std::size_t(imageLevels[0].size().product()*imageLevels.size())}; } @@ -2430,7 +2544,10 @@ void AbstractImageConverterTest::convert1DToDataThroughLevels() { void AbstractImageConverterTest::convert2DToDataThroughLevels() { struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertLevels2DToData; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::Convert2DToData| + ImageConverterFeature::Levels; + } Containers::Optional> doConvertToData(Containers::ArrayView imageLevels) override { return Containers::Array{nullptr, std::size_t(imageLevels[0].size().product()*imageLevels.size())}; } @@ -2444,7 +2561,10 @@ void AbstractImageConverterTest::convert2DToDataThroughLevels() { void AbstractImageConverterTest::convert3DToDataThroughLevels() { struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertLevels3DToData; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::Convert3DToData| + ImageConverterFeature::Levels; + } Containers::Optional> doConvertToData(Containers::ArrayView imageLevels) override { return Containers::Array{nullptr, std::size_t(imageLevels[0].size().product()*imageLevels.size())}; } @@ -2458,7 +2578,10 @@ void AbstractImageConverterTest::convert3DToDataThroughLevels() { void AbstractImageConverterTest::convertCompressed1DToDataThroughLevels() { struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertCompressedLevels1DToData; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::ConvertCompressed1DToData| + ImageConverterFeature::Levels; + } Containers::Optional> doConvertToData(Containers::ArrayView imageLevels) override { return Containers::Array{nullptr, std::size_t(imageLevels[0].size().product()*imageLevels.size())}; } @@ -2472,7 +2595,10 @@ void AbstractImageConverterTest::convertCompressed1DToDataThroughLevels() { void AbstractImageConverterTest::convertCompressed2DToDataThroughLevels() { struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertCompressedLevels2DToData; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::ConvertCompressed2DToData| + ImageConverterFeature::Levels; + } Containers::Optional> doConvertToData(Containers::ArrayView imageLevels) override { return Containers::Array{nullptr, std::size_t(imageLevels[0].size().product()*imageLevels.size())}; } @@ -2486,7 +2612,10 @@ void AbstractImageConverterTest::convertCompressed2DToDataThroughLevels() { void AbstractImageConverterTest::convertCompressed3DToDataThroughLevels() { struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertCompressedLevels3DToData; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::ConvertCompressed3DToData| + ImageConverterFeature::Levels; + } Containers::Optional> doConvertToData(Containers::ArrayView imageLevels) override { return Containers::Array{nullptr, std::size_t(imageLevels[0].size().product()*imageLevels.size())}; } @@ -3310,7 +3439,10 @@ void AbstractImageConverterTest::convertImageData3DToFile() { void AbstractImageConverterTest::convertLevels1DToFile() { struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertLevels1DToFile; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::Convert1DToFile| + ImageConverterFeature::Levels; + } bool doConvertToFile(Containers::ArrayView imageLevels, Containers::StringView filename) override { return Utility::Path::write(filename, Containers::arrayView( {char(imageLevels[0].size()[0]), char(imageLevels.size())})); @@ -3334,7 +3466,10 @@ void AbstractImageConverterTest::convertLevels1DToFile() { void AbstractImageConverterTest::convertLevels2DToFile() { struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertLevels2DToFile; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::Convert2DToFile| + ImageConverterFeature::Levels; + } bool doConvertToFile(Containers::ArrayView imageLevels, Containers::StringView filename) override { return Utility::Path::write(filename, Containers::arrayView( {char(imageLevels[0].size().x()), char(imageLevels[0].size().y()), char(imageLevels.size())})); @@ -3358,7 +3493,10 @@ void AbstractImageConverterTest::convertLevels2DToFile() { void AbstractImageConverterTest::convertLevels3DToFile() { struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertLevels3DToFile; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::Convert3DToFile| + ImageConverterFeature::Levels; + } bool doConvertToFile(Containers::ArrayView imageLevels, Containers::StringView filename) override { return Utility::Path::write(filename, Containers::arrayView( {char(imageLevels[0].size().x()), char(imageLevels[0].size().y()), char(imageLevels[0].size().z()), char(imageLevels.size())})); @@ -3383,7 +3521,8 @@ void AbstractImageConverterTest::convertLevels3DToFile() { void AbstractImageConverterTest::convertLevels1DToFileFailed() { struct: AbstractImageConverter { ImageConverterFeatures doFeatures() const override { - return ImageConverterFeature::ConvertLevels1DToFile; + return ImageConverterFeature::Convert1DToFile| + ImageConverterFeature::Levels; } bool doConvertToFile(Containers::ArrayView, Containers::StringView) override { return {}; @@ -3402,7 +3541,8 @@ void AbstractImageConverterTest::convertLevels1DToFileFailed() { void AbstractImageConverterTest::convertLevels2DToFileFailed() { struct: AbstractImageConverter { ImageConverterFeatures doFeatures() const override { - return ImageConverterFeature::ConvertLevels2DToFile; + return ImageConverterFeature::Convert2DToFile| + ImageConverterFeature::Levels; } bool doConvertToFile(Containers::ArrayView, Containers::StringView) override { return {}; @@ -3421,7 +3561,8 @@ void AbstractImageConverterTest::convertLevels2DToFileFailed() { void AbstractImageConverterTest::convertLevels3DToFileFailed() { struct: AbstractImageConverter { ImageConverterFeatures doFeatures() const override { - return ImageConverterFeature::ConvertLevels3DToFile; + return ImageConverterFeature::Convert3DToFile| + ImageConverterFeature::Levels; } bool doConvertToFile(Containers::ArrayView, Containers::StringView) override { return {}; @@ -3439,7 +3580,10 @@ void AbstractImageConverterTest::convertLevels3DToFileFailed() { void AbstractImageConverterTest::convertLevels1DToFileThroughData() { struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertLevels1DToData; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::Convert1DToData| + ImageConverterFeature::Levels; + } Containers::Optional> doConvertToData(Containers::ArrayView imageLevels) override { return Containers::array({char(imageLevels[0].size()[0]), char(imageLevels.size())}); @@ -3465,7 +3609,10 @@ void AbstractImageConverterTest::convertLevels1DToFileThroughData() { void AbstractImageConverterTest::convertLevels2DToFileThroughData() { struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertLevels2DToData; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::Convert2DToData| + ImageConverterFeature::Levels; + } Containers::Optional> doConvertToData(Containers::ArrayView imageLevels) override { return Containers::array({char(imageLevels[0].size().x()), char(imageLevels[0].size().y()), char(imageLevels.size())}); @@ -3490,7 +3637,10 @@ void AbstractImageConverterTest::convertLevels2DToFileThroughData() { void AbstractImageConverterTest::convertLevels3DToFileThroughData() { struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertLevels3DToData; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::Convert3DToData| + ImageConverterFeature::Levels; + } Containers::Optional> doConvertToData(Containers::ArrayView imageLevels) override { return Containers::array({char(imageLevels[0].size().x()), char(imageLevels[0].size().y()), char(imageLevels[0].size().z()), char(imageLevels.size())}); @@ -3515,7 +3665,10 @@ void AbstractImageConverterTest::convertLevels3DToFileThroughData() { void AbstractImageConverterTest::convertLevels1DToFileThroughDataFailed() { struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertLevels1DToData; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::Convert1DToData| + ImageConverterFeature::Levels; + } Containers::Optional> doConvertToData(Containers::ArrayView) override { return {}; @@ -3540,7 +3693,10 @@ void AbstractImageConverterTest::convertLevels1DToFileThroughDataFailed() { void AbstractImageConverterTest::convertLevels2DToFileThroughDataFailed() { struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertLevels2DToData; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::Convert2DToData| + ImageConverterFeature::Levels; + } Containers::Optional> doConvertToData(Containers::ArrayView) override { return {}; @@ -3565,7 +3721,10 @@ void AbstractImageConverterTest::convertLevels2DToFileThroughDataFailed() { void AbstractImageConverterTest::convertLevels3DToFileThroughDataFailed() { struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertLevels3DToData; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::Convert3DToData| + ImageConverterFeature::Levels; + } Containers::Optional> doConvertToData(Containers::ArrayView) override { return {}; @@ -3590,7 +3749,10 @@ void AbstractImageConverterTest::convertLevels3DToFileThroughDataFailed() { void AbstractImageConverterTest::convertLevels1DToFileThroughDataNotWritable() { struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertLevels1DToData; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::Convert1DToData| + ImageConverterFeature::Levels; + } Containers::Optional> doConvertToData(Containers::ArrayView) override { return Containers::array({'\x00'}); }; @@ -3607,7 +3769,10 @@ void AbstractImageConverterTest::convertLevels1DToFileThroughDataNotWritable() { void AbstractImageConverterTest::convertLevels2DToFileThroughDataNotWritable() { struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertLevels2DToData; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::Convert2DToData| + ImageConverterFeature::Levels; + } Containers::Optional> doConvertToData(Containers::ArrayView) override { return Containers::array({'\x00'}); @@ -3625,7 +3790,10 @@ void AbstractImageConverterTest::convertLevels2DToFileThroughDataNotWritable() { void AbstractImageConverterTest::convertLevels3DToFileThroughDataNotWritable() { struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertLevels3DToData; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::Convert3DToData| + ImageConverterFeature::Levels; + } Containers::Optional> doConvertToData(Containers::ArrayView) override { return Containers::array({'\x00'}); @@ -3645,7 +3813,10 @@ void AbstractImageConverterTest::convertLevels1DToFileInvalidImage() { CORRADE_SKIP_IF_NO_ASSERT(); struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertLevels1DToFile; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::Convert1DToFile| + ImageConverterFeature::Levels; + } } converter; std::ostringstream out; @@ -3658,7 +3829,10 @@ void AbstractImageConverterTest::convertLevels2DToFileInvalidImage() { CORRADE_SKIP_IF_NO_ASSERT(); struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertLevels2DToFile; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::Convert2DToFile| + ImageConverterFeature::Levels; + } } converter; std::ostringstream out; @@ -3671,7 +3845,10 @@ void AbstractImageConverterTest::convertLevels3DToFileInvalidImage() { CORRADE_SKIP_IF_NO_ASSERT(); struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertLevels3DToFile; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::Convert3DToFile| + ImageConverterFeature::Levels; + } } converter; std::ostringstream out; @@ -3684,7 +3861,10 @@ void AbstractImageConverterTest::convertLevels1DToFileNotImplemented() { CORRADE_SKIP_IF_NO_ASSERT(); struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertLevels1DToFile; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::Convert1DToFile| + ImageConverterFeature::Levels; + } } converter; const char data[4]{}; @@ -3698,7 +3878,10 @@ void AbstractImageConverterTest::convertLevels2DToFileNotImplemented() { CORRADE_SKIP_IF_NO_ASSERT(); struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertLevels2DToFile; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::Convert2DToFile| + ImageConverterFeature::Levels; + } } converter; const char data[4]{}; @@ -3712,7 +3895,10 @@ void AbstractImageConverterTest::convertLevels3DToFileNotImplemented() { CORRADE_SKIP_IF_NO_ASSERT(); struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertLevels3DToFile; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::Convert3DToFile| + ImageConverterFeature::Levels; + } } converter; const char data[4]{}; @@ -3724,7 +3910,10 @@ void AbstractImageConverterTest::convertLevels3DToFileNotImplemented() { void AbstractImageConverterTest::convertCompressedLevels1DToFile() { struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertCompressedLevels1DToFile; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::ConvertCompressed1DToFile| + ImageConverterFeature::Levels; + } bool doConvertToFile(Containers::ArrayView imageLevels, Containers::StringView filename) override { return Utility::Path::write(filename, Containers::arrayView( {char(imageLevels[0].size()[0]), char(imageLevels.size())})); @@ -3747,7 +3936,10 @@ void AbstractImageConverterTest::convertCompressedLevels1DToFile() { void AbstractImageConverterTest::convertCompressedLevels2DToFile() { struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertCompressedLevels2DToFile; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::ConvertCompressed2DToFile| + ImageConverterFeature::Levels; + } bool doConvertToFile(Containers::ArrayView imageLevels, Containers::StringView filename) override { return Utility::Path::write(filename, Containers::arrayView( {char(imageLevels[0].size().x()), char(imageLevels[0].size().y()), char(imageLevels.size())})); @@ -3770,7 +3962,10 @@ void AbstractImageConverterTest::convertCompressedLevels2DToFile() { void AbstractImageConverterTest::convertCompressedLevels3DToFile() { struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertCompressedLevels3DToFile; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::ConvertCompressed3DToFile| + ImageConverterFeature::Levels; + } bool doConvertToFile(Containers::ArrayView imageLevels, Containers::StringView filename) override { return Utility::Path::write(filename, Containers::arrayView( {char(imageLevels[0].size().x()), char(imageLevels[0].size().y()), char(imageLevels[0].size().z()), char(imageLevels.size())})); @@ -3794,7 +3989,8 @@ void AbstractImageConverterTest::convertCompressedLevels3DToFile() { void AbstractImageConverterTest::convertCompressedLevels1DToFileFailed() { struct: AbstractImageConverter { ImageConverterFeatures doFeatures() const override { - return ImageConverterFeature::ConvertCompressedLevels1DToFile; + return ImageConverterFeature::ConvertCompressed1DToFile| + ImageConverterFeature::Levels; } bool doConvertToFile(Containers::ArrayView, Containers::StringView) override { return {}; @@ -3813,7 +4009,8 @@ void AbstractImageConverterTest::convertCompressedLevels1DToFileFailed() { void AbstractImageConverterTest::convertCompressedLevels2DToFileFailed() { struct: AbstractImageConverter { ImageConverterFeatures doFeatures() const override { - return ImageConverterFeature::ConvertCompressedLevels2DToFile; + return ImageConverterFeature::ConvertCompressed2DToFile| + ImageConverterFeature::Levels; } bool doConvertToFile(Containers::ArrayView, Containers::StringView) override { return {}; @@ -3832,7 +4029,8 @@ void AbstractImageConverterTest::convertCompressedLevels2DToFileFailed() { void AbstractImageConverterTest::convertCompressedLevels3DToFileFailed() { struct: AbstractImageConverter { ImageConverterFeatures doFeatures() const override { - return ImageConverterFeature::ConvertCompressedLevels3DToFile; + return ImageConverterFeature::ConvertCompressed3DToFile| + ImageConverterFeature::Levels; } bool doConvertToFile(Containers::ArrayView, Containers::StringView) override { return {}; @@ -3850,7 +4048,10 @@ void AbstractImageConverterTest::convertCompressedLevels3DToFileFailed() { void AbstractImageConverterTest::convertCompressedLevels1DToFileThroughData() { struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertCompressedLevels1DToData; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::ConvertCompressed1DToData| + ImageConverterFeature::Levels; + } Containers::Optional> doConvertToData(Containers::ArrayView imageLevels) override { return Containers::array({char(imageLevels[0].size()[0]), char(imageLevels.size())}); @@ -3875,7 +4076,10 @@ void AbstractImageConverterTest::convertCompressedLevels1DToFileThroughData() { void AbstractImageConverterTest::convertCompressedLevels2DToFileThroughData() { struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertCompressedLevels2DToData; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::ConvertCompressed2DToData| + ImageConverterFeature::Levels; + } Containers::Optional> doConvertToData(Containers::ArrayView imageLevels) override { return Containers::array({char(imageLevels[0].size().x()), char(imageLevels[0].size().y()), char(imageLevels.size())}); @@ -3900,7 +4104,10 @@ void AbstractImageConverterTest::convertCompressedLevels2DToFileThroughData() { void AbstractImageConverterTest::convertCompressedLevels3DToFileThroughData() { struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertCompressedLevels3DToData; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::ConvertCompressed3DToData| + ImageConverterFeature::Levels; + } Containers::Optional> doConvertToData(Containers::ArrayView imageLevels) override { return Containers::array({char(imageLevels[0].size().x()), char(imageLevels[0].size().y()), char(imageLevels[0].size().z()), char(imageLevels.size())}); @@ -3925,7 +4132,10 @@ void AbstractImageConverterTest::convertCompressedLevels3DToFileThroughData() { void AbstractImageConverterTest::convertCompressedLevels1DToFileThroughDataFailed() { struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertCompressedLevels1DToData; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::ConvertCompressed1DToData| + ImageConverterFeature::Levels; + } Containers::Optional> doConvertToData(Containers::ArrayView) override { return {}; @@ -3950,7 +4160,10 @@ void AbstractImageConverterTest::convertCompressedLevels1DToFileThroughDataFaile void AbstractImageConverterTest::convertCompressedLevels2DToFileThroughDataFailed() { struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertCompressedLevels2DToData; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::ConvertCompressed2DToData| + ImageConverterFeature::Levels; + } Containers::Optional> doConvertToData(Containers::ArrayView) override { return {}; @@ -3975,7 +4188,10 @@ void AbstractImageConverterTest::convertCompressedLevels2DToFileThroughDataFaile void AbstractImageConverterTest::convertCompressedLevels3DToFileThroughDataFailed() { struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertCompressedLevels3DToData; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::ConvertCompressed3DToData| + ImageConverterFeature::Levels; + } Containers::Optional> doConvertToData(Containers::ArrayView) override { return {}; @@ -4000,7 +4216,10 @@ void AbstractImageConverterTest::convertCompressedLevels3DToFileThroughDataFaile void AbstractImageConverterTest::convertCompressedLevels1DToFileThroughDataNotWritable() { struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertCompressedLevels1DToData; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::ConvertCompressed1DToData| + ImageConverterFeature::Levels; + } Containers::Optional> doConvertToData(Containers::ArrayView) override { return Containers::array({'\x00'}); @@ -4018,7 +4237,10 @@ void AbstractImageConverterTest::convertCompressedLevels1DToFileThroughDataNotWr void AbstractImageConverterTest::convertCompressedLevels2DToFileThroughDataNotWritable() { struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertCompressedLevels2DToData; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::ConvertCompressed2DToData| + ImageConverterFeature::Levels; + } Containers::Optional> doConvertToData(Containers::ArrayView) override { return Containers::array({'\x00'}); @@ -4036,7 +4258,10 @@ void AbstractImageConverterTest::convertCompressedLevels2DToFileThroughDataNotWr void AbstractImageConverterTest::convertCompressedLevels3DToFileThroughDataNotWritable() { struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertCompressedLevels3DToData; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::ConvertCompressed3DToData| + ImageConverterFeature::Levels; + } Containers::Optional> doConvertToData(Containers::ArrayView) override { return Containers::array({'\x00'}); @@ -4056,7 +4281,10 @@ void AbstractImageConverterTest::convertCompressedLevels1DToFileInvalidImage() { CORRADE_SKIP_IF_NO_ASSERT(); struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertCompressedLevels1DToFile; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::ConvertCompressed1DToFile| + ImageConverterFeature::Levels; + } } converter; std::ostringstream out; @@ -4069,7 +4297,10 @@ void AbstractImageConverterTest::convertCompressedLevels2DToFileInvalidImage() { CORRADE_SKIP_IF_NO_ASSERT(); struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertCompressedLevels2DToFile; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::ConvertCompressed2DToFile| + ImageConverterFeature::Levels; + } } converter; std::ostringstream out; @@ -4082,7 +4313,10 @@ void AbstractImageConverterTest::convertCompressedLevels3DToFileInvalidImage() { CORRADE_SKIP_IF_NO_ASSERT(); struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertCompressedLevels3DToFile; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::ConvertCompressed3DToFile| + ImageConverterFeature::Levels; + } } converter; std::ostringstream out; @@ -4095,7 +4329,10 @@ void AbstractImageConverterTest::convertCompressedLevels1DToFileNotImplemented() CORRADE_SKIP_IF_NO_ASSERT(); struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertCompressedLevels1DToFile; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::ConvertCompressed1DToFile| + ImageConverterFeature::Levels; + } } converter; const char data[8]{}; @@ -4109,7 +4346,10 @@ void AbstractImageConverterTest::convertCompressedLevels2DToFileNotImplemented() CORRADE_SKIP_IF_NO_ASSERT(); struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertCompressedLevels2DToFile; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::ConvertCompressed2DToFile| + ImageConverterFeature::Levels; + } } converter; const char data[8]{}; @@ -4123,7 +4363,10 @@ void AbstractImageConverterTest::convertCompressedLevels3DToFileNotImplemented() CORRADE_SKIP_IF_NO_ASSERT(); struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertCompressedLevels3DToFile; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::ConvertCompressed3DToFile| + ImageConverterFeature::Levels; + } } converter; const char data[8]{}; @@ -4135,7 +4378,10 @@ void AbstractImageConverterTest::convertCompressedLevels3DToFileNotImplemented() void AbstractImageConverterTest::convert1DToFileThroughLevels() { struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertLevels1DToFile; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::Convert1DToFile| + ImageConverterFeature::Levels; + } bool doConvertToFile(Containers::ArrayView imageLevels, Containers::StringView filename) override { return Utility::Path::write(filename, Containers::arrayView( {char(imageLevels[0].size()[0]), char(imageLevels.size())})); @@ -4154,7 +4400,10 @@ void AbstractImageConverterTest::convert1DToFileThroughLevels() { void AbstractImageConverterTest::convert2DToFileThroughLevels() { struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertLevels2DToFile; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::Convert2DToFile| + ImageConverterFeature::Levels; + } bool doConvertToFile(Containers::ArrayView imageLevels, Containers::StringView filename) override { return Utility::Path::write(filename, Containers::arrayView( {char(imageLevels[0].size().x()), char(imageLevels[0].size().y()), char(imageLevels.size())})); @@ -4173,7 +4422,10 @@ void AbstractImageConverterTest::convert2DToFileThroughLevels() { void AbstractImageConverterTest::convert3DToFileThroughLevels() { struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertLevels3DToFile; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::Convert3DToFile| + ImageConverterFeature::Levels; + } bool doConvertToFile(Containers::ArrayView imageLevels, Containers::StringView filename) override { return Utility::Path::write(filename, Containers::arrayView( {char(imageLevels[0].size().x()), char(imageLevels[0].size().y()), char(imageLevels[0].size().z()), char(imageLevels.size())})); @@ -4192,7 +4444,10 @@ void AbstractImageConverterTest::convert3DToFileThroughLevels() { void AbstractImageConverterTest::convertCompressed1DToFileThroughLevels() { struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertCompressedLevels1DToFile; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::ConvertCompressed1DToFile| + ImageConverterFeature::Levels; + } bool doConvertToFile(Containers::ArrayView imageLevels, Containers::StringView filename) override { return Utility::Path::write(filename, Containers::arrayView( {char(imageLevels[0].size()[0]), char(imageLevels.size())})); @@ -4211,7 +4466,10 @@ void AbstractImageConverterTest::convertCompressed1DToFileThroughLevels() { void AbstractImageConverterTest::convertCompressed2DToFileThroughLevels() { struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertCompressedLevels2DToFile; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::ConvertCompressed2DToFile| + ImageConverterFeature::Levels; + } bool doConvertToFile(Containers::ArrayView imageLevels, Containers::StringView filename) override { return Utility::Path::write(filename, Containers::arrayView( {char(imageLevels[0].size().x()), char(imageLevels[0].size().y()), char(imageLevels.size())})); @@ -4230,7 +4488,10 @@ void AbstractImageConverterTest::convertCompressed2DToFileThroughLevels() { void AbstractImageConverterTest::convertCompressed3DToFileThroughLevels() { struct: AbstractImageConverter { - ImageConverterFeatures doFeatures() const override { return ImageConverterFeature::ConvertCompressedLevels3DToFile; } + ImageConverterFeatures doFeatures() const override { + return ImageConverterFeature::ConvertCompressed3DToFile| + ImageConverterFeature::Levels; + } bool doConvertToFile(Containers::ArrayView imageLevels, Containers::StringView filename) override { return Utility::Path::write(filename, Containers::arrayView( {char(imageLevels[0].size().x()), char(imageLevels[0].size().y()), char(imageLevels[0].size().z()), char(imageLevels.size())})); @@ -4254,6 +4515,17 @@ void AbstractImageConverterTest::debugFeature() { CORRADE_COMPARE(out.str(), "Trade::ImageConverterFeature::ConvertCompressed2D Trade::ImageConverterFeature(0xdeadbeef)\n"); } +#ifdef MAGNUM_BUILD_DEPRECATED +void AbstractImageConverterTest::debugFeatureDeprecated() { + std::ostringstream out; + + CORRADE_IGNORE_DEPRECATED_PUSH + Debug{&out} << ImageConverterFeature::ConvertCompressedLevels1DToData << ImageConverterFeature::ConvertLevels3DToFile; + CORRADE_IGNORE_DEPRECATED_POP + CORRADE_COMPARE(out.str(), "Trade::ImageConverterFeature::ConvertCompressed1DToData|Trade::ImageConverterFeature::Levels Trade::ImageConverterFeature::Convert3DToFile|Trade::ImageConverterFeature::Levels\n"); +} +#endif + void AbstractImageConverterTest::debugFeatures() { std::ostringstream out; @@ -4275,34 +4547,6 @@ void AbstractImageConverterTest::debugFeaturesSupersets() { std::ostringstream out; Debug{&out} << (ImageConverterFeature::ConvertCompressed1DToData|ImageConverterFeature::ConvertCompressed1DToFile); CORRADE_COMPARE(out.str(), "Trade::ImageConverterFeature::ConvertCompressed1DToData\n"); - - /* ConvertLevels*DToData is a superset of ConvertLevels*DToFile, so only - one should be printed */ - } { - std::ostringstream out; - Debug{&out} << (ImageConverterFeature::ConvertLevels2DToData|ImageConverterFeature::ConvertLevels2DToFile); - CORRADE_COMPARE(out.str(), "Trade::ImageConverterFeature::ConvertLevels2DToData\n"); - - /* ConvertLevels*DToData is *also* a superset of Convert*DToData, so only - one should be printed */ - } { - std::ostringstream out; - Debug{&out} << (ImageConverterFeature::ConvertLevels3DToData|ImageConverterFeature::Convert3DToData); - CORRADE_COMPARE(out.str(), "Trade::ImageConverterFeature::ConvertLevels3DToData\n"); - - /* ConvertCompressedLevels*DToData is a superset of - ConvertCompressedLevels*DToFile, so only one should be printed */ - } { - std::ostringstream out; - Debug{&out} << (ImageConverterFeature::ConvertCompressedLevels1DToData|ImageConverterFeature::ConvertCompressedLevels1DToFile); - CORRADE_COMPARE(out.str(), "Trade::ImageConverterFeature::ConvertCompressedLevels1DToData\n"); - - /* ConvertCompressedLevels*DToData is *also* a superset of - ConvertCompressed*DToData, so only one should be printed */ - } { - std::ostringstream out; - Debug{&out} << (ImageConverterFeature::ConvertCompressedLevels3DToData|ImageConverterFeature::ConvertCompressed3DToData); - CORRADE_COMPARE(out.str(), "Trade::ImageConverterFeature::ConvertCompressedLevels3DToData\n"); } } diff --git a/src/Magnum/Trade/imageconverter.cpp b/src/Magnum/Trade/imageconverter.cpp index c46e78843..2b5e8a2c8 100644 --- a/src/Magnum/Trade/imageconverter.cpp +++ b/src/Magnum/Trade/imageconverter.cpp @@ -1021,10 +1021,8 @@ no -C / --converter is specified, AnyImageConverter is used.)") Trade::ImageConverterFeature::ConvertCompressed3DToFile : Trade::ImageConverterFeature::Convert3DToFile; } else CORRADE_INTERNAL_ASSERT_UNREACHABLE(); - /** @todo use a sane flag once the feature enum is ... sane */ - constexpr Trade::ImageConverterFeatures ImageConverterFeatureLevels = - Trade::ImageConverterFeature::ConvertLevels1DToFile & ~Trade::ImageConverterFeature::Convert1DToFile; - if(outputIsMultiLevel) expectedFeatures |= ImageConverterFeatureLevels; + if(outputIsMultiLevel) + expectedFeatures |= Trade::ImageConverterFeature::Levels; if(!(converter->features() >= expectedFeatures)) { Error err; err << converterName << "doesn't support"; diff --git a/src/MagnumPlugins/AnyImageConverter/AnyImageConverter.cpp b/src/MagnumPlugins/AnyImageConverter/AnyImageConverter.cpp index 9e50dbd45..a27e5ce14 100644 --- a/src/MagnumPlugins/AnyImageConverter/AnyImageConverter.cpp +++ b/src/MagnumPlugins/AnyImageConverter/AnyImageConverter.cpp @@ -54,12 +54,7 @@ ImageConverterFeatures AnyImageConverter::doFeatures() const { ImageConverterFeature::ConvertCompressed1DToFile| ImageConverterFeature::ConvertCompressed2DToFile| ImageConverterFeature::ConvertCompressed3DToFile| - ImageConverterFeature::ConvertLevels1DToFile| - ImageConverterFeature::ConvertLevels2DToFile| - ImageConverterFeature::ConvertLevels3DToFile| - ImageConverterFeature::ConvertCompressedLevels1DToFile| - ImageConverterFeature::ConvertCompressedLevels2DToFile| - ImageConverterFeature::ConvertCompressedLevels3DToFile; + ImageConverterFeature::Levels; } bool AnyImageConverter::doConvertToFile(const ImageView1D& image, const Containers::StringView filename) {