Browse Source

Use Basic[Mutable]ImageView aliases instead of nondescript raw types.

pull/362/head
Vladimír Vondruš 7 years ago
parent
commit
1b7c2d9666
  1. 6
      doc/changelog.dox
  2. 8
      src/Magnum/GL/Texture.h
  3. 8
      src/Magnum/GL/TextureArray.h
  4. 16
      src/Magnum/Image.cpp
  5. 8
      src/Magnum/Image.h
  6. 140
      src/Magnum/ImageView.h
  7. 28
      src/Magnum/Magnum.h
  8. 24
      src/Magnum/Trade/ImageData.cpp
  9. 8
      src/Magnum/Trade/ImageData.h

6
doc/changelog.dox

@ -46,9 +46,9 @@ See also:
- New @ref Image::pixels(), @ref ImageView::pixels() and
@ref Trade::ImageData::pixels() accessors for convenient direct access to
pixel data of any image
- New @ref MutableImageView2D "MutableImageView*D" and
@ref CompressedMutableImageView2D "CompressedMutableImageView*D" types for
mutable views onto image data
- New @ref BasicMutableImageView "MutableImageView*D" and
@ref BasicMutableCompressedImageView "MutableCompressedImageView*D" types
for mutable views onto image data
@subsubsection changelog-latest-new-audio Audio library

8
src/Magnum/GL/Texture.h

