forked from enlightenment/efl
ecore-evas-wayland: add frame callback listener during render
when a render occurs, frame callbacks must be managed in order to ensure successful rendering for future frames. the best place to do this is in the engine here, since this is the lowest-level place which has access to both the wl_surface as well as the evas rendering state ref T2784
This commit is contained in:
parent
5ad3c6358f
commit
ef89bfbbed
|
@ -451,6 +451,8 @@ _ecore_evas_wl_common_free(Ecore_Evas *ee)
|
|||
|
||||
if (!ee) return;
|
||||
wdata = ee->engine.data;
|
||||
if (wdata->anim_callback)
|
||||
wl_callback_destroy(wdata->anim_callback);
|
||||
if (wdata->win) ecore_wl_window_free(wdata->win);
|
||||
wdata->win = NULL;
|
||||
free(wdata);
|
||||
|
@ -1258,6 +1260,22 @@ _ecore_evas_wl_common_pre_render(Ecore_Evas *ee)
|
|||
return rend;
|
||||
}
|
||||
|
||||
static void
|
||||
_anim_cb_animate(void *data, struct wl_callback *callback, uint32_t serial EINA_UNUSED)
|
||||
{
|
||||
Ecore_Evas_Engine_Wl_Data *wdata = data;
|
||||
|
||||
if ((wdata->anim_callback) && (callback != wdata->anim_callback)) return;
|
||||
|
||||
wl_callback_destroy(callback);
|
||||
wdata->anim_callback = NULL;
|
||||
}
|
||||
|
||||
static const struct wl_callback_listener _anim_listener =
|
||||
{
|
||||
_anim_cb_animate
|
||||
};
|
||||
|
||||
void
|
||||
_ecore_evas_wl_common_render_updates(void *data, Evas *evas EINA_UNUSED, void *event)
|
||||
{
|
||||
|
@ -1268,7 +1286,13 @@ _ecore_evas_wl_common_render_updates(void *data, Evas *evas EINA_UNUSED, void *e
|
|||
|
||||
ee->in_async_render = EINA_FALSE;
|
||||
|
||||
_ecore_evas_wl_common_render_updates_process(ee, ev->updated_area);
|
||||
if (_ecore_evas_wl_common_render_updates_process(ee, ev->updated_area))
|
||||
{
|
||||
Ecore_Evas_Engine_Wl_Data *wdata = ee->engine.data;
|
||||
|
||||
wdata->anim_callback = wl_surface_frame(ecore_wl_window_surface_get(wdata->win));
|
||||
wl_callback_add_listener(wdata->anim_callback, &_anim_listener, wdata);
|
||||
}
|
||||
|
||||
if (ee->delayed.alpha_changed)
|
||||
{
|
||||
|
|
|
@ -35,6 +35,7 @@ struct _Ecore_Evas_Engine_Wl_Data
|
|||
#ifdef BUILD_ECORE_EVAS_WAYLAND_EGL
|
||||
struct wl_egl_window *egl_win;
|
||||
#endif
|
||||
struct wl_callback *anim_callback;
|
||||
};
|
||||
|
||||
Ecore_Evas_Interface_Wayland *_ecore_evas_wl_interface_new(void);
|
||||
|
|
Loading…
Reference in New Issue