Browse Source

Deprecated {Compressed,}Image::setData() functions.

They just mirror what the constructor already does. The classes are
also movable, so why not just move a new instance over.
pull/233/head
Vladimír Vondruš 8 years ago
parent
commit
14c235f8ee
  1. 3
      doc/changelog.dox
  2. 2
      src/Magnum/AbstractFramebuffer.cpp
  3. 8
      src/Magnum/AbstractTexture.cpp
  4. 8
      src/Magnum/CubeMapTexture.cpp
  5. 4
      src/Magnum/DebugTools/TextureImage.cpp
  6. 23
      src/Magnum/Image.cpp
  7. 32
      src/Magnum/Image.h
  8. 37
      src/Magnum/Test/ImageTest.cpp

3
doc/changelog.dox

@ -118,6 +118,9 @@ See also:
@subsection changelog-latest-deprecated Deprecated APIs
- `setData()` functions in the @ref Image and @ref CompressedImage classes
are deprecated because they don't offer anything extra over simple
move-assignment of a new instance.
- Class @cpp Primitives::Capsule2D @ce and @cpp Primitives::Capsule3D @ce is
deprecated, use @ref Primitives::capsule2DWireframe(),
@ref Primitives::capsule3DSolid() and @ref Primitives::capsule3DWireframe()

2
src/Magnum/AbstractFramebuffer.cpp

