add an engine idle flush

SVN revision: 30355
This commit is contained in:
Carsten Haitzler 2007-06-17 02:56:59 +00:00
parent 1f4e4934b2
commit c303f04048
17 changed files with 131 additions and 2 deletions

View File

@ -421,7 +421,8 @@ extern "C" {
EAPI void evas_render_updates_free (Evas_List *updates);
EAPI void evas_render (Evas *e);
EAPI void evas_norender (Evas *e);
EAPI void evas_render_idle_flush (Evas *e);
/* rectangle objects */
EAPI Evas_Object *evas_object_rectangle_add (Evas *e);

View File

@ -67,7 +67,6 @@ evas_obscured_clear(Evas *e)
}
}
static void
_evas_render_phase1_object_process(Evas *e, Evas_Object *obj, Evas_List **active_objects, Evas_List **restack_objects, Evas_List **delete_objects, int restack)
{
@ -501,3 +500,20 @@ evas_norender(Evas *e)
evas_render_updates_internal(e, 0, 0);
}
/**
* To be documented.
*
* FIXME: To be fixed.
*
*/
EAPI void
evas_render_idle_flush(Evas *e)
{
MAGIC_CHECK(e, Evas, MAGIC_EVAS);
return;
MAGIC_CHECK_END();
if ((e->engine.func) && (e->engine.func->output_idle_flush) &&
(e->engine.data.output))
e->engine.func->output_idle_flush(e->engine.data.output);
}

View File

@ -530,6 +530,7 @@ struct _Evas_Func
void *(*output_redraws_next_update_get) (void *data, int *x, int *y, int *w, int *h, int *cx, int *cy, int *cw, int *ch);
void (*output_redraws_next_update_push) (void *data, void *surface, int x, int y, int w, int h);
void (*output_flush) (void *data);
void (*output_idle_flush) (void *data);
void *(*context_new) (void *data);
void (*context_free) (void *data, void *context);

View File

@ -308,6 +308,14 @@ eng_output_flush(void *data)
re = (Render_Engine *)data;
}
static void
eng_output_idle_flush(void *data)
{
Render_Engine *re;
re = (Render_Engine *)data;
}
/* module advertising code */
EAPI int
module_open(Evas_Module *em)
@ -331,6 +339,7 @@ module_open(Evas_Module *em)
ORD(output_redraws_next_update_get);
ORD(output_redraws_next_update_push);
ORD(output_flush);
ORD(output_idle_flush);
/* now advertise out own api */
em->functions = (void *)(&func);
return 1;

View File

@ -15,6 +15,7 @@ static Evas_Func evas_engine_directfb_func = {
evas_engine_directfb_output_redraws_next_update_get,
evas_engine_directfb_output_redraws_next_update_push,
evas_engine_directfb_output_flush,
evas_engine_directfb_output_idle_flush,
/* draw context virtual methods */
evas_engine_directfb_context_new,
evas_engine_directfb_context_free,
@ -391,6 +392,14 @@ evas_engine_directfb_output_flush(void *data)
re = (Render_Engine *) data;
}
void
evas_engine_directfb_output_idle_flush(void *data)
{
Render_Engine *re;
re = (Render_Engine *) data;
}
void *
evas_engine_directfb_context_new(void *data)
{

View File

@ -59,6 +59,7 @@ void evas_engine_directfb_output_redraws_next_update_push(void
int w,
int h);
void evas_engine_directfb_output_flush(void *data);
void evas_engine_directfb_output_idle_flush(void *data);
void *evas_engine_directfb_context_new(void *data);
void evas_engine_directfb_context_free(void *data,
void *context);

View File

@ -33,6 +33,7 @@ static void eng_output_redraws_clear(void *data);
static void *eng_output_redraws_next_update_get(void *data, int *x, int *y, int *w, int *h, int *cx, int *cy, int *cw, int *ch);
static void eng_output_redraws_next_update_push(void *data, void *surface, int x, int y, int w, int h);
static void eng_output_flush(void *data);
static void eng_output_idle_flush(void *data);
/* internal engine routines */
static void *
@ -232,6 +233,14 @@ eng_output_flush(void *data)
re = (Render_Engine *)data;
}
static void
eng_output_idle_flush(void *data)
{
Render_Engine *re;
re = (Render_Engine *)data;
}
/* module advertising code */
EAPI int
module_open(Evas_Module *em)
@ -255,6 +264,7 @@ module_open(Evas_Module *em)
ORD(output_redraws_next_update_get);
ORD(output_redraws_next_update_push);
ORD(output_flush);
ORD(output_idle_flush);
/* now advertise out own api */
em->functions = (void *)(&func);
return 1;

