diff options
author | Carsten Haitzler (Rasterman) <raster@rasterman.com> | 2015-09-24 20:40:38 +0900 |
---|---|---|
committer | Carsten Haitzler (Rasterman) <raster@rasterman.com> | 2015-09-24 20:45:14 +0900 |
commit | 974e82c5e51d5c5049c13818843fb78464dd6be2 (patch) | |
tree | f314da421007988b6d0db1660c12412f90b2246f | |
parent | 08ee7d4b8c708eac2f94e2792df69867d47f0a32 (diff) | |
download | efl-974e82c5e51d5c5049c13818843fb78464dd6be2.tar.gz |
evas - make new exact regions round up to 16x16 to keep count sane
make region count sane by rounding to 16x16
-rw-r--r-- | src/lib/evas/canvas/render2/evas_render2_th_main.c | 13 | ||||
-rw-r--r-- | 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 8f164f0135..72146b4629 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 74f5d18788..91d8fd2ba4 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; } |