aboutsummaryrefslogtreecommitdiff
path: root/graphics/managed_surface.cpp
diff options
context:
space:
mode:
authorLe Philousophe2019-06-09 12:52:20 +0200
committerPaul Gilbert2019-06-09 14:38:31 -0700
commit1297ae2b76ca48e433de6e54922945880251ab3c (patch)
treef08e91bd74bca5b85857ab36e516be464efc5c6c /graphics/managed_surface.cpp
parentbdbad1f3af0e34e992f1b86ad21e351e9cd4e101 (diff)
downloadscummvm-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.
Diffstat (limited to 'graphics/managed_surface.cpp')
-rw-r--r--graphics/managed_surface.cpp11
1 files changed, 11 insertions, 0 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)