[aseprite] 77/134: Fix more delays when we start drawing (related to issue #239)

Tobias Hansen thansen at moszumanska.debian.org
Sat Mar 14 17:10:09 UTC 2015


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

thansen pushed a commit to branch master
in repository aseprite.

commit 91aeddd7baf0e4cd7014ac85ba87ed6184b8cc24
Author: David Capello <davidcapello at gmail.com>
Date:   Thu Nov 27 23:04:52 2014 -0300

    Fix more delays when we start drawing (related to issue #239)
    
    Add an ImageBufferPtr parameter to RenderEngine::renderSprite() to avoid
    allocating memory for each render.
---
 src/app/commands/cmd_preview.cpp |  3 ++-
 src/app/thumbnail_generator.cpp  |  4 +++-
 src/app/ui/editor/editor.cpp     | 14 +++++++++++++-
 src/app/ui/editor/editor.h       |  5 +++++
 src/app/util/render.cpp          |  5 +++--
 src/app/util/render.h            |  4 +++-
 src/raster/image_buffer.h        |  2 +-
 7 files changed, 30 insertions(+), 7 deletions(-)

diff --git a/src/app/commands/cmd_preview.cpp b/src/app/commands/cmd_preview.cpp
index 9d52f1f..c62ff44 100644
--- a/src/app/commands/cmd_preview.cpp
+++ b/src/app/commands/cmd_preview.cpp
@@ -193,7 +193,8 @@ protected:
       m_render.reset(
         renderEngine.renderSprite(
           0, 0, m_sprite->width(), m_sprite->height(),
-          m_editor->frame(), 0, false, false));
+          m_editor->frame(), 0, false, false,
+          Editor::getRenderImageBuffer()));
     }
 
     int x, y, w, h, u, v;
diff --git a/src/app/thumbnail_generator.cpp b/src/app/thumbnail_generator.cpp
index eed6d4e..40e88b4 100644
--- a/src/app/thumbnail_generator.cpp
+++ b/src/app/thumbnail_generator.cpp
@@ -83,9 +83,11 @@ private:
         RenderEngine renderEngine(m_fop->document,
           sprite, NULL, FrameNumber(0));
 
+        raster::ImageBufferPtr thumbnail_buffer(new raster::ImageBuffer);
         base::UniquePtr<Image> image(renderEngine.renderSprite(
             0, 0, sprite->width(), sprite->height(),
-            FrameNumber(0), 0, true, false));
+            FrameNumber(0), 0, true, false,
+            thumbnail_buffer));
 
         // Calculate the thumbnail size
         int thumb_w = MAX_THUMBNAIL_SIZE * image->width() / MAX(image->width(), image->height());
diff --git a/src/app/ui/editor/editor.cpp b/src/app/ui/editor/editor.cpp
index 9ab9abd..7654856 100644
--- a/src/app/ui/editor/editor.cpp
+++ b/src/app/ui/editor/editor.cpp
@@ -137,6 +137,8 @@ private:
   Graphics* m_g;
 };
 
+static raster::ImageBufferPtr render_buffer;
+
 Editor::Editor(Document* document, EditorFlags flags)
   : Widget(editor_type())
   , m_state(new StandbyState())
@@ -392,12 +394,16 @@ void Editor::drawOneSpriteUnclippedRect(ui::Graphics* g, const gfx::Rect& rc, in
     RenderEngine renderEngine(m_document, m_sprite, m_layer, m_frame);
 
     // Generate the rendered image
+    if (!render_buffer)
+      render_buffer.reset(new raster::ImageBuffer());
+
     base::UniquePtr<Image> rendered(NULL);
     try {
       rendered.reset(renderEngine.renderSprite(
           source_x, source_y, width, height,
           m_frame, m_zoom, true,
-          ((m_flags & kShowOnionskin) == kShowOnionskin)));
+          ((m_flags & kShowOnionskin) == kShowOnionskin),
+          render_buffer));
     }
     catch (const std::exception& e) {
       Console::showException(e);
@@ -1444,6 +1450,12 @@ void Editor::notifyScrollChanged()
   m_observers.notifyScrollChanged(this);
 }
 
+// static
+ImageBufferPtr Editor::getRenderImageBuffer()
+{
+  return render_buffer;
+}
+
 void Editor::onSetTiledMode(filters::TiledMode mode)
 {
   invalidate();
diff --git a/src/app/ui/editor/editor.h b/src/app/ui/editor/editor.h
index d59c486..32ecb70 100644
--- a/src/app/ui/editor/editor.h
+++ b/src/app/ui/editor/editor.h
@@ -30,6 +30,7 @@
 #include "base/connection.h"
 #include "gfx/fwd.h"
 #include "raster/frame_number.h"
+#include "raster/image_buffer.h"
 #include "ui/base.h"
 #include "ui/timer.h"
 #include "ui/widget.h"
@@ -197,6 +198,10 @@ namespace app {
     // position.
     void notifyScrollChanged();
 
+    // Returns the buffer used to render editor viewports.
+    // E.g. It can be re-used by PreviewCommand
+    static ImageBufferPtr getRenderImageBuffer();
+
     // in cursor.cpp
 
     static app::Color get_cursor_color();
diff --git a/src/app/util/render.cpp b/src/app/util/render.cpp
index b46b7cb..e51dbd8 100644
--- a/src/app/util/render.cpp
+++ b/src/app/util/render.cpp
@@ -386,7 +386,8 @@ Image* RenderEngine::renderSprite(int source_x, int source_y,
   int width, int height,
   FrameNumber frame, int zoom,
   bool draw_tiled_bg,
-  bool enable_onionskin)
+  bool enable_onionskin,
+  ImageBufferPtr& buffer)
 {
   void (*zoomed_func)(Image*, const Image*, const Palette*, int, int, int, int, int);
   const LayerImage* background = m_sprite->backgroundLayer();
@@ -415,7 +416,7 @@ Image* RenderEngine::renderSprite(int source_x, int source_y,
   }
 
   // Create a temporary RGB bitmap to draw all to it
-  image = Image::create(IMAGE_RGB, width, height);
+  image = Image::create(IMAGE_RGB, width, height, buffer);
   if (!image)
     return NULL;
 
diff --git a/src/app/util/render.h b/src/app/util/render.h
index f946cc5..5ba6b7f 100644
--- a/src/app/util/render.h
+++ b/src/app/util/render.h
@@ -22,6 +22,7 @@
 
 #include "app/color.h"
 #include "raster/frame_number.h"
+#include "raster/image_buffer.h"
 
 namespace raster {
   class Image;
@@ -72,7 +73,8 @@ namespace app {
       int width, int height,
       FrameNumber frame, int zoom,
       bool draw_tiled_bg,
-      bool enable_onionskin);
+      bool enable_onionskin,
+      ImageBufferPtr& buffer);
 
     //////////////////////////////////////////////////////////////////////
     // Extra functions
diff --git a/src/raster/image_buffer.h b/src/raster/image_buffer.h
index 2013f5a..d3e4bf6 100644
--- a/src/raster/image_buffer.h
+++ b/src/raster/image_buffer.h
@@ -28,7 +28,7 @@ namespace raster {
 
   class ImageBuffer {
   public:
-    ImageBuffer(size_t size) : m_buffer(size) {
+    ImageBuffer(size_t size = 1) : m_buffer(size) {
     }
 
     size_t size() const { return m_buffer.size(); }

-- 
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