raster pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=974e82c5e51d5c5049c13818843fb78464dd6be2

commit 974e82c5e51d5c5049c13818843fb78464dd6be2
Author: Carsten Haitzler (Rasterman) <ras...@rasterman.com>
Date:   Thu Sep 24 20:40:38 2015 +0900

    evas - make new exact regions round up to 16x16 to keep count sane
    
    make region count sane by rounding to 16x16
---
 src/lib/evas/canvas/render2/evas_render2_th_main.c | 13 ++++---
 src/lib/evas/common/evas_tiler.c                   | 45 ++++++++++++++++++++--
 2 files changed, 48 insertions(+), 10 deletions(-)

diff --git a/src/lib/evas/canvas/render2/evas_render2_th_main.c 
b/src/lib/evas/canvas/render2/evas_render2_th_main.c
index 8f164f0..72146b4 100644
--- a/src/lib/evas/canvas/render2/evas_render2_th_main.c
+++ b/src/lib/evas/canvas/render2/evas_render2_th_main.c
@@ -181,12 +181,13 @@ _evas_render2_regions_merge(Region *region)
    num = region_rects_num(region);
    for (i = 0; i < num; i++)
      {
-        region_rect_add
-        (region2,
-         (rects[i].x1 / tsize) * tsize,
-         (rects[i].y1 / tsize) * tsize,
-         (((rects[i].x2 - rects[i].x1) + tsize - 1) / tsize) * tsize,
-         (((rects[i].y2 - rects[i].y1) + tsize - 1) / tsize) * tsize);
+        int x1, y1, x2, y2;
+
+        x1 = (rects[i].x1 / tsize) * tsize;
+        y1 = (rects[i].y1 / tsize) * tsize;
+        x2 = ((rects[i].x2 + tsize - 1) / tsize) * tsize;
+        y2 = ((rects[i].y2 + tsize - 1) / tsize) * tsize;
+        region_rect_add(region2, x1, y1, x2 - x1, y2 - y1);
      }
    region_free(region);
    return region2;
diff --git a/src/lib/evas/common/evas_tiler.c b/src/lib/evas/common/evas_tiler.c
index 74f5d18..91d8fd2 100644
--- a/src/lib/evas/common/evas_tiler.c
+++ b/src/lib/evas/common/evas_tiler.c
@@ -67,20 +67,56 @@ evas_common_tilebuf_clear(Tilebuf *tb)
    tb->region = region_new(tb->outbuf_w, tb->outbuf_h);
 }
 
+static Region *
+_region_round(Region *region, int tsize)
+{
+   Region *region2;
+   Box *rects;
+   int num, i, w, h;
+
+   region_size_get(region, &w, &h);
+   region2 = region_new(w, h);
+   rects = region_rects(region);
+   num = region_rects_num(region);
+   for (i = 0; i < num; i++)
+     {
+        int x1, y1, x2, y2;
+
+        x1 = (rects[i].x1 / tsize) * tsize;
+        y1 = (rects[i].y1 / tsize) * tsize;
+        x2 = ((rects[i].x2 + tsize - 1) / tsize) * tsize;
+        y2 = ((rects[i].y2 + tsize - 1) / tsize) * tsize;
+        region_rect_add(region2, x1, y1, x2 - x1, y2 - y1);
+     }
+   return region2;
+}
+
 EAPI Tilebuf_Rect *
 evas_common_tilebuf_get_render_rects(Tilebuf *tb)
 {
    Tilebuf_Rect *rects = NULL, *r, *rend, *rbuf;
+   Region *region2;
    Box *rects2, *rs;
    int n;
 
-   rects2 = region_rects(tb->region);
-   if (!rects2) return NULL;
-   n = region_rects_num(tb->region);
+   region2 = _region_round(tb->region, 16);
+   if (!region2) return NULL;
+
+   rects2 = region_rects(region2);
+   if (!rects2)
+     {
+        region_free(region2);
+        return NULL;
+     }
+   n = region_rects_num(region2);
    if (n <= 0) return NULL;
 
    rbuf = malloc(n * sizeof(Tilebuf_Rect));
-   if (!rbuf) return NULL;
+   if (!rbuf)
+     {
+        region_free(region2);
+        return NULL;
+     }
 
    rend = rbuf + n;
    rs = rects2;
@@ -98,6 +134,7 @@ evas_common_tilebuf_get_render_rects(Tilebuf *tb)
           eina_inlist_append(EINA_INLIST_GET(rects),
                              EINA_INLIST_GET(r));
      }
+   region_free(region2);
    return rects;
 }
 

-- 


Reply via email to