[gegl] transform: don't scale input bounds by level when computing scanline limits



commit 36fec161d34f36e6321a67f6634068ae44c475bf
Author: Ell <ell_se yahoo com>
Date:   Sun Jan 28 12:40:13 2018 -0500

    transform: don't scale input bounds by level when computing scanline limits
    
    Fixes mipmap rendering.

 operations/transform/transform-core.c |   55 ++++++++++++---------------------
 1 files changed, 20 insertions(+), 35 deletions(-)
---
diff --git a/operations/transform/transform-core.c b/operations/transform/transform-core.c
index b7b2980..14bf25f 100644
--- a/operations/transform/transform-core.c
+++ b/operations/transform/transform-core.c
@@ -1082,20 +1082,15 @@ transform_affine (GeglOperation       *operation,
   GeglRectangle  context_rect = *gegl_sampler_get_context_rect (sampler);
   GeglRectangle  dest_extent  = *roi;
 
-  bounding_box.x      >>= level;
-  bounding_box.y      >>= level;
-  bounding_box.width  >>= level;
-  bounding_box.height >>= level;
+  bounding_box.x      += context_rect.x;
+  bounding_box.y      += context_rect.y;
+  bounding_box.width  += context_rect.width  - 1;
+  bounding_box.height += context_rect.height - 1;
 
-  bounding_box.x       += context_rect.x;
-  bounding_box.y       += context_rect.y;
-  bounding_box.width   += context_rect.width  - 1;
-  bounding_box.height  += context_rect.height - 1;
-
-  dest_extent.x       >>= level;
-  dest_extent.y       >>= level;
-  dest_extent.width   >>= level;
-  dest_extent.height  >>= level;
+  dest_extent.x      >>= level;
+  dest_extent.y      >>= level;
+  dest_extent.width  >>= level;
+  dest_extent.height >>= level;
 
   /*
    * XXX: fast paths as existing in files in the same dir as
@@ -1239,20 +1234,15 @@ transform_generic (GeglOperation       *operation,
   GeglRectangle  context_rect = *gegl_sampler_get_context_rect (sampler);
   GeglRectangle  dest_extent  = *roi;
 
-  bounding_box.x      >>= level;
-  bounding_box.y      >>= level;
-  bounding_box.width  >>= level;
-  bounding_box.height >>= level;
-
-  bounding_box.x       += context_rect.x;
-  bounding_box.y       += context_rect.y;
-  bounding_box.width   += context_rect.width  - 1;
-  bounding_box.height  += context_rect.height - 1;
+  bounding_box.x      += context_rect.x;
+  bounding_box.y      += context_rect.y;
+  bounding_box.width  += context_rect.width  - 1;
+  bounding_box.height += context_rect.height - 1;
 
-  dest_extent.x       >>= level;
-  dest_extent.y       >>= level;
-  dest_extent.width   >>= level;
-  dest_extent.height  >>= level;
+  dest_extent.x      >>= level;
+  dest_extent.y      >>= level;
+  dest_extent.width  >>= level;
+  dest_extent.height >>= level;
 
   /*
    * Construct an output tile iterator.
@@ -1391,15 +1381,10 @@ transform_nearest (GeglOperation       *operation,
   GeglRectangle  bounding_box = *gegl_buffer_get_abyss (src);
   GeglRectangle  dest_extent  = *roi;
 
-  bounding_box.x      >>= level;
-  bounding_box.y      >>= level;
-  bounding_box.width  >>= level;
-  bounding_box.height >>= level;
-
-  dest_extent.x       >>= level;
-  dest_extent.y       >>= level;
-  dest_extent.width   >>= level;
-  dest_extent.height  >>= level;
+  dest_extent.x      >>= level;
+  dest_extent.y      >>= level;
+  dest_extent.width  >>= level;
+  dest_extent.height >>= level;
 
   /*
    * Construct an output tile iterator.


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]