evas: prevent double tilebuf creation/destruction during window resize.

This commit is contained in:
Cedric BAIL 2017-08-25 10:47:52 -07:00
parent 600a5fa76c
commit 8ffc0f2b9e
4 changed files with 12 additions and 52 deletions

View File

@ -810,20 +810,12 @@ eng_update(void *engine EINA_UNUSED, void *data, void *info, unsigned int w, uns
w, h, w, h,
info->info.rotation, info->info.rotation,
info->info.depth); info->info.depth);
evas_render_engine_software_generic_update(&re->generic.software,
re->generic.software.ob,
w, h);
} }
} }
if (re->generic.software.tb)
evas_common_tilebuf_free(re->generic.software.tb);
re->generic.software.tb =
evas_common_tilebuf_new(w, h);
if (re->generic.software.tb)
evas_common_tilebuf_set_tile_size(re->generic.software.tb,
TILESIZE, TILESIZE);
if (re->generic.software.tb)
evas_render_engine_software_generic_tile_strict_set(&re->generic.software, EINA_TRUE);
evas_outbuf_use(eng_get_ob(re)); evas_outbuf_use(eng_get_ob(re));
return 1; return 1;

View File

@ -1060,16 +1060,6 @@ eng_update(void *engine EINA_UNUSED, void *data, void *in, unsigned int w, unsig
} }
} }
if (re->generic.software.tb)
evas_common_tilebuf_free(re->generic.software.tb);
re->generic.software.tb = evas_common_tilebuf_new(w, h);
if (re->generic.software.tb)
evas_common_tilebuf_set_tile_size(re->generic.software.tb,
TILESIZE, TILESIZE);
if (re->generic.software.tb)
evas_render_engine_software_generic_tile_strict_set(&re->generic.software, EINA_TRUE);
evas_outbuf_use(eng_get_ob(re)); evas_outbuf_use(eng_get_ob(re));
return 1; return 1;

View File

@ -1736,10 +1736,8 @@ eng_update(void *engine EINA_UNUSED, void *data, void *in, unsigned int w, unsig
(info->msaa_bits != eng_get_ob(re)->msaa_bits) || (info->msaa_bits != eng_get_ob(re)->msaa_bits) ||
(info->info.destination_alpha != eng_get_ob(re)->alpha)) (info->info.destination_alpha != eng_get_ob(re)->alpha))
{ {
Outbuf *ob, *ob_old; Outbuf *ob;
ob_old = re->generic.software.ob;
re->generic.software.ob = NULL;
gl_wins--; gl_wins--;
ob = eng_window_new(info, ob = eng_window_new(info,
@ -1757,16 +1755,11 @@ eng_update(void *engine EINA_UNUSED, void *data, void *in, unsigned int w, unsig
info->depth_bits, info->depth_bits,
info->stencil_bits, info->stencil_bits,
info->msaa_bits); info->msaa_bits);
if (!ob) if (!ob) return 0;
{
if (ob_old) eng_window_free(ob_old);
return 0;
}
eng_window_use(ob); eng_window_use(ob);
if (ob_old) eng_window_free(ob_old); evas_render_engine_software_generic_update(&re->generic.software,
evas_render_engine_software_generic_update(&re->generic.software, ob, ob, w, h);
w, h);
gl_wins++; gl_wins++;
} }
else if ((eng_get_ob(re)->w != w) || else if ((eng_get_ob(re)->w != w) ||
@ -1774,12 +1767,9 @@ eng_update(void *engine EINA_UNUSED, void *data, void *in, unsigned int w, unsig
(eng_get_ob(re)->info->info.rotation != eng_get_ob(re)->rot)) (eng_get_ob(re)->info->info.rotation != eng_get_ob(re)->rot))
{ {
eng_outbuf_reconfigure(eng_get_ob(re), w, h, eng_get_ob(re)->info->info.rotation, 0); eng_outbuf_reconfigure(eng_get_ob(re), w, h, eng_get_ob(re)->info->info.rotation, 0);
if (re->generic.software.tb) evas_render_engine_software_generic_update(&re->generic.software,
evas_common_tilebuf_free(re->generic.software.tb); re->generic.software.ob,
re->generic.software.tb = evas_common_tilebuf_new(w, h); w, h);
if (re->generic.software.tb)
evas_common_tilebuf_set_tile_size(re->generic.software.tb,
TILESIZE, TILESIZE);
} }
} }

View File

@ -722,8 +722,6 @@ eng_update(void *engine EINA_UNUSED, void *data, void *info, unsigned int w, uns
eng_window_use(ob); eng_window_use(ob);
evas_render_engine_software_generic_update(&re->generic.software,
ob, w, h);
gl_wins++; gl_wins++;
} }
else if ((ob->w != (int)w) || (ob->h != (int)h) || else if ((ob->w != (int)w) || (ob->h != (int)h) ||
@ -736,18 +734,8 @@ eng_update(void *engine EINA_UNUSED, void *data, void *info, unsigned int w, uns
if (!eng_get_ob(re)) goto ob_err; if (!eng_get_ob(re)) goto ob_err;
if (re->generic.software.tb) evas_render_engine_software_generic_update(&re->generic.software,
evas_common_tilebuf_free(re->generic.software.tb); ob, w, h);
re->generic.software.tb = evas_common_tilebuf_new(w, h);
if (re->generic.software.tb)
{
evas_common_tilebuf_set_tile_size(re->generic.software.tb,
TILESIZE, TILESIZE);
evas_render_engine_software_generic_tile_strict_set
(&re->generic.software, EINA_TRUE);
}
eng_window_use(eng_get_ob(re)); eng_window_use(eng_get_ob(re));
return 1; return 1;