forked from enlightenment/enlightenment
move client post-update adding into render function
in some cases, it's possible for a client which expects to render on the next frame to actually render on the frame after. in these cases, the compositor must not clear the pixmap image until after the render has occurred in order to avoid inaccuracies. for this reason, the best place to flag a client for post-render work is at the time of the client's render ref T2762 ref D3120
This commit is contained in:
parent
fa0e3c48fc
commit
203932fed9
|
@ -307,14 +307,13 @@ _e_comp_cb_nocomp_begin_timeout(void *data)
|
|||
}
|
||||
|
||||
|
||||
static Eina_Bool
|
||||
static void
|
||||
_e_comp_client_update(E_Client *ec)
|
||||
{
|
||||
int pw, ph;
|
||||
Eina_Bool post = EINA_FALSE;
|
||||
|
||||
DBG("UPDATE [%p] pm = %p", ec, ec->pixmap);
|
||||
if (e_object_is_del(E_OBJECT(ec))) return EINA_FALSE;
|
||||
if (e_object_is_del(E_OBJECT(ec))) return;
|
||||
|
||||
e_pixmap_size_get(ec->pixmap, &pw, &ph);
|
||||
|
||||
|
@ -327,7 +326,6 @@ _e_comp_client_update(E_Client *ec)
|
|||
e_pixmap_size_changed(ec->pixmap, pw, ph))
|
||||
{
|
||||
e_pixmap_image_clear(ec->pixmap, 0);
|
||||
post = EINA_TRUE;
|
||||
e_comp_object_render_update_del(ec->frame); //clear update
|
||||
}
|
||||
else if (!e_pixmap_size_get(ec->pixmap, NULL, NULL))
|
||||
|
@ -346,7 +344,6 @@ _e_comp_client_update(E_Client *ec)
|
|||
if (e_pixmap_is_x(ec->pixmap) && (!ec->override))
|
||||
evas_object_resize(ec->frame, ec->w, ec->h);
|
||||
}
|
||||
return post || (!e_pixmap_is_x(ec->pixmap));
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -398,11 +395,7 @@ _e_comp_cb_update(E_Comp *c)
|
|||
{
|
||||
/* clear update flag */
|
||||
e_comp_object_render_update_del(ec->frame);
|
||||
if (_e_comp_client_update(ec))
|
||||
{
|
||||
c->post_updates = eina_list_append(c->post_updates, ec);
|
||||
e_object_ref(E_OBJECT(ec));
|
||||
}
|
||||
_e_comp_client_update(ec);
|
||||
}
|
||||
_e_comp_fps_update(c);
|
||||
if (conf->fps_show)
|
||||
|
|
|
@ -3484,6 +3484,11 @@ end:
|
|||
|
||||
eina_iterator_free(it);
|
||||
E_FREE_FUNC(cw->pending_updates, eina_tiler_free);
|
||||
if (ret)
|
||||
{
|
||||
cw->comp->post_updates = eina_list_append(cw->comp->post_updates, cw->ec);
|
||||
e_object_ref(E_OBJECT(cw->ec));
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue