summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/lib/evas/canvas/evas_render.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/lib/evas/canvas/evas_render.c b/src/lib/evas/canvas/evas_render.c
index bb84209109..e02ee0d5ef 100644
--- a/src/lib/evas/canvas/evas_render.c
+++ b/src/lib/evas/canvas/evas_render.c
@@ -1360,6 +1360,9 @@ _evas_render_can_use_overlay(Evas_Public_Data *e, Evas_Object *eo_obj)
Eina_Bool surface_below, stacking_check, object_above = EINA_FALSE;
Eina_Bool ignore_window;
+ if (!_evas_object_image_can_use_plane(obj))
+ return EINA_FALSE;
+
video_parent = _evas_object_image_video_parent_get(eo_obj);
/* Check if any one is the stack make this object mapped */
@@ -3075,6 +3078,7 @@ evas_render_updates_internal(Evas *eo_e,
unsigned int i;
Phase1_Context p1ctx;
int redraw_all = 0;
+ Evas_Active_Entry *ao;
Evas_Render_Mode render_mode = !do_async ?
EVAS_RENDER_MODE_SYNC :
EVAS_RENDER_MODE_ASYNC_INIT;
@@ -3157,6 +3161,30 @@ evas_render_updates_internal(Evas *eo_e,
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 *obj;
+ Evas_Object *eo_obj;
+
+ obj = ao->obj;
+ eo_obj = obj->object;
+
+ if (!efl_isa(eo_obj, EFL_CANVAS_IMAGE_INTERNAL_CLASS)) continue;
+
+ if (evas_object_image_video_surface_get(eo_obj)) continue;
+
+ _evas_object_image_plane_release(eo_obj, obj);
+ if (!_evas_render_can_use_overlay(e, eo_obj))
+ {
+ /* This may free up things temporarily allocated by
+ * _can_use_overlay() testing in the engine */
+ _evas_object_image_plane_release(eo_obj, obj);
+ }
+ }
+
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,