Browse Source

Use *Image::dataSize() instead of manual buggy size computation.

BufferImage test currently fails.
pull/51/head
Vladimír Vondruš 12 years ago
parent
commit
fc35adaac2
  1. 4
      src/Magnum/AbstractTexture.cpp
  2. 4
      src/Magnum/BufferImage.cpp

4
src/Magnum/AbstractTexture.cpp

@ -907,7 +907,7 @@ void AbstractTexture::invalidateSubImageImplementationARB(GLint level, const Vec
#ifndef MAGNUM_TARGET_GLES
template<UnsignedInt dimensions> void AbstractTexture::image(GLenum target, GLint level, Image<dimensions>& image) {
const Math::Vector<dimensions, Int> size = DataHelper<dimensions>::imageSize(*this, target, level);
const std::size_t dataSize = size.product()*image.pixelSize();
const std::size_t dataSize = image.dataSize(size);
char* data = new char[dataSize];
(this->*Context::current()->state().texture->getImageImplementation)(target, level, image.format(), image.type(), dataSize, data);
image.setData(image.format(), image.type(), size, data);
@ -919,7 +919,7 @@ template void MAGNUM_EXPORT AbstractTexture::image<3>(GLenum, GLint, Image<3>&);
template<UnsignedInt dimensions> void AbstractTexture::image(GLenum target, GLint level, BufferImage<dimensions>& image, BufferUsage usage) {
const Math::Vector<dimensions, Int> size = DataHelper<dimensions>::imageSize(*this, target, level);
const std::size_t dataSize = size.product()*image.pixelSize();
const std::size_t dataSize = image.dataSize(size);
if(image.size() != size)
image.setData(image.format(), image.type(), size, nullptr, usage);

4
src/Magnum/BufferImage.cpp

@ -29,7 +29,7 @@ namespace Magnum {
#ifndef MAGNUM_TARGET_GLES2
template<UnsignedInt dimensions> BufferImage<dimensions>::BufferImage(ColorFormat format, ColorType type, const typename DimensionTraits< Dimensions, Int >::VectorType& size, const void* data, BufferUsage usage): AbstractImage(format, type), _size(size), _buffer(Buffer::Target::PixelPack) {
_buffer.setData({data, pixelSize()*size.product()}, usage);
_buffer.setData({data, dataSize(size)}, usage);
}
template<UnsignedInt dimensions> BufferImage<dimensions>::BufferImage(ColorFormat format, ColorType type): AbstractImage(format, type), _buffer(Buffer::Target::PixelPack) {}
@ -38,7 +38,7 @@ template<UnsignedInt dimensions> void BufferImage<dimensions>::setData(ColorForm
_format = format;
_type = type;
_size = size;
_buffer.setData({data, pixelSize()*size.product()}, usage);
_buffer.setData({data, dataSize(size)}, usage);
}
#ifndef DOXYGEN_GENERATING_OUTPUT

Loading…
Cancel
Save