From 1297ae2b76ca48e433de6e54922945880251ab3c Mon Sep 17 00:00:00 2001 From: Le Philousophe Date: Sun, 9 Jun 2019 12:52:20 +0200 Subject: 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. --- graphics/managed_surface.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'graphics/managed_surface.cpp') 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) -- cgit v1.2.3