@ -313,7 +313,7 @@ void AbstractFramebuffer::read(const Range2Di& rectangle, Image2D& image) {
+ Implementation::pixelStorageSkipOffsetFor(image, rectangle.size())
#endif
);
image.setData(image.storage(), image.format(), image.type(), rectangle.size(), std::move(data));
image = Image2D{image.storage(), image.format(), image.type(), rectangle.size(), std::move(data)};
}
Image2D AbstractFramebuffer::read(const Range2Di& rectangle, Image2D&& image) {

8
src/Magnum/AbstractTexture.cpp

@ -1702,7 +1702,7 @@ template<UnsignedInt dimensions> void AbstractTexture::image(GLint level, Image<
Buffer::unbindInternal(Buffer::TargetHint::PixelPack);
image.storage().applyPack();
(this->*Context::current().state().texture->getImageImplementation)(level, image.format(), image.type(), data.size(), data);
image.setData(image.storage(), image.format(), image.type(), size, std::move(data));
image = Image<dimensions>{image.storage(), image.format(), image.type(), size, std::move(data)};
}
template void MAGNUM_EXPORT AbstractTexture::image<1>(GLint, Image<1>&);
@ -1752,7 +1752,7 @@ template<UnsignedInt dimensions> void AbstractTexture::compressedImage(const GLi
Buffer::unbindInternal(Buffer::TargetHint::PixelPack);
image.storage().applyPack();
(this->*Context::current().state().texture->getCompressedImageImplementation)(level, data.size(), data);
image.setData(image.storage(), CompressedPixelFormat(format), size, std::move(data));
image = CompressedImage<dimensions>{image.storage(), CompressedPixelFormat(format), size, std::move(data)};
}
template void MAGNUM_EXPORT AbstractTexture::compressedImage<1>(GLint, CompressedImage<1>&);
@ -1806,7 +1806,7 @@ template<UnsignedInt dimensions> void AbstractTexture::subImage(const GLint leve
Buffer::unbindInternal(Buffer::TargetHint::PixelPack);
image.storage().applyPack();
glGetTextureSubImage(_id, level, paddedOffset.x(), paddedOffset.y(), paddedOffset.z(), paddedSize.x(), paddedSize.y(), paddedSize.z(), GLenum(image.format()), GLenum(image.type()), data.size(), data);
image.setData(image.storage(), image.format(), image.type(), size, std::move(data));
image = Image<dimensions>{image.storage(), image.format(), image.type(), size, std::move(data)};
}
template void MAGNUM_EXPORT AbstractTexture::subImage<1>(GLint, const Range1Di&, Image<1>&);
@ -1871,7 +1871,7 @@ template<UnsignedInt dimensions> void AbstractTexture::compressedSubImage(const
Buffer::unbindInternal(Buffer::TargetHint::PixelPack);
image.storage().applyPack();
glGetCompressedTextureSubImage(_id, level, paddedOffset.x(), paddedOffset.y(), paddedOffset.z(), paddedSize.x(), paddedSize.y(), paddedSize.z(), data.size(), data);
image.setData(CompressedPixelFormat(format), size, std::move(data));
image = CompressedImage<dimensions>{CompressedPixelFormat(format), size, std::move(data)};
}
template void MAGNUM_EXPORT AbstractTexture::compressedSubImage<1>(GLint, const Range1Di&, CompressedImage<1>&);

8
src/Magnum/CubeMapTexture.cpp

@ -75,7 +75,7 @@ void CubeMapTexture::image(const Int level, Image3D& image) {
Buffer::unbindInternal(Buffer::TargetHint::PixelPack);
image.storage().applyPack();
glGetTextureImage(_id, level, GLenum(image.format()), GLenum(image.type()), data.size(), data);
image.setData(image.storage(), image.format(), image.type(), size, std::move(data));
image = Image3D{image.storage(), image.format(), image.type(), size, std::move(data)};
}
Image3D CubeMapTexture::image(const Int level, Image3D&& image) {
@ -130,7 +130,7 @@ void CubeMapTexture::compressedImage(const Int level, CompressedImage3D& image)
Buffer::unbindInternal(Buffer::TargetHint::PixelPack);
image.storage().applyPack();
(this->*Context::current().state().texture->getFullCompressedCubeImageImplementation)(level, size.xy(), dataOffset, dataSize, data);
image.setData(image.storage(), CompressedPixelFormat(format), size, std::move(data));
image = CompressedImage3D{image.storage(), CompressedPixelFormat(format), size, std::move(data)};
}
CompressedImage3D CubeMapTexture::compressedImage(const Int level, CompressedImage3D&& image) {
@ -183,7 +183,7 @@ void CubeMapTexture::image(const CubeMapCoordinate coordinate, const Int level,
Buffer::unbindInternal(Buffer::TargetHint::PixelPack);
image.storage().applyPack();
(this->*Context::current().state().texture->getCubeImageImplementation)(coordinate, level, size, image.format(), image.type(), data.size(), data);
image.setData(image.storage(), image.format(), image.type(), size, std::move(data));
image = Image2D{image.storage(), image.format(), image.type(), size, std::move(data)};
}
Image2D CubeMapTexture::image(const CubeMapCoordinate coordinate, const Int level, Image2D&& image) {
@ -234,7 +234,7 @@ void CubeMapTexture::compressedImage(const CubeMapCoordinate coordinate, const I
Buffer::unbindInternal(Buffer::TargetHint::PixelPack);
image.storage().applyPack();
(this->*Context::current().state().texture->getCompressedCubeImageImplementation)(coordinate, level, size, data.size(), data);
image.setData(image.storage(), CompressedPixelFormat(format), size, std::move(data));
image = CompressedImage2D{image.storage(), CompressedPixelFormat(format), size, std::move(data)};
}
CompressedImage2D CubeMapTexture::compressedImage(const CubeMapCoordinate coordinate, const Int level, CompressedImage2D&& image) {

4
src/Magnum/DebugTools/TextureImage.cpp

@ -149,7 +149,7 @@ void textureSubImage(Texture2D& texture, const Int level, const Range2Di& range,
/* release() needs to be called after querying the size to avoid zeroing it out */
{
Vector2i imageSize = image.size();
image.setData(image.storage(), reinterpretFormat, PixelType::UnsignedInt, imageSize, image.release());
image = Image2D{image.storage(), reinterpretFormat, PixelType::UnsignedInt, imageSize, image.release()};
}
fb.read(range, image);
@ -157,7 +157,7 @@ void textureSubImage(Texture2D& texture, const Int level, const Range2Di& range,
/* release() needs to be called after querying the size to avoid zeroing it out */
{
Vector2i imageSize = image.size();
image.setData(image.storage(), imageFormat, PixelType::Float, imageSize, image.release());
image = Image2D{image.storage(), imageFormat, PixelType::Float, imageSize, image.release()};
}
return;
}

23
src/Magnum/Image.cpp

@ -31,29 +31,6 @@ template<UnsignedInt dimensions> Image<dimensions>::Image(PixelStorage storage,
CORRADE_ASSERT(Implementation::imageDataSize(*this) <= _data.size(), "Image::Image(): bad image data size, got" << _data.size() << "but expected at least" << Implementation::imageDataSize(*this), );
}
template<UnsignedInt dimensions> void Image<dimensions>::setData(PixelStorage storage, PixelFormat format, PixelType type, const VectorTypeFor<dimensions, Int>& size, Containers::Array<char>&& data) {
_storage = storage;
_format = format;
_type = type;
_size = size;
CORRADE_ASSERT(Implementation::imageDataSize(*this) <= data.size(), "Image::setData(): bad image data size, got" << data.size() << "but expected at least" << Implementation::imageDataSize(*this), );
_data = std::move(data);
}
template<UnsignedInt dimensions> void CompressedImage<dimensions>::setData(
#ifndef MAGNUM_TARGET_GLES
CompressedPixelStorage storage,
#endif
CompressedPixelFormat format, const VectorTypeFor<dimensions, Int>& size, Containers::Array<char>&& data)
{
#ifndef MAGNUM_TARGET_GLES
_storage = storage;
#endif
_format = format;
_size = size;
_data = std::move(data);
}
#ifndef DOXYGEN_GENERATING_OUTPUT
template class MAGNUM_EXPORT Image<1>;
template class MAGNUM_EXPORT Image<2>;

32
src/Magnum/Image.h

@ -165,6 +165,7 @@ template<UnsignedInt dimensions> class Image {
return reinterpret_cast<const T*>(_data.data());
}
#ifdef MAGNUM_BUILD_DEPRECATED
/**
* @brief Set image data
* @param storage Storage of pixel data
@ -173,18 +174,25 @@ template<UnsignedInt dimensions> class Image {
* @param size Image size
* @param data Image data
*
* @deprecated Move-assign a new instance instead.
*
* Deletes previous data and replaces them with new. The data are
* expected to be of proper size for given @p storage parameters.
* @see @ref release()
*/
void setData(PixelStorage storage, PixelFormat format, PixelType type, const VectorTypeFor<dimensions, Int>& size, Containers::Array<char>&& data);
CORRADE_DEPRECATED("move-assign a new instance instead") void setData(PixelStorage storage, PixelFormat format, PixelType type, const VectorTypeFor<dimensions, Int>& size, Containers::Array<char>&& data) {
*this = Image<dimensions>{storage, format, type, size, std::move(data)};
}
/** @overload
* Similar to the above, but uses default @ref PixelStorage parameters.
*
* @deprecated Move-assign a new instance instead.
*/
void setData(PixelFormat format, PixelType type, const VectorTypeFor<dimensions, Int>& size, Containers::Array<char>&& data) {
setData({}, format, type, size, std::move(data));
CORRADE_DEPRECATED("move-assign a new instance instead") void setData(PixelFormat format, PixelType type, const VectorTypeFor<dimensions, Int>& size, Containers::Array<char>&& data) {
*this = Image<dimensions>{format, type, size, std::move(data)};
}
#endif
/**
* @brief Release data storage
@ -346,6 +354,7 @@ template<UnsignedInt dimensions> class CompressedImage {
return reinterpret_cast<const T*>(_data.data());
}
#ifdef MAGNUM_BUILD_DEPRECATED
#ifndef MAGNUM_TARGET_GLES
/**
* @brief Set image data
@ -354,6 +363,8 @@ template<UnsignedInt dimensions> class CompressedImage {
* @param size Image size
* @param data Image data
*
* @deprecated Move-assign a new instance instead.
*
* Deletes previous data and replaces them with new. Note that the
* data are not copied, but they are deleted on destruction.
* @see @ref release()
@ -361,7 +372,9 @@ template<UnsignedInt dimensions> class CompressedImage {
* @requires_gl Compressed pixel storage is hardcoded in OpenGL ES and
* WebGL.
*/
void setData(CompressedPixelStorage storage, CompressedPixelFormat format, const VectorTypeFor<dimensions, Int>& size, Containers::Array<char>&& data);
CORRADE_DEPRECATED("move-assign a new instance instead") void setData(CompressedPixelStorage storage, CompressedPixelFormat format, const VectorTypeFor<dimensions, Int>& size, Containers::Array<char>&& data) {
*this = CompressedImage<dimensions>{storage, format, size, std::move(data)};
}
#endif
/**
@ -370,10 +383,15 @@ template<UnsignedInt dimensions> class CompressedImage {
* @param size Image size
* @param data Image data
*
* @deprecated Move-assign a new instance instead.
*
* Similar the above, but uses default @ref CompressedPixelStorage
* parameters (or the hardcoded ones in OpenGL ES and WebGL).
*/
void setData(CompressedPixelFormat format, const VectorTypeFor<dimensions, Int>& size, Containers::Array<char>&& data);
CORRADE_DEPRECATED("move-assign a new instance instead") void setData(CompressedPixelFormat format, const VectorTypeFor<dimensions, Int>& size, Containers::Array<char>&& data) {
*this = CompressedImage<dimensions>{format, size, std::move(data)};
}
#endif
/**
* @brief Release data storage
@ -486,10 +504,6 @@ template<UnsignedInt dimensions> inline CompressedImage<dimensions>::CompressedI
template<UnsignedInt dimensions> inline CompressedImage<dimensions>::CompressedImage(const CompressedPixelFormat format, const VectorTypeFor<dimensions, Int>& size, Containers::Array<char>&& data): CompressedImage{{}, format, size, std::move(data)} {}
template<UnsignedInt dimensions> inline CompressedImage<dimensions>::CompressedImage(): CompressedImage{CompressedPixelStorage{}} {}
template<UnsignedInt dimensions> inline void CompressedImage<dimensions>::setData(const CompressedPixelFormat format, const VectorTypeFor<dimensions, Int>& size, Containers::Array<char>&& data) {
setData({}, format, size, std::move(data));
}
#endif
}

37
src/Magnum/Test/ImageTest.cpp

@ -40,8 +40,6 @@ struct ImageTest: TestSuite::Tester {
void constructMove();
void constructMoveCompressed();
void setData();
void setDataCompressed();
void toView();
void toViewCompressed();
void release();
@ -56,8 +54,6 @@ ImageTest::ImageTest() {
&ImageTest::constructMove,
&ImageTest::constructMoveCompressed,
&ImageTest::setData,
&ImageTest::setDataCompressed,
&ImageTest::toView,
&ImageTest::toViewCompressed,
&ImageTest::release,
@ -169,39 +165,6 @@ void ImageTest::constructMoveCompressed() {
CORRADE_COMPARE(c.data().size(), 8);
}
void ImageTest::setData() {
auto data = new char[3*3];
Image2D a{PixelStorage{}.setAlignment(1),
PixelFormat::RGB, PixelType::UnsignedByte, {1, 3}, Containers::Array<char>{data, 3*3}};
auto data2 = new char[2*2*4];
a.setData(PixelFormat::RGBA, PixelType::UnsignedShort, {2, 1}, Containers::Array<char>{data2, 2*2*4});
CORRADE_COMPARE(a.storage().alignment(), 4);
CORRADE_COMPARE(a.format(), PixelFormat::RGBA);
CORRADE_COMPARE(a.type(), PixelType::UnsignedShort);
CORRADE_COMPARE(a.size(), Vector2i(2, 1));
CORRADE_COMPARE(a.data(), data2);
}
void ImageTest::setDataCompressed() {
auto data = new char[8];
CompressedImage2D a{CompressedPixelFormat::RGBAS3tcDxt1, {4, 4}, Containers::Array<char>{data, 8}};
auto data2 = new char[16];
a.setData(
#ifndef MAGNUM_TARGET_GLES
CompressedPixelStorage{}.setCompressedBlockSize(Vector3i{4}),
#endif
CompressedPixelFormat::RGBAS3tcDxt3, {8, 4}, Containers::Array<char>{data2, 16});
#ifndef MAGNUM_TARGET_GLES
CORRADE_COMPARE(a.storage().compressedBlockSize(), Vector3i{4});
#endif
CORRADE_COMPARE(a.format(), CompressedPixelFormat::RGBAS3tcDxt3);
CORRADE_COMPARE(a.size(), Vector2i(8, 4));
CORRADE_COMPARE(a.data(), data2);
CORRADE_COMPARE(a.data().size(), 16);
}
void ImageTest::toView() {
auto data = new char[3*3];
const Image2D a{PixelStorage{}.setAlignment(1),

Loading…
Cancel
Save