diff options
author | Le Philousophe | 2019-06-09 12:52:20 +0200 |
---|---|---|
committer | Paul Gilbert | 2019-06-09 14:38:31 -0700 |
commit | 1297ae2b76ca48e433de6e54922945880251ab3c (patch) | |
tree | f08e91bd74bca5b85857ab36e516be464efc5c6c | |
parent | bdbad1f3af0e34e992f1b86ad21e351e9cd4e101 (diff) | |
download | scummvm-rg350-1297ae2b76ca48e433de6e54922945880251ab3c.tar.gz scummvm-rg350-1297ae2b76ca48e433de6e54922945880251ab3c.tar.bz2 scummvm-rg350-1297ae2b76ca48e433de6e54922945880251ab3c.zip |
GRAPHICS: Fix ManagedSurface::copyFrom memory handling
When calling ManagedSurface::copyFrom, _disposeAfterUse should be set to
YES because inner surface frees up old pixels array and creates a new one.
-rw-r--r-- | graphics/managed_surface.cpp | 11 | ||||
-rw-r--r-- | graphics/managed_surface.h | 5 |
2 files changed, 12 insertions, 4 deletions
diff --git a/graphics/managed_surface.cpp b/graphics/managed_surface.cpp index 1595a32ecb..7dca33a619 100644 --- a/graphics/managed_surface.cpp +++ b/graphics/managed_surface.cpp @@ -124,6 +124,17 @@ void ManagedSurface::free() { _offsetFromOwner = Common::Point(0, 0); } +void ManagedSurface::copyFrom(const ManagedSurface &surf) { + // Surface::copyFrom free pixel pointer so let's free up ManagedSurface to be coherent + free(); + + _innerSurface.copyFrom(surf._innerSurface); + clearDirtyRects(); + + // Pixels data is now owned by us + _disposeAfterUse = DisposeAfterUse::YES; +} + bool ManagedSurface::clip(Common::Rect &srcBounds, Common::Rect &destBounds) { if (destBounds.left >= this->w || destBounds.top >= this->h || destBounds.right <= 0 || destBounds.bottom <= 0) diff --git a/graphics/managed_surface.h b/graphics/managed_surface.h index a11d05c557..c143222bbc 100644 --- a/graphics/managed_surface.h +++ b/graphics/managed_surface.h @@ -307,10 +307,7 @@ public: * Copy the data from another Surface, reinitializing the * surface to match the dimensions of the passed surface */ - void copyFrom(const ManagedSurface &surf) { - clearDirtyRects(); - _innerSurface.copyFrom(surf._innerSurface); - } + void copyFrom(const ManagedSurface &surf); /** * Draw a line. |