View File

@ -294,6 +294,14 @@ eng_output_flush(void *data)
// printf("SYNC! %i\n", fr++);
}
static void
eng_output_idle_flush(void *data)
{
Render_Engine *re;
re = (Render_Engine *)data;
}
static void
eng_context_cutout_add(void *data, void *context, int x, int y, int w, int h)
{
@ -958,6 +966,7 @@ module_open(Evas_Module *em)
ORD(context_cutout_add);
ORD(context_cutout_clear);
ORD(output_flush);
ORD(output_idle_flush);
ORD(rectangle_draw);
ORD(line_draw);
ORD(polygon_point_add);

View File

@ -45,6 +45,7 @@ static void eng_output_redraws_clear(void *data);
static void *eng_output_redraws_next_update_get(void *data, int *x, int *y, int *w, int *h, int *cx, int *cy, int *cw, int *ch);
static void eng_output_redraws_next_update_push(void *data, void *surface, int x, int y, int w, int h);
static void eng_output_flush(void *data);
static void eng_output_idle_flush(void *data);
static void eng_rectangle_draw(void *data, void *context, void *surface, int x, int y, int w, int h);
@ -339,6 +340,14 @@ eng_output_flush(void *data)
// _xr_image_info_pool_flush(re->xinf, 0, 0);
}
static void
eng_output_idle_flush(void *data)
{
Render_Engine *re;
re = (Render_Engine *)data;
}
static void
eng_rectangle_draw(void *data, void *context, void *surface, int x, int y, int w, int h)
{
@ -599,6 +608,7 @@ module_open(Evas_Module *em)
ORD(output_redraws_next_update_get);
ORD(output_redraws_next_update_push);
ORD(output_flush);
ORD(output_idle_flush);
ORD(rectangle_draw);
ORD(line_draw);
ORD(polygon_draw);

View File

@ -632,6 +632,7 @@ static Evas_Func func =
NULL,
NULL,
NULL,
NULL,
/* draw context virtual methods */
eng_context_new,
eng_context_free,

View File

@ -38,6 +38,7 @@ static void eng_output_redraws_clear(void *data);
static void *eng_output_redraws_next_update_get(void *data, int *x, int *y, int *w, int *h, int *cx, int *cy, int *cw, int *ch);
static void eng_output_redraws_next_update_push(void *data, void *surface, int x, int y, int w, int h);
static void eng_output_flush(void *data);
static void eng_output_idle_flush(void *data);
/* engine api this module provides */
static void *
@ -291,6 +292,16 @@ eng_output_flush(void *data)
// evas_software_x11_outbuf_flush(re->ob);
}
static void
eng_output_idle_flush(void *data)
{
Render_Engine *re;
re = (Render_Engine *)data;
/* FIXME: clean up any resources kept around between renders in case
* we are animating a lot and want high fps */
}
/* module advertising code */
EAPI int
@ -315,6 +326,7 @@ module_open(Evas_Module *em)
ORD(output_redraws_next_update_get);
ORD(output_redraws_next_update_push);
ORD(output_flush);
ORD(output_idle_flush);
/* now advertise out own api */
em->functions = (void *)(&func);
return 1;

View File

@ -315,6 +315,14 @@ eng_output_flush(void *data)
evas_software_ddraw_outbuf_flush(re->ob);
}
static void
eng_output_idle_flush(void *data)
{
Render_Engine *re;
re = (Render_Engine *)data;
}
/* module advertising code */
EAPI int
module_open(Evas_Module *em)
@ -338,6 +346,7 @@ module_open(Evas_Module *em)
ORD(output_redraws_next_update_get);
ORD(output_redraws_next_update_push);
ORD(output_flush);
ORD(output_idle_flush);
/* now advertise out own api */
em->functions = (void *)(&func);
return 1;

