cedric pushed a commit to branch master.

commit c9c77a4004bd2500302fc975db8997ee84902f1c
Author: Cedric Bail <[email protected]>
Date:   Wed Jun 19 15:18:41 2013 +0900

    evas: fast path for map with same color on all corner.
---
 ChangeLog                                          |  4 +++
 NEWS                                               |  1 +
 .../evas/engines/software_generic/evas_engine.c    | 29 ++++++++++++++++------
 3 files changed, 26 insertions(+), 8 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 2dc8a14..1cebaa0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2013-06-19  Cedric Bail
+
+       * Evas: optimized path for when map use the same color for all corner.
+
 2013-06-18  Cedric Bail
 
        * Evas: Use Eo array of callbacks to reduce edje memory foot print of 
Evas_Object_Box and Evas_Object_Table.
diff --git a/NEWS b/NEWS
index c8c2758..6386316 100644
--- a/NEWS
+++ b/NEWS
@@ -190,6 +190,7 @@ Improvements:
     * Partial rendering support in evas for several gl drivers.
     * edje: use eo array of callbacks to reduce callbacks memory footprint.
     * evas: use eo array of callbacks to reduce callbacks memory footprint of 
Evas_Object_Box and Evas_Object_Table.
+    * evas: optimized path for when map use the same color for all corner.
 
 Fixes:
     * Fix a memory leak in ecore_con_dns when using ecore_con_server_connect
diff --git a/src/modules/evas/engines/software_generic/evas_engine.c 
b/src/modules/evas/engines/software_generic/evas_engine.c
index b13943e..4281112 100644
--- a/src/modules/evas/engines/software_generic/evas_engine.c
+++ b/src/modules/evas/engines/software_generic/evas_engine.c
@@ -1474,16 +1474,20 @@ _draw_thread_map_draw(void *data)
             (m->pts[2 + offset].v == (int)(im->cache_entry.h << FP)) &&
             (m->pts[3 + offset].u == 0) &&
             (m->pts[3 + offset].v == (int)(im->cache_entry.h << FP)) &&
-            (m->pts[0 + offset].col == 0xffffffff) &&
-            (m->pts[1 + offset].col == 0xffffffff) &&
-            (m->pts[2 + offset].col == 0xffffffff) &&
-            (m->pts[3 + offset].col == 0xffffffff))
+            (m->pts[0].col == m->pts[1].col) &&
+            (m->pts[1].col == m->pts[2].col) &&
+            (m->pts[2].col == m->pts[3].col))
           {
+             DATA32 col;
+
              dx = m->pts[0 + offset].x >> FP;
              dy = m->pts[0 + offset].y >> FP;
              dw = (m->pts[2 + offset].x >> FP) - dx;
              dh = (m->pts[2 + offset].y >> FP) - dy;
 
+             col = map->image_ctx.col.col;
+             map->image_ctx.col.col = MUL4_SYM(col, m->pts[0].col);
+
              if (map->smooth)
                evas_common_scale_rgba_in_to_out_clip_cb
                  (im, map->surface, &map->image_ctx,
@@ -1494,6 +1498,8 @@ _draw_thread_map_draw(void *data)
                  (im, map->surface, &map->image_ctx,
                   0, 0, im->cache_entry.w, im->cache_entry.h,
                   dx, dy, dw, dh, _map_image_sample_draw);
+
+             map->image_ctx.col.col = col;
           }
         else
           {
@@ -1587,13 +1593,18 @@ evas_software_image_map_draw(void *data, void *context, 
RGBA_Image *surface, RGB
        (m->pts[2 + offset].v == (int)(im->cache_entry.h << FP)) &&
        (m->pts[3 + offset].u == 0) &&
        (m->pts[3 + offset].v == (int)(im->cache_entry.h << FP)) &&
-       (m->pts[0 + offset].col == 0xffffffff) &&
-       (m->pts[1 + offset].col == 0xffffffff) &&
-       (m->pts[2 + offset].col == 0xffffffff) &&
-       (m->pts[3 + offset].col == 0xffffffff))
+       (m->pts[0 + offset].col == m->pts[1 + offset].col) &&
+       (m->pts[1 + offset].col == m->pts[2 + offset].col) &&
+       (m->pts[2 + offset].col == m->pts[3 + offset].col))
      {
+        DATA32 col;
+        int a, r, g, b;
         int dx, dy, dw, dh;
 
+        eng_context_color_get(data, context, &r, &g, &b, &a);
+        col = MUL4_256(a, r, g, b, m->pts[0 + offset].col);
+        eng_context_color_set(data, context, R_VAL(col), G_VAL(col), 
B_VAL(col), A_VAL(col));
+
         dx = m->pts[0 + offset].x >> FP;
         dy = m->pts[0 + offset].y >> FP;
         dw = (m->pts[2 + offset].x >> FP) - dx;
@@ -1603,6 +1614,8 @@ evas_software_image_map_draw(void *data, void *context, 
RGBA_Image *surface, RGB
            0, 0, im->cache_entry.w, im->cache_entry.h,
            dx, dy, dw, dh, smooth,
            EINA_FALSE);
+
+        eng_context_color_set(data, context, r, g, b, a);
      }
    else
      {

-- 

------------------------------------------------------------------------------
This SF.net email is sponsored by Windows:

Build for Windows Store.

http://p.sf.net/sfu/windows-dev2dev

Reply via email to