cedric pushed a commit to branch master.

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

commit da8efae8c0a3938e08d80e0d5367bb6228107094
Author: Cedric BAIL <ced...@osg.samsung.com>
Date:   Fri Apr 28 13:28:43 2017 -0700

    ecore_evas: refactor ecore_evas buffer render logic.
    
    First step into introducing async rendering for ecore_evas buffer.
---
 src/lib/ecore_evas/ecore_evas_buffer.c | 26 ++++++++++++++++----------
 1 file changed, 16 insertions(+), 10 deletions(-)

diff --git a/src/lib/ecore_evas/ecore_evas_buffer.c 
b/src/lib/ecore_evas/ecore_evas_buffer.c
index 4910c07..7c38157 100644
--- a/src/lib/ecore_evas/ecore_evas_buffer.c
+++ b/src/lib/ecore_evas/ecore_evas_buffer.c
@@ -141,7 +141,7 @@ _ecore_evas_buffer_name_class_set(Ecore_Evas *ee, const 
char *n, const char *c)
 static int
 _ecore_evas_buffer_render(Ecore_Evas *ee)
 {
-   Eina_List *updates = NULL, *l, *ll;
+   Eina_List *updates = NULL, *ll;
    Ecore_Evas_Engine_Buffer_Data *bdata;
    Ecore_Evas *ee2;
    int rend = 0;
@@ -171,15 +171,6 @@ _ecore_evas_buffer_render(Ecore_Evas *ee)
         updates = evas_render_updates(ee->evas);
         bdata->in_render = 0;
      }
-   if (bdata->image)
-     {
-        Eina_Rectangle *r;
-
-        evas_object_image_data_set(bdata->image, bdata->pixels);
-        EINA_LIST_FOREACH(updates, l, r)
-           evas_object_image_data_update_add(bdata->image,
-                                             r->x, r->y, r->w, r->h);
-     }
    if (updates)
      {
         evas_render_updates_free(updates);
@@ -191,6 +182,20 @@ _ecore_evas_buffer_render(Ecore_Evas *ee)
    return updates ? 1 : rend;
 }
 
+static void
+_ecore_evas_buffer_update_image(void *data, Evas *e EINA_UNUSED, void 
*event_info)
+{
+   Evas_Event_Render_Post *post = event_info;
+   Ecore_Evas_Engine_Buffer_Data *bdata = data;
+   Eina_Rectangle *r;
+   Eina_List *l;
+
+   evas_object_image_data_set(bdata->image, bdata->pixels);
+   EINA_LIST_FOREACH(post->updated_area, l, r)
+     evas_object_image_data_update_add(bdata->image,
+                                       r->x, r->y, r->w, r->h);
+}
+
 EAPI int
 ecore_evas_buffer_render(Ecore_Evas *ee)
 {
@@ -930,6 +935,7 @@ ecore_evas_object_image_new(Ecore_Evas *ee_target)
    evas_output_method_set(ee->evas, rmethod);
    evas_output_size_set(ee->evas, w, h);
    evas_output_viewport_set(ee->evas, 0, 0, w, h);
+   evas_event_callback_add(ee->evas, EVAS_CALLBACK_RENDER_POST, 
_ecore_evas_buffer_update_image, bdata);
 
    bdata->image = o;
    evas_object_data_set(bdata->image, "Ecore_Evas", ee);

-- 


Reply via email to