View File

@ -925,6 +925,7 @@ static Evas_Func func =
NULL,
NULL,
NULL,
NULL,
/* draw context virtual methods */
eng_context_new,
eng_context_free,

View File

@ -33,6 +33,7 @@ static void eng_output_redraws_clear(void *data);
static void *eng_output_redraws_next_update_get(void *data, int *x, int *y, int *w, int *h, int *cx, int *cy, int *cw, int *ch);
static void eng_output_redraws_next_update_push(void *data, void *surface, int x, int y, int w, int h);
static void eng_output_flush(void *data);
static void eng_output_idle_flush(void *data);
/* internal engine routines */
static void *
@ -247,6 +248,14 @@ eng_output_flush(void *data)
re = (Render_Engine *)data;
}
static void
eng_output_idle_flush(void *data)
{
Render_Engine *re;
re = (Render_Engine *)data;
}
/* module advertising code */
EAPI int
module_open(Evas_Module *em)
@ -270,6 +279,7 @@ module_open(Evas_Module *em)
ORD(output_redraws_next_update_get);
ORD(output_redraws_next_update_push);
ORD(output_flush);
ORD(output_idle_flush);
/* now advertise out own api */
em->functions = (void *)(&func);
return 1;

View File

@ -43,6 +43,7 @@ static void eng_output_redraws_clear(void *data);
static void *eng_output_redraws_next_update_get(void *data, int *x, int *y, int *w, int *h, int *cx, int *cy, int *cw, int *ch);
static void eng_output_redraws_next_update_push(void *data, void *surface, int x, int y, int w, int h);
static void eng_output_flush(void *data);
static void eng_output_idle_flush(void *data);
/* internal engine routines */
static void *
@ -374,6 +375,15 @@ eng_output_flush(void *data)
evas_software_x11_outbuf_flush(re->ob);
}
static void
eng_output_idle_flush(void *data)
{
Render_Engine *re;
re = (Render_Engine *)data;
evas_software_x11_outbuf_flush(re->ob);
}
/* module advertising code */
EAPI int
@ -398,6 +408,7 @@ module_open(Evas_Module *em)
ORD(output_redraws_next_update_get);
ORD(output_redraws_next_update_push);
ORD(output_flush);
ORD(output_idle_flush);
/* now advertise out own api */
em->functions = (void *)(&func);
return 1;

View File

@ -44,6 +44,7 @@ static void eng_output_redraws_clear(void *data);
static void *eng_output_redraws_next_update_get(void *data, int *x, int *y, int *w, int *h, int *cx, int *cy, int *cw, int *ch);
static void eng_output_redraws_next_update_push(void *data, void *surface, int x, int y, int w, int h);
static void eng_output_flush(void *data);
static void eng_output_idle_flush(void *data);
static void *
_output_setup(int w,
@ -447,6 +448,14 @@ eng_output_flush(void *data)
evas_software_xcb_outbuf_flush(re->ob);
}
static void
eng_output_idle_flush(void *data)
{
Render_Engine *re;
re = (Render_Engine *)data;
}
/* module advertising code */
EAPI int
module_open(Evas_Module *em)
@ -470,6 +479,7 @@ module_open(Evas_Module *em)
ORD(output_redraws_next_update_get);
ORD(output_redraws_next_update_push);
ORD(output_flush);
ORD(output_idle_flush);
/* now advertise out own api */
em->functions = (void *)(&func);
return 1;

View File

@ -311,6 +311,14 @@ eng_output_flush(void *data)
_xr_image_info_pool_flush(re->xinf, 0, 0);
}
static void
eng_output_idle_flush(void *data)
{
Render_Engine *re;
re = (Render_Engine *)data;
}
static void
eng_rectangle_draw(void *data, void *context, void *surface, int x, int y, int w, int h)
{
@ -878,6 +886,7 @@ module_open(Evas_Module *em)
ORD(output_redraws_next_update_get);
ORD(output_redraws_next_update_push);
ORD(output_flush);
ORD(output_idle_flush);
ORD(rectangle_draw);
ORD(line_draw);
ORD(polygon_draw);