diff --git a/src/lib/evas/canvas/evas_out.c b/src/lib/evas/canvas/evas_out.c index cd7fbaf2d8..34e2933469 100644 --- a/src/lib/evas/canvas/evas_out.c +++ b/src/lib/evas/canvas/evas_out.c @@ -172,13 +172,14 @@ efl_canvas_output_engine_info_get(Efl_Canvas_Output *output) } EAPI Eina_Bool -efl_canvas_output_lock(Efl_Canvas_Output *output EINA_UNUSED) +efl_canvas_output_lock(Efl_Canvas_Output *output) { - return EINA_FALSE; + output->lock++; + return EINA_TRUE; } EAPI Eina_Bool efl_canvas_output_unlock(Efl_Canvas_Output *output EINA_UNUSED) { - return EINA_FALSE; + return !!(--output->lock); } diff --git a/src/lib/evas/canvas/evas_render.c b/src/lib/evas/canvas/evas_render.c index 3f1895de2d..9e6a65859f 100644 --- a/src/lib/evas/canvas/evas_render.c +++ b/src/lib/evas/canvas/evas_render.c @@ -3319,6 +3319,9 @@ evas_render_updates_internal(Evas *eo_e, { // Avoid processing not ready output until they are if (!out->output) continue ; + // Locked output are output that should not yet be rendered + // because the tick/vsync for it doesn't allow it yet. + if (out->lock > 0) continue ; /* phase 6. Initialize output */ if (out->changed) diff --git a/src/lib/evas/include/evas_private.h b/src/lib/evas/include/evas_private.h index bc7c1f9aba..8a16d63e68 100644 --- a/src/lib/evas/include/evas_private.h +++ b/src/lib/evas/include/evas_private.h @@ -1336,6 +1336,8 @@ struct _Efl_Canvas_Output int info_magic; + unsigned short lock; + Eina_Bool changed : 1; };