Browse Source

Added {Compressed,}BufferImage::release().

To mirror the API in other Image classes.
pull/193/head
Vladimír Vondruš 9 years ago
parent
commit
876573fc6c
  1. 12
      src/Magnum/BufferImage.cpp
  2. 30
      src/Magnum/BufferImage.h
  3. 28
      src/Magnum/Test/BufferImageGLTest.cpp

12
src/Magnum/BufferImage.cpp

@ -89,6 +89,18 @@ template<UnsignedInt dimensions> void CompressedBufferImage<dimensions>::setData
_dataSize = data.size();
}
template<UnsignedInt dimensions> Buffer BufferImage<dimensions>::release() {
_size = {};
_dataSize = {};
return std::move(_buffer);
}
template<UnsignedInt dimensions> Buffer CompressedBufferImage<dimensions>::release() {
_size = {};
_dataSize = {};
return std::move(_buffer);
}
#ifndef DOXYGEN_GENERATING_OUTPUT
template class MAGNUM_EXPORT BufferImage<1>;
template class MAGNUM_EXPORT BufferImage<2>;

30
src/Magnum/BufferImage.h

@ -152,7 +152,11 @@ template<UnsignedInt dimensions> class BufferImage {
/** @brief Currently allocated data size */
std::size_t dataSize() const { return _dataSize; }
/** @brief Image buffer */
/**
* @brief Image buffer
*
* @see @ref release()
*/
Buffer& buffer() { return _buffer; }
/**
@ -202,6 +206,15 @@ template<UnsignedInt dimensions> class BufferImage {
#endif
#endif
/**
* @brief Release the image buffer
*
* Releases the ownership of the image buffer and resets internal state
* to default.
* @see @ref buffer()
*/
Buffer release();
private:
PixelStorage _storage;
PixelFormat _format;
@ -338,7 +351,11 @@ template<UnsignedInt dimensions> class CompressedBufferImage {
}
#endif
/** @brief Image buffer */
/**
* @brief Image buffer
*
* @see @ref release()
*/
Buffer& buffer() { return _buffer; }
/** @brief Raw data size */
@ -377,6 +394,15 @@ template<UnsignedInt dimensions> class CompressedBufferImage {
*/
void setData(CompressedPixelFormat format, const VectorTypeFor<dimensions, Int>& size, Containers::ArrayView<const void> data, BufferUsage usage);
/**
* @brief Release the image buffer
*
* Releases the ownership of the image buffer and resets internal state
* to default.
* @see @ref buffer()
*/
Buffer release();
private:
#ifndef MAGNUM_TARGET_GLES
CompressedPixelStorage _storage;

28
src/Magnum/Test/BufferImageGLTest.cpp

@ -43,6 +43,9 @@ struct BufferImageGLTest: OpenGLTester {
void setData();
void setDataCompressed();
void release();
void releaseCompressed();
};
BufferImageGLTest::BufferImageGLTest() {
@ -54,7 +57,10 @@ BufferImageGLTest::BufferImageGLTest() {
&BufferImageGLTest::constructMoveCompressed,
&BufferImageGLTest::setData,
&BufferImageGLTest::setDataCompressed});
&BufferImageGLTest::setDataCompressed,
&BufferImageGLTest::release,
&BufferImageGLTest::releaseCompressed});
}
void BufferImageGLTest::construct() {
@ -261,6 +267,26 @@ void BufferImageGLTest::setDataCompressed() {
#endif
}
void BufferImageGLTest::release() {
BufferImage2D a{PixelFormat::RGBA, PixelType::UnsignedByte};
const UnsignedInt id = a.buffer().id();
CORRADE_VERIFY(a.buffer().id());
Buffer b = a.release();
CORRADE_VERIFY(!a.buffer().id());
CORRADE_COMPARE(b.id(), id);
}
void BufferImageGLTest::releaseCompressed() {
CompressedBufferImage2D a;
const UnsignedInt id = a.buffer().id();
CORRADE_VERIFY(a.buffer().id());
Buffer b = a.release();
CORRADE_VERIFY(!a.buffer().id());
CORRADE_COMPARE(b.id(), id);
}
}}
CORRADE_TEST_MAIN(Magnum::Test::BufferImageGLTest)

Loading…
Cancel
Save