@ -1037,7 +1037,7 @@ template<UnsignedInt dimensions> class Texture: public AbstractTexture {
* @deprecated_gl Prefer to use @ref setStorage() and @ref setSubImage()
* instead.
*/
Texture<dimensions>& setImage(Int level, TextureFormat internalFormat, const ImageView<dimensions, const char>& image) {
Texture<dimensions>& setImage(Int level, TextureFormat internalFormat, const BasicImageView<dimensions>& image) {
DataHelper<dimensions>::setImage(*this, level, internalFormat, image);
return *this;
}
@ -1093,7 +1093,7 @@ template<UnsignedInt dimensions> class Texture: public AbstractTexture {
* @deprecated_gl Prefer to use @ref setStorage() and
* @ref setCompressedSubImage() instead.
*/
Texture<dimensions>& setCompressedImage(Int level, const CompressedImageView<dimensions, const char>& image) {
Texture<dimensions>& setCompressedImage(Int level, const BasicCompressedImageView<dimensions>& image) {
DataHelper<dimensions>::setCompressedImage(*this, level, image);
return *this;
}
@ -1167,7 +1167,7 @@ template<UnsignedInt dimensions> class Texture: public AbstractTexture {
* able to use @ref setStorage() as it uses implicit @ref PixelType
* value.
*/
Texture<dimensions>& setSubImage(Int level, const VectorTypeFor<dimensions, Int>& offset, const ImageView<dimensions, const char>& image) {
Texture<dimensions>& setSubImage(Int level, const VectorTypeFor<dimensions, Int>& offset, const BasicImageView<dimensions>& image) {
DataHelper<Dimensions>::setSubImage(*this, level, offset, image);
return *this;
}
@ -1219,7 +1219,7 @@ template<UnsignedInt dimensions> class Texture: public AbstractTexture {
* @requires_gl Non-default @ref CompressedPixelStorage is not
* available in OpenGL ES and WebGL.
*/
Texture<dimensions>& setCompressedSubImage(Int level, const VectorTypeFor<dimensions, Int>& offset, const CompressedImageView<dimensions, const char>& image) {
Texture<dimensions>& setCompressedSubImage(Int level, const VectorTypeFor<dimensions, Int>& offset, const BasicCompressedImageView<dimensions>& image) {
DataHelper<Dimensions>::setCompressedSubImage(*this, level, offset, image);
return *this;
}

8
src/Magnum/GL/TextureArray.h

@ -699,7 +699,7 @@ template<UnsignedInt dimensions> class TextureArray: public AbstractTexture {
* @deprecated_gl Prefer to use @ref setStorage() and @ref setSubImage()
* instead.
*/
TextureArray<dimensions>& setImage(Int level, TextureFormat internalFormat, const ImageView<dimensions+1, const char>& image) {
TextureArray<dimensions>& setImage(Int level, TextureFormat internalFormat, const BasicImageView<dimensions+1>& image) {
DataHelper<dimensions+1>::setImage(*this, level, internalFormat, image);
return *this;
}
@ -734,7 +734,7 @@ template<UnsignedInt dimensions> class TextureArray: public AbstractTexture {
* @deprecated_gl Prefer to use @ref setStorage() and
* @ref setCompressedSubImage() instead.
*/
TextureArray<dimensions>& setCompressedImage(Int level, const CompressedImageView<dimensions+1, const char>& image) {
TextureArray<dimensions>& setCompressedImage(Int level, const BasicCompressedImageView<dimensions+1>& image) {
DataHelper<dimensions+1>::setCompressedImage(*this, level, image);
return *this;
}
@ -781,7 +781,7 @@ template<UnsignedInt dimensions> class TextureArray: public AbstractTexture {
* eventually @fn_gl{ActiveTexture}, @fn_gl{BindTexture} and
* @fn_gl_keyword{TexSubImage2D} / @fn_gl_keyword{TexSubImage3D}
*/
TextureArray<dimensions>& setSubImage(Int level, const VectorTypeFor<dimensions+1, Int>& offset, const ImageView<dimensions+1, const char>& image) {
TextureArray<dimensions>& setSubImage(Int level, const VectorTypeFor<dimensions+1, Int>& offset, const BasicImageView<dimensions+1>& image) {
DataHelper<dimensions+1>::setSubImage(*this, level, offset, image);
return *this;
}
@ -818,7 +818,7 @@ template<UnsignedInt dimensions> class TextureArray: public AbstractTexture {
* @requires_gl Non-default @ref CompressedPixelStorage is not
* available in OpenGL ES and WebGL.
*/
TextureArray<dimensions>& setCompressedSubImage(Int level, const VectorTypeFor<dimensions+1, Int>& offset, const CompressedImageView<dimensions+1, const char>& image) {
TextureArray<dimensions>& setCompressedSubImage(Int level, const VectorTypeFor<dimensions+1, Int>& offset, const BasicCompressedImageView<dimensions+1>& image) {
DataHelper<dimensions+1>::setCompressedSubImage(*this, level, offset, image);
return *this;
}

16
src/Magnum/Image.cpp

@ -60,12 +60,12 @@ template<UnsignedInt dimensions> Image<dimensions>& Image<dimensions>::operator=
return *this;
}
template<UnsignedInt dimensions> Image<dimensions>::operator ImageView<dimensions, char>() {
return ImageView<dimensions, char>{_storage, _format, _formatExtra, _pixelSize, _size, _data};
template<UnsignedInt dimensions> Image<dimensions>::operator BasicMutableImageView<dimensions>() {
return BasicMutableImageView<dimensions>{_storage, _format, _formatExtra, _pixelSize, _size, _data};
}
template<UnsignedInt dimensions> Image<dimensions>::operator ImageView<dimensions, const char>() const {
return ImageView<dimensions, const char>{_storage, _format, _formatExtra, _pixelSize, _size, _data};
template<UnsignedInt dimensions> Image<dimensions>::operator BasicImageView<dimensions>() const {
return BasicImageView<dimensions>{_storage, _format, _formatExtra, _pixelSize, _size, _data};
}
template<UnsignedInt dimensions> std::pair<VectorTypeFor<dimensions, std::size_t>, VectorTypeFor<dimensions, std::size_t>> Image<dimensions>::dataProperties() const {
@ -106,12 +106,12 @@ template<UnsignedInt dimensions> CompressedImage<dimensions>& CompressedImage<di
return *this;
}
template<UnsignedInt dimensions> CompressedImage<dimensions>::operator CompressedImageView<dimensions, char>() {
return CompressedImageView<dimensions, char>{_storage, _format, _size, _data};
template<UnsignedInt dimensions> CompressedImage<dimensions>::operator BasicMutableCompressedImageView<dimensions>() {
return BasicMutableCompressedImageView<dimensions>{_storage, _format, _size, _data};
}
template<UnsignedInt dimensions> CompressedImage<dimensions>::operator CompressedImageView<dimensions, const char>() const {
return CompressedImageView<dimensions, const char>{_storage, _format, _size, _data};
template<UnsignedInt dimensions> CompressedImage<dimensions>::operator BasicCompressedImageView<dimensions>() const {
return BasicCompressedImageView<dimensions>{_storage, _format, _size, _data};
}
template<UnsignedInt dimensions> std::pair<VectorTypeFor<dimensions, std::size_t>, VectorTypeFor<dimensions, std::size_t>> CompressedImage<dimensions>::dataProperties() const {

8
src/Magnum/Image.h

@ -313,9 +313,9 @@ template<UnsignedInt dimensions> class Image {
/** @brief Conversion to view */
/* Not restricted to const&, because we might want to pass the view to
another function in an oneliner (e.g. saving screenshot) */
/*implicit*/ operator ImageView<dimensions, char>();
/*implicit*/ operator BasicMutableImageView<dimensions>();
/** @overload */
/*implicit*/ operator ImageView<dimensions, const char>() const;
/*implicit*/ operator BasicImageView<dimensions>() const;
/** @brief Storage of pixel data */
PixelStorage storage() const { return _storage; }
@ -574,9 +574,9 @@ template<UnsignedInt dimensions> class CompressedImage {
/** @brief Conversion to view */
/* Not restricted to const&, because we might want to pass the view to
another function in an oneliner (e.g. saving screenshot) */
/*implicit*/ operator CompressedImageView<dimensions, char>();
/*implicit*/ operator BasicMutableCompressedImageView<dimensions>();
/** @overload */
/*implicit*/ operator CompressedImageView<dimensions, const char>() const;
/*implicit*/ operator BasicCompressedImageView<dimensions>() const;
/** @brief Storage of compressed pixel data */
CompressedPixelStorage storage() const { return _storage; }

140
src/Magnum/ImageView.h

@ -26,7 +26,7 @@
*/
/** @file
* @brief Class @ref Magnum::ImageView, @ref Magnum::CompressedImageView, typedef @ref Magnum::ImageView1D, @ref Magnum::ImageView2D, @ref Magnum::ImageView3D, @ref Magnum::MutableImageView1D, @ref Magnum::MutableImageView2D, @ref Magnum::MutableImageView3D, @ref Magnum::CompressedImageView1D, @ref Magnum::CompressedImageView2D, @ref Magnum::CompressedImageView3D, @ref Magnum::MutableCompressedImageView1D, @ref Magnum::MutableCompressedImageView2D, @ref Magnum::MutableCompressedImageView3D
* @brief Class @ref Magnum::ImageView, @ref Magnum::CompressedImageView, alias @ref Magnum::BasicImageView, @ref Magnum::BasicCompressedImageView, typedef @ref Magnum::ImageView1D, @ref Magnum::ImageView2D, @ref Magnum::ImageView3D, @ref Magnum::MutableImageView1D, @ref Magnum::MutableImageView2D, @ref Magnum::MutableImageView3D, @ref Magnum::CompressedImageView1D, @ref Magnum::CompressedImageView2D, @ref Magnum::CompressedImageView3D, @ref Magnum::MutableCompressedImageView1D, @ref Magnum::MutableCompressedImageView2D, @ref Magnum::MutableCompressedImageView3D
*/
#include <Corrade/Containers/ArrayView.h>
@ -80,11 +80,12 @@ sub-rectangle of a 75x75 8-bit RGB image , with rows aligned to four bytes:
@section ImageView-mutable Data mutability
When using e.g. the @ref ImageView2D typedef, the viewed data are immutable.
This is the most common use case, in order to be able to mutate the underlying
data (for example in order to read into a pre-allocated memory), use
@ref MutableImageView2D and friends instead. @ref Image and
@ref Trade::ImageData are convertible to either of these. Similarly to
When using types derived from @ref BasicImageView (e.g. @ref ImageView2D), the
viewed data are immutable. This is the most common use case. In order to be
able to mutate the underlying data (for example in order to read into a
pre-allocated memory), use @ref BasicMutableImageView
(e.g. @ref MutableImageView2D) instead. @ref Image and @ref Trade::ImageData
are convertible to either of these. Similarly to
@ref Corrade::Containers::ArrayView etc., a mutable view is also implicitly
convertible to a const one.
@ -123,9 +124,9 @@ Metal-specific format identifier:
@snippet Magnum.cpp ImageView-usage-metal
@see @ref ImageView1D, @ref ImageView2D, @ref ImageView3D,
@ref MutableImageView1D, @ref MutableImageView2D, @ref MutableImageView3D,
@ref Image-pixel-views
@see @ref BasicImageView, @ref ImageView1D, @ref ImageView2D, @ref ImageView3D,
@ref BasicMutableImageView, @ref MutableImageView1D,
@ref MutableImageView2D, @ref MutableImageView3D, @ref Image-pixel-views
*/
template<UnsignedInt dimensions, class T> class ImageView {
public:
@ -136,20 +137,16 @@ template<UnsignedInt dimensions, class T> class ImageView {
/**
* @brief Raw data type
*
* @cpp const char @ce for @ref ImageView1D / @ref ImageView2D /
* @ref ImageView3D and @cpp char @ce for @ref MutableImageView1D /
* @ref MutableImageView2D / @ref MutableImageView3D. See also
* @ref ErasedType.
* @cpp const char @ce for @ref BasicImageView and @cpp char @ce for
* @ref BasicMutableImageView. See also @ref ErasedType.
*/
typedef T Type;
/**
* @brief Erased data type
*
* @cpp const void @ce for @ref ImageView1D / @ref ImageView2D /
* @ref ImageView3D and @cpp const void @ce for @ref MutableImageView1D
* / @ref MutableImageView2D / @ref MutableImageView3D. See also
* @ref Type.
* @cpp const void @ce for @ref BasicImageView and @cpp const void @ce
* for @ref BasicMutableImageView. See also @ref Type.
*/
typedef typename std::conditional<std::is_const<T>::value, const void, void>::type ErasedType;
@ -463,47 +460,67 @@ template<UnsignedInt dimensions, class T> class ImageView {
Containers::ArrayView<Type> _data;
};
/**
@brief Const image view
@see @ref ImageView1D, @ref ImageView2D, @ref ImageView3D,
@ref BasicMutableImageView
*/
#ifndef CORRADE_MSVC2015_COMPATIBILITY /* Multiple definitions still broken */
template<UnsignedInt dimensions> using BasicImageView = ImageView<dimensions, const char>;
#endif
/**
@brief One-dimensional image view
@see @ref MutableImageView1D, @ref CompressedImageView1D
@see @ref MutableImageView1D, @ref CompressedImageView1D, @ref ImageView
*/
typedef ImageView<1, const char> ImageView1D;
typedef BasicImageView<1> ImageView1D;
/**
@brief Two-dimensional image view
@see @ref MutableImageView2D, @ref CompressedImageView2D
@see @ref MutableImageView2D, @ref CompressedImageView2D, @ref ImageView
*/
typedef ImageView<2, const char> ImageView2D;
typedef BasicImageView<2> ImageView2D;
/**
@brief Three-dimensional image view
@see @ref MutableImageView3D, @ref CompressedImageView3D
@see @ref MutableImageView3D, @ref CompressedImageView3D, @ref ImageView
*/
typedef ImageView<3, const char> ImageView3D;
typedef BasicImageView<3> ImageView3D;
/**
@brief Mutable image view
@see @ref MutableImageView1D, @ref MutableImageView2D, @ref MutableImageView3D,
@ref BasicImageView
*/
#ifndef CORRADE_MSVC2015_COMPATIBILITY /* Multiple definitions still broken */
template<UnsignedInt dimensions> using BasicMutableImageView = ImageView<dimensions, char>;
#endif
/**
@brief One-dimensional mutable image view
@see @ref ImageView1D, @ref MutableCompressedImageView1D
@see @ref ImageView1D, @ref MutableCompressedImageView1D, @ref ImageView
*/
typedef ImageView<1, char> MutableImageView1D;
typedef BasicMutableImageView<1> MutableImageView1D;
/**
@brief Two-dimensional mutable image view
@see @ref ImageView2D, @ref MutableCompressedImageView2D
@see @ref ImageView2D, @ref MutableCompressedImageView2D, @ref ImageView
*/
typedef ImageView<2, char> MutableImageView2D;
typedef BasicMutableImageView<2> MutableImageView2D;
/**
@brief Three-dimensional mutable image view
@see @ref ImageView3D, @ref MutableCompressedImageView3D
@see @ref ImageView3D, @ref MutableCompressedImageView3D, @ref ImageView
*/
typedef ImageView<3, char> MutableImageView3D;
typedef BasicMutableImageView<3> MutableImageView3D;
/**
@brief Compressed image view
@ -543,13 +560,14 @@ as first parameter. In the following snippet, the view is the bottom-right
@section CompressedImageView-mutable Data mutability
When using e.g. the @ref CompressedImageView2D typedef, the viewed data are
immutable. This is the most common use case, in order to be able to mutate the
underlying data (for example in order to read into a pre-allocated memory), use
@ref MutableCompressedImageView2D and friends instead. @ref CompressedImage and
@ref Trade::ImageData are convertible to either of those. Similarly to
@ref Corrade::Containers::ArrayView etc., a mutable view is also implicitly
convertible to a const one.
When using types derived from @ref BasicCompressedImageView (e.g.
@ref CompressedImageView2D), the viewed data are immutable. This is the most
common use case. In order to be able to mutate the underlying data (for example
in order to read into a pre-allocated memory), use
@ref BasicMutableCompressedImageView (e.g. @ref MutableCompressedImageView2D)
instead. @ref CompressedImage and @ref Trade::ImageData are convertible to
either of these. Similarly to @ref Corrade::Containers::ArrayView etc., a
mutable view is also implicitly convertible to a const one.
@subsection CompressedImageView-usage-implementation-specific Implementation-specific formats
@ -766,47 +784,73 @@ template<UnsignedInt dimensions, class T> class CompressedImageView {
Containers::ArrayView<Type> _data;
};
/**
@brief Const compressed image view
@see @ref CompressedImageView1D, @ref CompressedImageView2D,
@ref CompressedImageView3D, @ref BasicMutableImageView
*/
#ifndef CORRADE_MSVC2015_COMPATIBILITY /* Multiple definitions still broken */
template<UnsignedInt dimensions> using BasicCompressedImageView = CompressedImageView<dimensions, const char>;
#endif
/**
@brief One-dimensional compressed image view
@see @ref MutableCompressedImageView1D, @ref ImageView1D
@see @ref MutableCompressedImageView1D, @ref ImageView1D,
@ref CompressedImageView
*/
typedef CompressedImageView<1, const char> CompressedImageView1D;
typedef BasicCompressedImageView<1> CompressedImageView1D;
/**
@brief Two-dimensional compressed image view
@see @ref MutableCompressedImageView2D, @ref ImageView2D
@see @ref MutableCompressedImageView2D, @ref ImageView2D,
@ref CompressedImageView
*/
typedef CompressedImageView<2, const char> CompressedImageView2D;
typedef BasicCompressedImageView<2> CompressedImageView2D;
/**
@brief Three-dimensional compressed image view
@see @ref MutableCompressedImageView3D, @ref ImageView3D
@see @ref MutableCompressedImageView3D, @ref ImageView3D,
@ref CompressedImageView
*/
typedef BasicCompressedImageView<3> CompressedImageView3D;
/**
@brief Mutable compressed image view
@see @ref MutableCompressedImageView1D, @ref MutableCompressedImageView2D,
@ref MutableCompressedImageView3D, @ref BasicCompressedImageView
*/
typedef CompressedImageView<3, const char> CompressedImageView3D;
#ifndef CORRADE_MSVC2015_COMPATIBILITY /* Multiple definitions still broken */
template<UnsignedInt dimensions> using BasicMutableCompressedImageView = CompressedImageView<dimensions, char>;
#endif
/**
@brief One-dimensional mutable compressed image view
@see @ref CompressedImageView1D, @ref MutableImageView1D
@see @ref CompressedImageView1D, @ref MutableImageView1D,
@ref CompressedImageView
*/
typedef CompressedImageView<1, char> MutableCompressedImageView1D;
typedef BasicMutableCompressedImageView<1> MutableCompressedImageView1D;
/**
@brief Two-dimensional mutable compressed image view
@see @ref CompressedImageView2D, @ref MutableImageView2D
@see @ref CompressedImageView2D, @ref MutableImageView2D,
@ref CompressedImageView
*/
typedef CompressedImageView<2, char> MutableCompressedImageView2D;
typedef BasicMutableCompressedImageView<2> MutableCompressedImageView2D;
/**
@brief Three-dimensional mutable compressed image view
@see @ref CompressedImageView3D, @ref MutableImageView3D
@see @ref CompressedImageView3D, @ref MutableImageView3D,
@ref CompressedImageView
*/
typedef CompressedImageView<3, char> MutableCompressedImageView3D;
typedef BasicMutableCompressedImageView<3> MutableCompressedImageView3D;
template<UnsignedInt dimensions, class T> template<class U, class V> inline ImageView<dimensions, T>::ImageView(const PixelStorage storage, const U format, const V formatExtra, const VectorTypeFor<dimensions, Int>& size, const Containers::ArrayView<ErasedType> data) noexcept: ImageView{storage, UnsignedInt(format), UnsignedInt(formatExtra), Implementation::pixelSizeAdl(format, formatExtra), size, data} {
static_assert(sizeof(T) <= 4 && sizeof(U) <= 4,

28
src/Magnum/Magnum.h

@ -728,20 +728,24 @@ typedef CompressedImage<2> CompressedImage2D;
typedef CompressedImage<3> CompressedImage3D;
template<UnsignedInt, class> class ImageView;
typedef ImageView<1, const char> ImageView1D;
typedef ImageView<2, const char> ImageView2D;
typedef ImageView<3, const char> ImageView3D;
typedef ImageView<1, char> MutableImageView1D;
typedef ImageView<2, char> MutableImageView2D;
typedef ImageView<3, char> MutableImageView3D;
template<UnsignedInt dimensions> using BasicImageView = ImageView<dimensions, const char>;
typedef BasicImageView<1> ImageView1D;
typedef BasicImageView<2> ImageView2D;
typedef BasicImageView<3> ImageView3D;
template<UnsignedInt dimensions> using BasicMutableImageView = ImageView<dimensions, char>;
typedef BasicMutableImageView<1> MutableImageView1D;
typedef BasicMutableImageView<2> MutableImageView2D;
typedef BasicMutableImageView<3> MutableImageView3D;
template<UnsignedInt, class> class CompressedImageView;
typedef CompressedImageView<1, const char> CompressedImageView1D;
typedef CompressedImageView<2, const char> CompressedImageView2D;
typedef CompressedImageView<3, const char> CompressedImageView3D;
typedef CompressedImageView<1, char> MutableCompressedImageView1D;
typedef CompressedImageView<2, char> MutableCompressedImageView2D;
typedef CompressedImageView<3, char> MutableCompressedImageView3D;
template<UnsignedInt dimensions> using BasicCompressedImageView = CompressedImageView<dimensions, const char>;
typedef BasicCompressedImageView<1> CompressedImageView1D;
typedef BasicCompressedImageView<2> CompressedImageView2D;
typedef BasicCompressedImageView<3> CompressedImageView3D;
template<UnsignedInt dimensions> using BasicMutableCompressedImageView = CompressedImageView<dimensions, char>;
typedef BasicMutableCompressedImageView<1> MutableCompressedImageView1D;
typedef BasicMutableCompressedImageView<2> MutableCompressedImageView2D;
typedef BasicMutableCompressedImageView<3> MutableCompressedImageView3D;
enum class MeshPrimitive: UnsignedInt;
enum class MeshIndexType: UnsignedInt;

24
src/Magnum/Trade/ImageData.cpp

@ -128,26 +128,26 @@ template<UnsignedInt dimensions> Containers::StridedArrayView<dimensions + 1, co
return Implementation::imagePixelView<dimensions, const char>(*this);
}
template<UnsignedInt dimensions> ImageData<dimensions>::operator ImageView<dimensions, char>() {
CORRADE_ASSERT(!_compressed, "Trade::ImageData: the image is compressed", (ImageView<dimensions, char>{_storage, _format, _formatExtra, _pixelSize, _size}));
return ImageView<dimensions, char>{_storage, _format, _formatExtra, _pixelSize, _size, _data};
template<UnsignedInt dimensions> ImageData<dimensions>::operator BasicMutableImageView<dimensions>() {
CORRADE_ASSERT(!_compressed, "Trade::ImageData: the image is compressed", (BasicMutableImageView<dimensions>{_storage, _format, _formatExtra, _pixelSize, _size}));
return BasicMutableImageView<dimensions>{_storage, _format, _formatExtra, _pixelSize, _size, _data};
}
template<UnsignedInt dimensions> ImageData<dimensions>::operator ImageView<dimensions, const char>() const {
CORRADE_ASSERT(!_compressed, "Trade::ImageData: the image is compressed", (ImageView<dimensions, const char>{_storage, _format, _formatExtra, _pixelSize, _size}));
return ImageView<dimensions, const char>{_storage, _format, _formatExtra, _pixelSize, _size, _data};
template<UnsignedInt dimensions> ImageData<dimensions>::operator BasicImageView<dimensions>() const {
CORRADE_ASSERT(!_compressed, "Trade::ImageData: the image is compressed", (BasicImageView<dimensions>{_storage, _format, _formatExtra, _pixelSize, _size}));
return BasicImageView<dimensions>{_storage, _format, _formatExtra, _pixelSize, _size, _data};
}
template<UnsignedInt dimensions> ImageData<dimensions>::operator CompressedImageView<dimensions, char>() {
CORRADE_ASSERT(_compressed, "Trade::ImageData: the image is not compressed", (CompressedImageView<dimensions, char>{_compressedStorage, _compressedFormat, _size}));
return CompressedImageView<dimensions, char>{
template<UnsignedInt dimensions> ImageData<dimensions>::operator BasicMutableCompressedImageView<dimensions>() {
CORRADE_ASSERT(_compressed, "Trade::ImageData: the image is not compressed", (BasicMutableCompressedImageView<dimensions>{_compressedStorage, _compressedFormat, _size}));
return BasicMutableCompressedImageView<dimensions>{
_compressedStorage,
_compressedFormat, _size, _data};
}
template<UnsignedInt dimensions> ImageData<dimensions>::operator CompressedImageView<dimensions, const char>() const {
CORRADE_ASSERT(_compressed, "Trade::ImageData: the image is not compressed", (CompressedImageView<dimensions, const char>{_compressedStorage, _compressedFormat, _size}));
return CompressedImageView<dimensions, const char>{
template<UnsignedInt dimensions> ImageData<dimensions>::operator BasicCompressedImageView<dimensions>() const {
CORRADE_ASSERT(_compressed, "Trade::ImageData: the image is not compressed", (BasicCompressedImageView<dimensions>{_compressedStorage, _compressedFormat, _size}));
return BasicCompressedImageView<dimensions>{
_compressedStorage,
_compressedFormat, _size, _data};
}

8
src/Magnum/Trade/ImageData.h

@ -236,9 +236,9 @@ template<UnsignedInt dimensions> class ImageData {
*/
/* Not restricted to const&, because we might want to pass the view to
another function in an oneliner (e.g. saving screenshot) */
/*implicit*/ operator ImageView<dimensions, char>();
/*implicit*/ operator BasicMutableImageView<dimensions>();
/** @overload */
/*implicit*/ operator ImageView<dimensions, const char>() const;
/*implicit*/ operator BasicImageView<dimensions>() const;
/**
* @brief Conversion to compressed view
@ -248,9 +248,9 @@ template<UnsignedInt dimensions> class ImageData {
*/
/* Not restricted to const&, because we might want to pass the view to
another function in an oneliner (e.g. saving screenshot) */
/*implicit*/ operator CompressedImageView<dimensions, char>();
/*implicit*/ operator BasicMutableCompressedImageView<dimensions>();
/** @overload */
/*implicit*/ operator CompressedImageView<dimensions, const char>() const;
/*implicit*/ operator BasicCompressedImageView<dimensions>() const;
/**
* @brief Storage of pixel data

Loading…
Cancel
Save