forked from enlightenment/efl
image cache for eva sis preciselyu that.. cache. image and font data are
kept resident as long as the obejct has been rendered at leats once AND it is still within the viewport of the output of the evas and it is still visible. if it does not meet these conditiosn it gets put into "Cache" and only then does cache become an issue. the chancges were nice and small to do this :) SVN revision: 4634
This commit is contained in:
parent
a34b33695c
commit
411ec99a57
|
@ -22,14 +22,24 @@ _evas_free_image_renderer_data(Evas e, Evas_Object o)
|
|||
switch (e->current.render_method)
|
||||
{
|
||||
case RENDER_METHOD_ALPHA_SOFTWARE:
|
||||
if (o->renderer_data.method[e->current.render_method])
|
||||
__evas_imlib_image_free((void *)o->renderer_data.method[e->current.render_method]);
|
||||
break;
|
||||
case RENDER_METHOD_BASIC_HARDWARE:
|
||||
if (o->renderer_data.method[e->current.render_method])
|
||||
__evas_x11_image_free((void *)o->renderer_data.method[e->current.render_method]);
|
||||
break;
|
||||
case RENDER_METHOD_3D_HARDWARE:
|
||||
if (o->renderer_data.method[e->current.render_method])
|
||||
__evas_gl_image_free((void *)o->renderer_data.method[e->current.render_method]);
|
||||
break;
|
||||
case RENDER_METHOD_ALPHA_HARDWARE:
|
||||
if (o->renderer_data.method[e->current.render_method])
|
||||
__evas_render_image_free((void *)o->renderer_data.method[e->current.render_method]);
|
||||
break;
|
||||
case RENDER_METHOD_IMAGE:
|
||||
if (o->renderer_data.method[e->current.render_method])
|
||||
__evas_image_image_free((void *)o->renderer_data.method[e->current.render_method]);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
|
|
@ -376,6 +376,33 @@ evas_render_updates(Evas e)
|
|||
|
||||
if (o->delete_me)
|
||||
delete_objects = evas_list_append(delete_objects, o);
|
||||
if ((o->type == OBJECT_IMAGE) ||
|
||||
(o->type == OBJECT_TEXT))
|
||||
{
|
||||
if ((!(RECTS_INTERSECT(o->current.x, o->current.y,
|
||||
o->current.w, o->current.h,
|
||||
e->current.viewport.x, e->current.viewport.y,
|
||||
e->current.viewport.w, e->current.viewport.h)))
|
||||
|| (!o->current.visible))
|
||||
{
|
||||
if (o->type == OBJECT_IMAGE)
|
||||
{
|
||||
if (o->renderer_data.method[e->current.render_method])
|
||||
{
|
||||
func_image_free((void *)o->renderer_data.method[e->current.render_method]);
|
||||
o->renderer_data.method[e->current.render_method] = NULL;
|
||||
}
|
||||
}
|
||||
else if (o->type == OBJECT_TEXT)
|
||||
{
|
||||
if (o->renderer_data.method[e->current.render_method])
|
||||
{
|
||||
func_text_font_free((void *)o->renderer_data.method[e->current.render_method]);
|
||||
o->renderer_data.method[e->current.render_method] = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (o->changed)
|
||||
{
|
||||
o->changed = 0;
|
||||
|
@ -848,7 +875,10 @@ evas_render_updates(Evas e)
|
|||
void *im;
|
||||
|
||||
oo = o;
|
||||
im = func_image_new_from_file(e->current.display, oo->current.file);
|
||||
if (o->renderer_data.method[e->current.render_method])
|
||||
im = (void *)o->renderer_data.method[e->current.render_method];
|
||||
else
|
||||
o->renderer_data.method[e->current.render_method] = im = func_image_new_from_file(e->current.display, oo->current.file);
|
||||
if (im)
|
||||
{
|
||||
int visx, visy, visw, vish;
|
||||
|
@ -994,7 +1024,7 @@ evas_render_updates(Evas e)
|
|||
}
|
||||
free(pointsx);
|
||||
free(pointsy);
|
||||
func_image_free(im);
|
||||
/* func_image_free(im);*/
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -1004,8 +1034,11 @@ evas_render_updates(Evas e)
|
|||
void *fn;
|
||||
|
||||
oo = o;
|
||||
fn = func_text_font_new(e->current.display, oo->current.font,
|
||||
(oo->current.size * (double)e->current.drawable_width) / e->current.viewport.w);
|
||||
if (o->renderer_data.method[e->current.render_method])
|
||||
fn = (void *)o->renderer_data.method[e->current.render_method];
|
||||
else
|
||||
o->renderer_data.method[e->current.render_method] = fn = func_text_font_new(e->current.display, oo->current.font,
|
||||
(oo->current.size * (double)e->current.drawable_width) / e->current.viewport.w);
|
||||
if (fn)
|
||||
{
|
||||
func_text_draw(fn,
|
||||
|
@ -1025,7 +1058,7 @@ evas_render_updates(Evas e)
|
|||
oo->current.g,
|
||||
oo->current.b,
|
||||
oo->current.a);
|
||||
func_text_font_free(fn);
|
||||
/* func_text_font_free(fn);*/
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
|
|
@ -27,14 +27,24 @@ _evas_free_text_renderer_data(Evas e, Evas_Object o)
|
|||
switch (e->current.render_method)
|
||||
{
|
||||
case RENDER_METHOD_ALPHA_SOFTWARE:
|
||||
if (o->renderer_data.method[e->current.render_method])
|
||||
__evas_imlib_text_font_free((void *)o->renderer_data.method[e->current.render_method]);
|
||||
break;
|
||||
case RENDER_METHOD_BASIC_HARDWARE:
|
||||
if (o->renderer_data.method[e->current.render_method])
|
||||
__evas_x11_text_font_free((void *)o->renderer_data.method[e->current.render_method]);
|
||||
break;
|
||||
case RENDER_METHOD_3D_HARDWARE:
|
||||
if (o->renderer_data.method[e->current.render_method])
|
||||
__evas_gl_text_font_free((void *)o->renderer_data.method[e->current.render_method]);
|
||||
break;
|
||||
case RENDER_METHOD_ALPHA_HARDWARE:
|
||||
if (o->renderer_data.method[e->current.render_method])
|
||||
__evas_render_text_font_free((void *)o->renderer_data.method[e->current.render_method]);
|
||||
break;
|
||||
case RENDER_METHOD_IMAGE:
|
||||
if (o->renderer_data.method[e->current.render_method])
|
||||
__evas_image_text_font_free((void *)o->renderer_data.method[e->current.render_method]);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
|
|
@ -196,8 +196,8 @@ main(int argc, char **argv)
|
|||
evas_set_output_size(e, win_w, win_h);
|
||||
evas_set_output_viewport(e, 0, 0, win_w, win_h);
|
||||
|
||||
evas_set_font_cache(e, 1 * 1024 * 1024);
|
||||
evas_set_image_cache(e, 8 * 1024 * 1024);
|
||||
evas_set_font_cache(e, 512 * 1024);
|
||||
evas_set_image_cache(e, 1 * 1024 * 1024);
|
||||
|
||||
o[0] = evas_add_image_from_file(e, IMGDIR"sky001.png");
|
||||
evas_show(e, o[0]);
|
||||
|
|
Loading…
Reference in New Issue