[aseprite] 19/51: Minor Render improvement

Tobias Hansen thansen at moszumanska.debian.org
Mon Jul 11 21:35:16 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 9e6d7632d9432117005c954a1818429295bf7c2c
Author: David Capello <davidcapello at gmail.com>
Date:   Wed Jun 29 10:01:14 2016 -0300

    Minor Render improvement
    
    We can return the specific function to composite images depending on the
    actual zoom level. In this commit I include a new
    composite_image_without_scale() to completely ignore the zoom level when
    it's possible.
---
 src/render/render.cpp | 307 ++++++++++++++++++++++++++++++--------------------
 src/render/render.h   |  45 ++++----
 2 files changed, 211 insertions(+), 141 deletions(-)

diff --git a/src/render/render.cpp b/src/render/render.cpp
index 3e0ad35..0b98198 100644
--- a/src/render/render.cpp
+++ b/src/render/render.cpp
@@ -21,17 +21,19 @@
 
 namespace render {
 
+namespace {
+
 //////////////////////////////////////////////////////////////////////
 // Scaled composite
 
 template<class DstTraits, class SrcTraits>
 class BlenderHelper {
-  BlendFunc m_blend_func;
+  BlendFunc m_blendFunc;
   color_t m_mask_color;
 public:
-  BlenderHelper(const Image* src, const Palette* pal, BlendMode blend_mode)
+  BlenderHelper(const Image* src, const Palette* pal, BlendMode blendMode)
   {
-    m_blend_func = SrcTraits::get_blender(blend_mode);
+    m_blendFunc = SrcTraits::get_blender(blendMode);
     m_mask_color = src->maskColor();
   }
   inline typename DstTraits::pixel_t
@@ -40,7 +42,7 @@ public:
              int opacity)
   {
     if (src != m_mask_color)
-      return (*m_blend_func)(dst, src, opacity);
+      return (*m_blendFunc)(dst, src, opacity);
     else
       return dst;
   }
@@ -48,12 +50,12 @@ public:
 
 template<>
 class BlenderHelper<RgbTraits, GrayscaleTraits> {
-  BlendFunc m_blend_func;
+  BlendFunc m_blendFunc;
   color_t m_mask_color;
 public:
-  BlenderHelper(const Image* src, const Palette* pal, BlendMode blend_mode)
+  BlenderHelper(const Image* src, const Palette* pal, BlendMode blendMode)
   {
-    m_blend_func = RgbTraits::get_blender(blend_mode);
+    m_blendFunc = RgbTraits::get_blender(blendMode);
     m_mask_color = src->maskColor();
   }
   inline RgbTraits::pixel_t
@@ -63,7 +65,7 @@ public:
   {
     if (src != m_mask_color) {
       int v = graya_getv(src);
-      return (*m_blend_func)(dst, rgba(v, v, v, graya_geta(src)), opacity);
+      return (*m_blendFunc)(dst, rgba(v, v, v, graya_geta(src)), opacity);
     }
     else
       return dst;
@@ -73,14 +75,14 @@ public:
 template<>
 class BlenderHelper<RgbTraits, IndexedTraits> {
   const Palette* m_pal;
-  BlendMode m_blend_mode;
-  BlendFunc m_blend_func;
+  BlendMode m_blendMode;
+  BlendFunc m_blendFunc;
   color_t m_mask_color;
 public:
-  BlenderHelper(const Image* src, const Palette* pal, BlendMode blend_mode)
+  BlenderHelper(const Image* src, const Palette* pal, BlendMode blendMode)
   {
-    m_blend_mode = blend_mode;
-    m_blend_func = RgbTraits::get_blender(blend_mode);
+    m_blendMode = blendMode;
+    m_blendFunc = RgbTraits::get_blender(blendMode);
     m_mask_color = src->maskColor();
     m_pal = pal;
   }
@@ -89,12 +91,12 @@ public:
              const IndexedTraits::pixel_t& src,
                          int opacity)
   {
-    if (m_blend_mode == BlendMode::SRC) {
+    if (m_blendMode == BlendMode::SRC) {
       return m_pal->getEntry(src);
     }
     else {
       if (src != m_mask_color) {
-        return (*m_blend_func)(dst, m_pal->getEntry(src), opacity);
+        return (*m_blendFunc)(dst, m_pal->getEntry(src), opacity);
       }
       else
         return dst;
@@ -104,12 +106,12 @@ public:
 
 template<>
 class BlenderHelper<IndexedTraits, IndexedTraits> {
-  BlendMode m_blend_mode;
+  BlendMode m_blendMode;
   color_t m_mask_color;
 public:
-  BlenderHelper(const Image* src, const Palette* pal, BlendMode blend_mode)
+  BlenderHelper(const Image* src, const Palette* pal, BlendMode blendMode)
   {
-    m_blend_mode = blend_mode;
+    m_blendMode = blendMode;
     m_mask_color = src->maskColor();
   }
   inline IndexedTraits::pixel_t
@@ -117,7 +119,7 @@ public:
              const IndexedTraits::pixel_t& src,
              int opacity)
   {
-    if (m_blend_mode == BlendMode::SRC) {
+    if (m_blendMode == BlendMode::SRC) {
       return src;
     }
     else {
@@ -130,19 +132,78 @@ public:
 };
 
 template<class DstTraits, class SrcTraits>
-static void compose_scaled_image_scale_up(
-  Image* dst, const Image* src, const Palette* pal,
-  gfx::Clip area,
-  int opacity, BlendMode blend_mode, Zoom zoom)
+void composite_image_without_scale(
+  Image* dst,
+  const Image* src,
+  const Palette* pal,
+  const gfx::Clip& _area,
+  const int opacity,
+  const BlendMode blendMode,
+  const Zoom& zoom)
 {
   ASSERT(dst);
   ASSERT(src);
   ASSERT(DstTraits::pixel_format == dst->pixelFormat());
   ASSERT(SrcTraits::pixel_format == src->pixelFormat());
 
-  BlenderHelper<DstTraits, SrcTraits> blender(src, pal, blend_mode);
+  BlenderHelper<DstTraits, SrcTraits> blender(src, pal, blendMode);
+
+  gfx::Clip area = _area;
+  if (!area.clip(dst->width(), dst->height(),
+                 src->width(), src->height()))
+    return;
+
+  gfx::Rect srcBounds = area.srcBounds();
+  gfx::Rect dstBounds = area.dstBounds();
+  int bottom = area.dst.y+area.size.h-1;
+
+  ASSERT(!srcBounds.isEmpty());
+
+  // Lock all necessary bits
+  const LockImageBits<SrcTraits> srcBits(src, srcBounds);
+  LockImageBits<DstTraits> dstBits(dst, dstBounds);
+  typename LockImageBits<SrcTraits>::const_iterator src_it = srcBits.begin();
+  typename LockImageBits<SrcTraits>::const_iterator src_end = srcBits.end();
+  typename LockImageBits<DstTraits>::iterator dst_it, dst_end;
+
+  // For each line to draw of the source image...
+  dstBounds.h = 1;
+  for (int y=0; y<srcBounds.h; ++y) {
+    dst_it = dstBits.begin_area(dstBounds);
+    dst_end = dstBits.end_area(dstBounds);
+
+    for (int x=0; x<srcBounds.w; ++x) {
+      ASSERT(src_it >= srcBits.begin() && src_it < src_end);
+      ASSERT(dst_it >= dstBits.begin() && dst_it < dst_end);
+      *dst_it = blender(*dst_it, *src_it, opacity);
+      ++src_it;
+      ++dst_it;
+    }
+
+    if (++dstBounds.y > bottom)
+      break;
+  }
+}
+
+template<class DstTraits, class SrcTraits>
+void composite_image_scale_up(
+  Image* dst,
+  const Image* src,
+  const Palette* pal,
+  const gfx::Clip& _area,
+  const int opacity,
+  const BlendMode blendMode,
+  const Zoom& zoom)
+{
+  ASSERT(dst);
+  ASSERT(src);
+  ASSERT(DstTraits::pixel_format == dst->pixelFormat());
+  ASSERT(SrcTraits::pixel_format == src->pixelFormat());
+
+  BlenderHelper<DstTraits, SrcTraits> blender(src, pal, blendMode);
   int px_x, px_y;
 
+  gfx::Clip area = _area;
   if (!area.clip(dst->width(), dst->height(),
       zoom.apply(src->width()),
       zoom.apply(src->height())))
@@ -262,20 +323,23 @@ done_with_blit:;
 }
 
 template<class DstTraits, class SrcTraits>
-static void compose_scaled_image_scale_down(
+void composite_image_scale_down(
   Image* dst, const Image* src, const Palette* pal,
-  gfx::Clip area,
-  int opacity, BlendMode blend_mode, Zoom zoom)
+  const gfx::Clip& _area,
+  const int opacity,
+  const BlendMode blendMode,
+  const Zoom& zoom)
 {
   ASSERT(dst);
   ASSERT(src);
   ASSERT(DstTraits::pixel_format == dst->pixelFormat());
   ASSERT(SrcTraits::pixel_format == src->pixelFormat());
 
-  BlenderHelper<DstTraits, SrcTraits> blender(src, pal, blend_mode);
+  BlenderHelper<DstTraits, SrcTraits> blender(src, pal, blendMode);
   int unbox_w = zoom.remove(1);
   int unbox_h = zoom.remove(1);
 
+  gfx::Clip area = _area;
   if (!area.clip(dst->width(), dst->height(),
       zoom.apply(src->width()),
       zoom.apply(src->height())))
@@ -324,17 +388,53 @@ static void compose_scaled_image_scale_down(
 }
 
 template<class DstTraits, class SrcTraits>
-static void compose_scaled_image(
-  Image* dst, const Image* src, const Palette* pal,
-  const gfx::Clip& area,
-  int opacity, BlendMode blend_mode, Zoom zoom)
+CompositeImageFunc get_image_composition_impl(Zoom zoom)
 {
-  if (zoom.scale() >= 1.0)
-    compose_scaled_image_scale_up<DstTraits, SrcTraits>(dst, src, pal, area, opacity, blend_mode, zoom);
+  if (zoom.scale() == 1.0)
+    return composite_image_without_scale<DstTraits, SrcTraits>;
+  else if (zoom.scale() > 1.0)
+    return composite_image_scale_up<DstTraits, SrcTraits>;
   else
-    compose_scaled_image_scale_down<DstTraits, SrcTraits>(dst, src, pal, area, opacity, blend_mode, zoom);
+    return composite_image_scale_down<DstTraits, SrcTraits>;
 }
 
+CompositeImageFunc get_image_composition(PixelFormat dstFormat,
+                                         PixelFormat srcFormat,
+                                         const Zoom& zoom)
+{
+  switch (srcFormat) {
+
+    case IMAGE_RGB:
+      switch (dstFormat) {
+        case IMAGE_RGB:       return get_image_composition_impl<RgbTraits, RgbTraits>(zoom);
+        case IMAGE_GRAYSCALE: return get_image_composition_impl<GrayscaleTraits, RgbTraits>(zoom);
+        case IMAGE_INDEXED:   return get_image_composition_impl<IndexedTraits, RgbTraits>(zoom);
+      }
+      break;
+
+    case IMAGE_GRAYSCALE:
+      switch (dstFormat) {
+        case IMAGE_RGB:       return get_image_composition_impl<RgbTraits, GrayscaleTraits>(zoom);
+        case IMAGE_GRAYSCALE: return get_image_composition_impl<GrayscaleTraits, GrayscaleTraits>(zoom);
+        case IMAGE_INDEXED:   return get_image_composition_impl<IndexedTraits, GrayscaleTraits>(zoom);
+      }
+      break;
+
+    case IMAGE_INDEXED:
+      switch (dstFormat) {
+        case IMAGE_RGB:       return get_image_composition_impl<RgbTraits, IndexedTraits>(zoom);
+        case IMAGE_GRAYSCALE: return get_image_composition_impl<GrayscaleTraits, IndexedTraits>(zoom);
+        case IMAGE_INDEXED:   return get_image_composition_impl<IndexedTraits, IndexedTraits>(zoom);
+      }
+      break;
+  }
+
+  ASSERT(false && "Invalid pixel formats");
+  return NULL;
+}
+
+} // anonymous namespace
+
 Render::Render()
   : m_sprite(NULL)
   , m_currentLayer(NULL)
@@ -454,22 +554,22 @@ void Render::renderLayer(
   const Layer* layer,
   frame_t frame,
   const gfx::Clip& area,
-  BlendMode blend_mode)
+  BlendMode blendMode)
 {
   m_sprite = layer->sprite();
 
-  RenderScaledImage scaled_func =
-    getRenderScaledImageFunc(
+  CompositeImageFunc compositeImage =
+    get_image_composition(
       dstImage->pixelFormat(),
-      m_sprite->pixelFormat());
-  if (!scaled_func)
+      m_sprite->pixelFormat(), Zoom(1, 1));
+  if (!compositeImage)
     return;
 
   m_globalOpacity = 255;
   renderLayer(
     layer, dstImage, area,
-    frame, Zoom(1, 1), scaled_func,
-    true, true, blend_mode);
+    frame, Zoom(1, 1), compositeImage,
+    true, true, blendMode);
 }
 
 void Render::renderSprite(
@@ -481,11 +581,11 @@ void Render::renderSprite(
 {
   m_sprite = sprite;
 
-  RenderScaledImage scaled_func =
-    getRenderScaledImageFunc(
+  CompositeImageFunc compositeImage =
+    get_image_composition(
       dstImage->pixelFormat(),
-      m_sprite->pixelFormat());
-  if (!scaled_func)
+      m_sprite->pixelFormat(), zoom);
+  if (!compositeImage)
     return;
 
   const LayerImage* bgLayer = m_sprite->backgroundLayer();
@@ -530,27 +630,27 @@ void Render::renderSprite(
   m_globalOpacity = 255;
   renderLayer(
     m_sprite->folder(), dstImage,
-    area, frame, zoom, scaled_func,
+    area, frame, zoom, compositeImage,
     true,
     false,
     BlendMode::UNSPECIFIED);
 
   // Draw onion skin behind the sprite.
   if (m_onionskin.position() == OnionskinPosition::BEHIND)
-    renderOnionskin(dstImage, area, frame, zoom, scaled_func);
+    renderOnionskin(dstImage, area, frame, zoom, compositeImage);
 
   // Draw the transparent layers.
   m_globalOpacity = 255;
   renderLayer(
     m_sprite->folder(), dstImage,
-    area, frame, zoom, scaled_func,
+    area, frame, zoom, compositeImage,
     false,
     true,
     BlendMode::UNSPECIFIED);
 
   // Draw onion skin in front of the sprite.
   if (m_onionskin.position() == OnionskinPosition::INFRONT)
-    renderOnionskin(dstImage, area, frame, zoom, scaled_func);
+    renderOnionskin(dstImage, area, frame, zoom, compositeImage);
 
   // Overlay preview image
   if (m_previewImage &&
@@ -562,7 +662,7 @@ void Render::renderSprite(
       m_sprite->palette(frame),
       0, 0,
       area,
-      scaled_func,
+      compositeImage,
       255,
       m_previewBlendMode,
       zoom);
@@ -573,7 +673,7 @@ void Render::renderOnionskin(
   Image* dstImage,
   const gfx::Clip& area,
   frame_t frame, Zoom zoom,
-  RenderScaledImage scaled_func)
+  CompositeImageFunc compositeImage)
 {
   // Onion-skin feature: Draw previous/next frames with different
   // opacity (<255)
@@ -612,21 +712,21 @@ void Render::renderOnionskin(
 
       m_globalOpacity = MID(0, m_globalOpacity, 255);
       if (m_globalOpacity > 0) {
-        BlendMode blend_mode = BlendMode::UNSPECIFIED;
+        BlendMode blendMode = BlendMode::UNSPECIFIED;
         if (m_onionskin.type() == OnionskinType::MERGE)
-          blend_mode = BlendMode::NORMAL;
+          blendMode = BlendMode::NORMAL;
         else if (m_onionskin.type() == OnionskinType::RED_BLUE_TINT)
-          blend_mode = (frameOut < frame ? BlendMode::RED_TINT: BlendMode::BLUE_TINT);
+          blendMode = (frameOut < frame ? BlendMode::RED_TINT: BlendMode::BLUE_TINT);
 
         renderLayer(
           onionLayer, dstImage,
-          area, frameIn, zoom, scaled_func,
+          area, frameIn, zoom, compositeImage,
           // Render background only for "in-front" onion skinning and
           // when opacity is < 255
           (m_globalOpacity < 255 &&
            m_onionskin.position() == OnionskinPosition::INFRONT),
           true,
-          blend_mode);
+          blendMode);
       }
     }
   }
@@ -681,19 +781,19 @@ void Render::renderBackground(Image* image,
 void Render::renderImage(Image* dst_image, const Image* src_image,
                          const Palette* pal,
                          int x, int y,
-                         Zoom zoom, int opacity, BlendMode blend_mode)
+                         Zoom zoom, int opacity, BlendMode blendMode)
 {
-  RenderScaledImage scaled_func = getRenderScaledImageFunc(
+  CompositeImageFunc compositeImage = get_image_composition(
     dst_image->pixelFormat(),
-    src_image->pixelFormat());
-  if (!scaled_func)
+    src_image->pixelFormat(), zoom);
+  if (!compositeImage)
     return;
 
-  scaled_func(dst_image, src_image, pal,
+  compositeImage(dst_image, src_image, pal,
     gfx::Clip(x, y, 0, 0,
       zoom.apply(src_image->width()),
       zoom.apply(src_image->height())),
-    opacity, blend_mode, zoom);
+    opacity, blendMode, zoom);
 }
 
 void Render::renderLayer(
@@ -701,10 +801,10 @@ void Render::renderLayer(
   Image *image,
   const gfx::Clip& area,
   frame_t frame, Zoom zoom,
-  RenderScaledImage scaled_func,
+  CompositeImageFunc compositeImage,
   bool render_background,
   bool render_transparent,
-  BlendMode blend_mode)
+  BlendMode blendMode)
 {
   // we can't read from this layer
   if (!layer->isVisible())
@@ -761,9 +861,9 @@ void Render::renderLayer(
         if (src_image) {
           const LayerImage* imgLayer = static_cast<const LayerImage*>(layer);
           BlendMode layerBlendMode =
-            (blend_mode == BlendMode::UNSPECIFIED ?
+            (blendMode == BlendMode::UNSPECIFIED ?
              imgLayer->blendMode():
-             blend_mode);
+             blendMode);
 
           ASSERT(cel->opacity() >= 0);
           ASSERT(cel->opacity() <= 255);
@@ -788,7 +888,7 @@ void Render::renderLayer(
               renderCel(
                 image, src_image, pal,
                 cel, gfx::Clip(area.dst.x+rc.x-area.src.x,
-                               area.dst.y+rc.y-area.src.y, rc), scaled_func,
+                               area.dst.y+rc.y-area.src.y, rc), compositeImage,
                 opacity, layerBlendMode, zoom);
             }
           }
@@ -796,7 +896,7 @@ void Render::renderLayer(
           else {
             renderCel(
               image, src_image, pal,
-              cel, area, scaled_func,
+              cel, area, compositeImage,
               opacity, layerBlendMode, zoom);
           }
         }
@@ -810,10 +910,10 @@ void Render::renderLayer(
 
       for (; it != end; ++it) {
         renderLayer(*it, image,
-          area, frame, zoom, scaled_func,
+          area, frame, zoom, compositeImage,
           render_background,
           render_transparent,
-          blend_mode);
+          blendMode);
       }
       break;
     }
@@ -830,7 +930,7 @@ void Render::renderLayer(
         gfx::Clip(area.dst.x+extraArea.x-area.src.x,
                   area.dst.y+extraArea.y-area.src.y,
                   extraArea),
-        scaled_func,
+        compositeImage,
         m_extraCel->opacity(),
         m_extraBlendMode, zoom);
     }
@@ -843,8 +943,8 @@ void Render::renderCel(
   const Palette* pal,
   const Cel* cel,
   const gfx::Clip& area,
-  RenderScaledImage scaled_func,
-  int opacity, BlendMode blend_mode, Zoom zoom)
+  CompositeImageFunc compositeImage,
+  int opacity, BlendMode blendMode, Zoom zoom)
 {
   renderImage(dst_image,
               cel_image,
@@ -852,9 +952,9 @@ void Render::renderCel(
               cel->x(),
               cel->y(),
               area,
-              scaled_func,
+              compositeImage,
               opacity,
-              blend_mode,
+              blendMode,
               zoom);
 }
 
@@ -865,8 +965,8 @@ void Render::renderImage(
   const int x,
   const int y,
   const gfx::Clip& area,
-  RenderScaledImage scaled_func,
-  int opacity, BlendMode blend_mode, Zoom zoom)
+  CompositeImageFunc compositeImage,
+  int opacity, BlendMode blendMode, Zoom zoom)
 {
   int cel_x = zoom.apply(x);
   int cel_y = zoom.apply(y);
@@ -881,7 +981,7 @@ void Render::renderImage(
   if (src_bounds.isEmpty())
     return;
 
-  (*scaled_func)(dst_image, cel_image, pal,
+  (*compositeImage)(dst_image, cel_image, pal,
     gfx::Clip(
       area.dst.x + src_bounds.x - area.src.x,
       area.dst.y + src_bounds.y - area.src.y,
@@ -889,55 +989,22 @@ void Render::renderImage(
       src_bounds.y - cel_y,
       src_bounds.w,
       src_bounds.h),
-    opacity, blend_mode, zoom);
-}
-
-// static
-Render::RenderScaledImage Render::getRenderScaledImageFunc(
-  PixelFormat dstFormat,
-  PixelFormat srcFormat)
-{
-  switch (srcFormat) {
-
-    case IMAGE_RGB:
-      switch (dstFormat) {
-        case IMAGE_RGB:       return compose_scaled_image<RgbTraits, RgbTraits>;
-        case IMAGE_GRAYSCALE: return compose_scaled_image<GrayscaleTraits, RgbTraits>;
-        case IMAGE_INDEXED:   return compose_scaled_image<IndexedTraits, RgbTraits>;
-      }
-      break;
-
-    case IMAGE_GRAYSCALE:
-      switch (dstFormat) {
-        case IMAGE_RGB:       return compose_scaled_image<RgbTraits, GrayscaleTraits>;
-        case IMAGE_GRAYSCALE: return compose_scaled_image<GrayscaleTraits, GrayscaleTraits>;
-        case IMAGE_INDEXED:   return compose_scaled_image<IndexedTraits, GrayscaleTraits>;
-      }
-      break;
-
-    case IMAGE_INDEXED:
-      switch (dstFormat) {
-        case IMAGE_RGB:       return compose_scaled_image<RgbTraits, IndexedTraits>;
-        case IMAGE_GRAYSCALE: return compose_scaled_image<GrayscaleTraits, IndexedTraits>;
-        case IMAGE_INDEXED:   return compose_scaled_image<IndexedTraits, IndexedTraits>;
-      }
-      break;
-  }
-
-  ASSERT(false && "Invalid pixel formats");
-  return NULL;
+    opacity, blendMode, zoom);
 }
 
-void composite_image(Image* dst, const Image* src,
+void composite_image(Image* dst,
+                     const Image* src,
                      const Palette* pal,
-                     int x, int y,
-                     int opacity, BlendMode blend_mode)
+                     const int x,
+                     const int y,
+                     const int opacity,
+                     const BlendMode blendMode)
 {
   // As the background is not rendered in renderImage(), we don't need
   // to configure the Render instance's BgType.
   Render().renderImage(
     dst, src, pal, x, y, Zoom(1, 1),
-    opacity, blend_mode);
+    opacity, blendMode);
 }
 
 } // namespace render
diff --git a/src/render/render.h b/src/render/render.h
index 93a6dbe..9c57447 100644
--- a/src/render/render.h
+++ b/src/render/render.h
@@ -89,6 +89,15 @@ namespace render {
     Layer* m_layer;
   };
 
+  typedef void (*CompositeImageFunc)(
+    Image* dst,
+    const Image* src,
+    const Palette* pal,
+    const gfx::Clip& area,
+    const int opacity,
+    const BlendMode blendMode,
+    const Zoom& zoom);
+
   class Render {
   public:
     Render();
@@ -139,7 +148,7 @@ namespace render {
       const Layer* layer,
       frame_t frame,
       const gfx::Clip& area,
-      BlendMode blend_mode = BlendMode::UNSPECIFIED);
+      BlendMode blendMode = BlendMode::UNSPECIFIED);
 
     // Main function used to render the sprite. Draws the given sprite
     // frame in a new image and return it. Note: zoomedRect must have
@@ -158,29 +167,24 @@ namespace render {
 
     void renderImage(Image* dst_image, const Image* src_image,
       const Palette* pal, int x, int y, Zoom zoom,
-      int opacity, BlendMode blend_mode);
+      int opacity, BlendMode blendMode);
 
   private:
-    typedef void (*RenderScaledImage)(
-      Image* dst, const Image* src, const Palette* pal,
-      const gfx::Clip& area,
-      int opacity, BlendMode blend_mode, Zoom zoom);
-
     void renderOnionskin(
       Image* image,
       const gfx::Clip& area,
       frame_t frame, Zoom zoom,
-      RenderScaledImage scaled_func);
+      CompositeImageFunc compositeImage);
 
     void renderLayer(
       const Layer* layer,
       Image* image,
       const gfx::Clip& area,
       frame_t frame, Zoom zoom,
-      RenderScaledImage renderScaledImage,
+      CompositeImageFunc compositeImage,
       bool render_background,
       bool render_transparent,
-      BlendMode blend_mode);
+      BlendMode blendMode);
 
     void renderCel(
       Image* dst_image,
@@ -188,8 +192,8 @@ namespace render {
       const Palette* pal,
       const Cel* cel,
       const gfx::Clip& area,
-      RenderScaledImage scaled_func,
-      int opacity, BlendMode blend_mode, Zoom zoom);
+      CompositeImageFunc compositeImage,
+      int opacity, BlendMode blendMode, Zoom zoom);
 
     void renderImage(
       Image* dst_image,
@@ -198,12 +202,8 @@ namespace render {
       const int x,
       const int y,
       const gfx::Clip& area,
-      RenderScaledImage scaled_func,
-      int opacity, BlendMode blend_mode, Zoom zoom);
-
-    static RenderScaledImage getRenderScaledImageFunc(
-      PixelFormat dstFormat,
-      PixelFormat srcFormat);
+      CompositeImageFunc compositeImage,
+      int opacity, BlendMode blendMode, Zoom zoom);
 
     const Sprite* m_sprite;
     const Layer* m_currentLayer;
@@ -226,10 +226,13 @@ namespace render {
     OnionskinOptions m_onionskin;
   };
 
-  void composite_image(Image* dst, const Image* src,
+  void composite_image(Image* dst,
+                       const Image* src,
                        const Palette* pal,
-                       int x, int y,
-                       int opacity, BlendMode blend_mode);
+                       const int x,
+                       const int y,
+                       const int opacity,
+                       const BlendMode blendMode);
 
 } // namespace render
 

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