aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/evas/canvas/evas_render.c
diff options
context:
space:
mode:
authorCedric BAIL <cedric@osg.samsung.com>2017-08-25 10:52:52 -0700
committerCedric BAIL <cedric@osg.samsung.com>2017-08-25 10:52:52 -0700
commit7f8bbe497275ae229562fbf50ac682c1a983b476 (patch)
tree36821f1549398c551e599cfe70b6856e4d9cd0c6 /src/lib/evas/canvas/evas_render.c
parentevas: Evas_Canvas3D rendering logic need a complete overhaul. (diff)
downloadefl-7f8bbe497275ae229562fbf50ac682c1a983b476.tar.gz
evas: reorder rendering phase to group output related operation.
Diffstat (limited to '')
-rw-r--r--src/lib/evas/canvas/evas_render.c118
1 files changed, 60 insertions, 58 deletions
diff --git a/src/lib/evas/canvas/evas_render.c b/src/lib/evas/canvas/evas_render.c
index 17e4a1b368..653158874b 100644
--- a/src/lib/evas/canvas/evas_render.c
+++ b/src/lib/evas/canvas/evas_render.c
@@ -3224,59 +3224,6 @@ evas_render_updates_internal(Evas *eo_e,
eina_evlog("-render_phase1", eo_e, 0.0, NULL);
}
- /* phase 1.5. check if the video should be inlined or stay in their overlay */
- alpha = ENFN->canvas_alpha_get(ENDT);
-
- EINA_LIST_FOREACH(e->video_objects, ll, eo_obj)
- {
- Efl_Canvas_Output *output;
- Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
-
- output = _evas_overlay_output_find(e, obj);
-
- /* we need the surface to be transparent to display the underlying overlay */
- if (output && alpha && _evas_render_can_use_overlay(e, eo_obj, output))
- _evas_object_image_video_overlay_show(eo_obj);
- else
- _evas_object_image_video_overlay_hide(eo_obj);
- }
-
- /* check if individual image objects can be dropped into hardware planes */
- if (ENFN->image_plane_assign)
- EINA_INARRAY_FOREACH(&evas->active_objects, ao)
- {
- Evas_Object_Protected_Data *obj2;
- Evas_Object *eo_obj2;
- Efl_Canvas_Output *output;
- Eina_List *lo;
-
- obj2 = ao->obj;
- eo_obj2 = obj2->object;
-
- if (!efl_isa(eo_obj2, EFL_CANVAS_IMAGE_INTERNAL_CLASS)) continue;
-
- if (evas_object_image_video_surface_get(eo_obj2)) continue;
-
- /* Find the output the object was in */
- EINA_LIST_FOREACH(e->outputs, lo, output)
- {
- if (!eina_list_data_find(output->planes, obj2)) continue ;
- _evas_object_image_plane_release(eo_obj2, obj2, output);
- break;
- }
-
- /* A video object can only be in one output at a time, check that first */
- output = _evas_overlay_output_find(e, obj2);
- if (!output) continue ;
-
- if (!_evas_render_can_use_overlay(e, eo_obj2, output))
- {
- /* This may free up things temporarily allocated by
- * _can_use_overlay() testing in the engine */
- _evas_object_image_plane_release(eo_obj2, obj2, output);
- }
- }
-
eina_evlog("+render_phase1_direct", eo_e, 0.0, NULL);
/* phase 1.8. pre render for proxy */
_evas_render_phase1_direct(e, &e->active_objects, &e->restack_objects,
@@ -3384,11 +3331,66 @@ evas_render_updates_internal(Evas *eo_e,
}
eina_evlog("-render_phase5", eo_e, 0.0, NULL);
+ /* phase 6. check if video surface should be inlined or stay in their hardware plane */
+ eina_evlog("+render_phase6", eo_e, 0.0, NULL);
+ alpha = ENFN->canvas_alpha_get(ENDT);
+
+ EINA_LIST_FOREACH(e->video_objects, ll, eo_obj)
+ {
+ Efl_Canvas_Output *output;
+ Evas_Object_Protected_Data *obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
+
+ output = _evas_overlay_output_find(e, obj);
+
+ /* we need the surface to be transparent to display the underlying overlay */
+ if (output && alpha && _evas_render_can_use_overlay(e, eo_obj, output))
+ _evas_object_image_video_overlay_show(eo_obj);
+ else
+ _evas_object_image_video_overlay_hide(eo_obj);
+ }
+
+ /* check if individual image objects can be dropped into hardware planes */
+ if (ENFN->image_plane_assign)
+ EINA_INARRAY_FOREACH(&evas->active_objects, ao)
+ {
+ Evas_Object_Protected_Data *obj2;
+ Evas_Object *eo_obj2;
+ Efl_Canvas_Output *output;
+ Eina_List *lo;
+
+ obj2 = ao->obj;
+ eo_obj2 = obj2->object;
+
+ if (!efl_isa(eo_obj2, EFL_CANVAS_IMAGE_INTERNAL_CLASS)) continue;
+
+ if (evas_object_image_video_surface_get(eo_obj2)) continue;
+
+ /* Find the output the object was in */
+ EINA_LIST_FOREACH(e->outputs, lo, output)
+ {
+ if (!eina_list_data_find(output->planes, obj2)) continue ;
+ _evas_object_image_plane_release(eo_obj2, obj2, output);
+ break;
+ }
+
+ /* A video object can only be in one output at a time, check that first */
+ output = _evas_overlay_output_find(e, obj2);
+ if (!output) continue ;
+
+ if (!_evas_render_can_use_overlay(e, eo_obj2, output))
+ {
+ /* This may free up things temporarily allocated by
+ * _can_use_overlay() testing in the engine */
+ _evas_object_image_plane_release(eo_obj2, obj2, output);
+ }
+ }
+ eina_evlog("-render_phase6", eo_e, 0.0, NULL);
+
/* save this list */
/* obscuring_objects_orig = obscuring_objects; */
/* obscuring_objects = NULL; */
- /* phase 6. go thru each update rect and render objects in it*/
- eina_evlog("+render_phase6", eo_e, 0.0, NULL);
+ /* phase 7. go thru each update rect and render objects in it*/
+ eina_evlog("+render_phase7", eo_e, 0.0, NULL);
if (do_draw)
{
Render_Updates *ru;
@@ -3414,7 +3416,7 @@ evas_render_updates_internal(Evas *eo_e,
haveup = EINA_TRUE;
- /* phase 6.1 render every snapshot that needs to be updated
+ /* phase 7.1 render every snapshot that needs to be updated
for this part of the screen */
eina_evlog("+render_snapshots", eo_e, 0.0, NULL);
for (j = e->snapshot_objects.count - 1; j >= 0; j--)
@@ -3473,7 +3475,7 @@ evas_render_updates_internal(Evas *eo_e,
eina_evlog("-render_snapshots", eo_e, 0.0, NULL);
eina_evlog("+render_update", eo_e, 0.0, NULL);
- /* phase 6.2 render all the object on the target surface */
+ /* phase 7.2 render all the object on the target surface */
if ((do_async) || (make_updates))
{
ru = malloc(sizeof(*ru));
@@ -3533,7 +3535,7 @@ evas_render_updates_internal(Evas *eo_e,
rendering = haveup;
eina_evlog("-render_surface", eo_e, 0.0, NULL);
}
- eina_evlog("-render_phase6", eo_e, 0.0, NULL);
+ eina_evlog("-render_phase7", eo_e, 0.0, NULL);
eina_evlog("+render_clear", eo_e, 0.0, NULL);
if (!do_async && rendering)