[aseprite] 206/308: Avoid deleting two times the direct SkSurface

Tobias Hansen thansen at moszumanska.debian.org
Tue Mar 8 02:45:11 UTC 2016


This is an automated email from the git hooks/post-receive script.

thansen pushed a commit to branch master
in repository aseprite.

commit 87e5be45a91a4d3b63957167d4ff3a7e1f402638
Author: David Capello <davidcapello at gmail.com>
Date:   Fri Feb 5 16:34:02 2016 -0300

    Avoid deleting two times the direct SkSurface
---
 src/she/skia/skia_window_win.cpp | 16 +++++++++++++---
 src/she/skia/skia_window_win.h   |  5 +++--
 2 files changed, 16 insertions(+), 5 deletions(-)

diff --git a/src/she/skia/skia_window_win.cpp b/src/she/skia/skia_window_win.cpp
index f5df7fa..544f27b 100644
--- a/src/she/skia/skia_window_win.cpp
+++ b/src/she/skia/skia_window_win.cpp
@@ -39,6 +39,7 @@ SkiaWindow::SkiaWindow(EventQueue* queue, SkiaDisplay* display,
   , m_display(display)
   , m_backend(Backend::NONE)
 #if SK_SUPPORT_GPU
+  , m_skSurface(nullptr)
   , m_sampleCount(0)
   , m_stencilBits(0)
 #endif
@@ -191,8 +192,8 @@ void SkiaWindow::detachGL()
   if (m_glCtx && m_display)
     m_display->resetSkiaSurface();
 
+  setSurface(nullptr);
   m_skSurfaceDirect.reset(nullptr);
-  m_skSurface.reset(nullptr);
   m_grRenderTarget.reset(nullptr);
   m_grCtx.reset(nullptr);
   m_glCtx.reset(nullptr);
@@ -212,14 +213,16 @@ void SkiaWindow::createRenderTarget(const gfx::Size& size)
   desc.fStencilBits = m_stencilBits;
   desc.fRenderTargetHandle = 0; // direct frame buffer
   m_grRenderTarget.reset(m_grCtx->textureProvider()->wrapBackendRenderTarget(desc));
+
+  setSurface(nullptr); // set m_skSurface comparing with the old m_skSurfaceDirect
   m_skSurfaceDirect.reset(
     SkSurface::NewRenderTargetDirect(m_grRenderTarget));
 
   if (scale == 1) {
-    m_skSurface.reset(m_skSurfaceDirect);
+    setSurface(m_skSurfaceDirect);
   }
   else {
-    m_skSurface.reset(
+    setSurface(
       SkSurface::NewRenderTarget(
         m_grCtx,
         SkSurface::kYes_Budgeted,
@@ -234,6 +237,13 @@ void SkiaWindow::createRenderTarget(const gfx::Size& size)
   m_display->setSkiaSurface(new SkiaSurface(m_skSurface));
 }
 
+void SkiaWindow::setSurface(SkSurface* surface)
+{
+  if (m_skSurface && m_skSurface != m_skSurfaceDirect)
+    delete m_skSurface;
+  m_skSurface = surface;
+}
+
 #endif // SK_SUPPORT_GPU
 
 void SkiaWindow::resizeImpl(const gfx::Size& size)
diff --git a/src/she/skia/skia_window_win.h b/src/she/skia/skia_window_win.h
index 79470be..34e9c0d 100644
--- a/src/she/skia/skia_window_win.h
+++ b/src/she/skia/skia_window_win.h
@@ -1,5 +1,5 @@
 // SHE library
-// Copyright (C) 2012-2015  David Capello
+// Copyright (C) 2012-2016  David Capello
 //
 // This file is released under the terms of the MIT license.
 // Read LICENSE.txt for more information.
@@ -45,6 +45,7 @@ private:
 #endif // SK_ANGLE
   void detachGL();
   void createRenderTarget(const gfx::Size& size);
+  void setSurface(SkSurface* surface);
 #endif // SK_SUPPORT_GPU
 
   EventQueue* m_queue;
@@ -55,7 +56,7 @@ private:
   SkAutoTUnref<GrContext> m_grCtx;
   SkAutoTUnref<GrRenderTarget> m_grRenderTarget;
   SkAutoTDelete<SkSurface> m_skSurfaceDirect;
-  SkAutoTDelete<SkSurface> m_skSurface;
+  SkSurface* m_skSurface;
   int m_sampleCount;
   int m_stencilBits;
   gfx::Size m_lastSize;

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/aseprite.git



More information about the Pkg-games-commits mailing list