Browse Source

[wip] Trade: rebuild AbstractImageConverter around ImageData.

And not views, as ImageData contains extra metadata. Currently just the
importer state, but eventually that will be changed to a generic
key/value store for stuff like color correction, EXIF, gamma, etc., and
if the plugin interfaces would consume only views (which don't and won't
have such key/value data), the data would get lost.

A similar approach is being taken with the AbstractSceneConverter.

TODO: implement this to be more than just a TODO
sceneconverter
Vladimír Vondruš 4 years ago
parent
commit
eaf8d7cdc8
  1. 6
      src/Magnum/Trade/AbstractImageConverter.cpp
  2. 2
      src/Magnum/Trade/AbstractImageConverter.h

6
src/Magnum/Trade/AbstractImageConverter.cpp

@ -272,6 +272,8 @@ Containers::Optional<ImageData3D> AbstractImageConverter::convert(const ImageDat
#ifndef CORRADE_NO_ASSERT
namespace {
/** @todo reuse from AbstractSceneConverter when both take ImageData and not
views */
template<UnsignedInt dimensions, template<UnsignedInt, class> class View> bool checkImageValidity(const char* const messagePrefix, const View<dimensions, const char>& image) {
/* At some point there might be a file format that allows zero-sized
images, but so far I don't know about any. When such format appears,
@ -539,6 +541,8 @@ AbstractImageConverter::convertToData(const ImageData3D& image) {
#ifndef CORRADE_NO_ASSERT
namespace {
/** @todo reuse from AbstractSceneConverter when both take ImageData and not
views */
template<UnsignedInt dimensions> bool checkImageValidity(const char* const messagePrefix, const Containers::ArrayView<const BasicImageView<dimensions>> imageLevels) {
CORRADE_ASSERT(!imageLevels.isEmpty(),
messagePrefix << "at least one image has to be specified", false);
@ -562,6 +566,8 @@ template<UnsignedInt dimensions> bool checkImageValidity(const char* const messa
return true;
}
/** @todo reuse from AbstractSceneConverter when both take ImageData and not
views */
template<UnsignedInt dimensions> bool checkImageValidity(const char* const messagePrefix, const Containers::ArrayView<const BasicCompressedImageView<dimensions>> imageLevels) {
CORRADE_ASSERT(!imageLevels.isEmpty(),
messagePrefix << "at least one image has to be specified", false);

2
src/Magnum/Trade/AbstractImageConverter.h

@ -1015,6 +1015,8 @@ class MAGNUM_TRADE_EXPORT AbstractImageConverter: public PluginManager::Abstract
#endif
convertToData(const CompressedImageView3D& image);
/** @todo with extras, this all needs to take a Data */
/**
* @brief Convert a 1D image data to a raw data
* @m_since_latest

Loading…
Cancel
Save