diff options
author | Colin Snover | 2017-11-12 13:47:51 -0600 |
---|---|---|
committer | Eugene Sandulenko | 2017-11-18 22:35:12 +0100 |
commit | 0cc0b1932e7feb97b15810ed9748a55a20947763 (patch) | |
tree | 6ad3de78cc2ff5621911d37f679d74206bca0665 /engines/fullpipe/statics.cpp | |
parent | 8e0c53de180d2e0de613934f1dedbfd4aa5fdf7c (diff) | |
download | scummvm-rg350-0cc0b1932e7feb97b15810ed9748a55a20947763.tar.gz scummvm-rg350-0cc0b1932e7feb97b15810ed9748a55a20947763.tar.bz2 scummvm-rg350-0cc0b1932e7feb97b15810ed9748a55a20947763.zip |
FULLPIPE: Fix memory leaks, ownership issues, and endianness issues in graphics code
Diffstat (limited to 'engines/fullpipe/statics.cpp')
-rw-r--r-- | engines/fullpipe/statics.cpp | 42 |
1 files changed, 18 insertions, 24 deletions
diff --git a/engines/fullpipe/statics.cpp b/engines/fullpipe/statics.cpp index a78131d29d..6b7dbbb913 100644 --- a/engines/fullpipe/statics.cpp +++ b/engines/fullpipe/statics.cpp @@ -528,41 +528,41 @@ void Movement::draw(bool flipFlag, int angle) { int x = _ox - point.x; int y = _oy - point.y; - if (_currDynamicPhase->getPaletteData()) - g_fp->_globalPalette = _currDynamicPhase->getPaletteData(); + if (_currDynamicPhase->getPaletteData().size()) + g_fp->_globalPalette = &_currDynamicPhase->getPaletteData(); - Bitmap *bmp; + Common::ScopedPtr<Bitmap> bmp; if (_currMovement) { - bmp = _currDynamicPhase->getPixelData()->reverseImage(); + bmp.reset(_currDynamicPhase->getPixelData()->reverseImage()); } else { - bmp = _currDynamicPhase->getPixelData()->reverseImage(false); + bmp.reset(_currDynamicPhase->getPixelData()->reverseImage(false)); } if (flipFlag) { - bmp->flipVertical()->drawShaded(1, x, y + 30 + _currDynamicPhase->_rect->bottom, _currDynamicPhase->_paletteData, _currDynamicPhase->_alpha); + bmp->flipVertical()->drawShaded(1, x, y + 30 + _currDynamicPhase->_rect->bottom, _currDynamicPhase->getPaletteData(), _currDynamicPhase->getAlpha()); } else if (angle) { - bmp->drawRotated(x, y, angle, _currDynamicPhase->_paletteData, _currDynamicPhase->_alpha); + bmp->drawRotated(x, y, angle, _currDynamicPhase->getPaletteData(), _currDynamicPhase->getAlpha()); } else { - bmp->putDib(x, y, (int32 *)_currDynamicPhase->_paletteData, _currDynamicPhase->_alpha); + bmp->putDib(x, y, _currDynamicPhase->getPaletteData(), _currDynamicPhase->getAlpha()); } - //Prevent memory leak after new was used to create bmp in reverseImage() - delete bmp; if (_currDynamicPhase->_rect->top) { - if (!_currDynamicPhase->_convertedBitmap) { + if (!_currDynamicPhase->getConvertedBitmap()) { //v12 = Picture_getPixelData(v5); //v13 = Bitmap_convertTo16Bit565(v12, (unsigned int *)&_currDynamicPhase->rect); //_currDynamicPhase->convertedBitmap = v13; } - if (_currDynamicPhase->_convertedBitmap) { + if (_currDynamicPhase->getConvertedBitmap()) { if (_currMovement) { //vrtSetAlphaBlendMode(g_vrtDrawHandle, 1, LOBYTE(_currDynamicPhase->rect.top)); - _currDynamicPhase->_convertedBitmap->reverseImage()->putDib(x, y, (int32 *)_currDynamicPhase->_paletteData, _currDynamicPhase->_alpha); + bmp.reset(_currDynamicPhase->getConvertedBitmap()->reverseImage()); + bmp->putDib(x, y, _currDynamicPhase->getPaletteData(), _currDynamicPhase->getAlpha()); //vrtSetAlphaBlendMode(g_vrtDrawHandle, 0, 255); } else { //vrtSetAlphaBlendMode(g_vrtDrawHandle, 1, LOBYTE(_currDynamicPhase->rect.top)); - _currDynamicPhase->_convertedBitmap->reverseImage(false)->putDib(x, y, (int32 *)_currDynamicPhase->_paletteData, _currDynamicPhase->_alpha); + bmp.reset(_currDynamicPhase->getConvertedBitmap()->reverseImage(false)); + bmp->putDib(x, y, _currDynamicPhase->getPaletteData(), _currDynamicPhase->getAlpha()); //vrtSetAlphaBlendMode(g_vrtDrawHandle, 0, 255); } } @@ -1441,11 +1441,7 @@ void Statics::init() { Picture::init(); if (_staticsId & 0x4000) { - Bitmap *reversed = _bitmap->reverseImage(); - // TODO: properly dispose old _bitmap - // Enabling the call below causes corruption in flipped bitmaps - //freePixelData(); - _bitmap = reversed; + _bitmap = BitmapPtr(_bitmap->reverseImage()); } } @@ -2166,7 +2162,7 @@ DynamicPhase::DynamicPhase(DynamicPhase *src, bool reverse) { if (!src->_bitmap) src->init(); - _bitmap = src->_bitmap->reverseImage(); + _bitmap = BitmapPtr(src->_bitmap->reverseImage()); _dataSize = src->_dataSize; if (g_fp->_currArchive) { @@ -2188,11 +2184,9 @@ DynamicPhase::DynamicPhase(DynamicPhase *src, bool reverse) { _mfield_10 = src->_mfield_10; _libHandle = src->_libHandle; - _bitmap = src->_bitmap; - if (_bitmap) { + if (src->_bitmap) { _field_54 = 1; - - _bitmap = src->_bitmap->reverseImage(false); + _bitmap = BitmapPtr(src->_bitmap->reverseImage(false)); } _someX = src->_someX; |