(RMenu Disp) Correctly frees and reinitializes RMenu texture asset

This commit is contained in:
twinaphex 2013-11-18 03:23:32 +01:00
parent 275789d99f
commit 2fab149ae4
2 changed files with 10 additions and 3 deletions

View File

@ -64,6 +64,7 @@
struct texture_image *menu_texture; struct texture_image *menu_texture;
static bool render_normal = true; static bool render_normal = true;
static bool menu_texture_inited =false;
static void render_background(rgui_handle_t *rgui) static void render_background(rgui_handle_t *rgui)
{ {
@ -383,17 +384,16 @@ static void rmenu_render(void *data)
void rmenu_set_texture(void *data, bool enable) void rmenu_set_texture(void *data, bool enable)
{ {
static bool inited =false;
rgui_handle_t *rgui = (rgui_handle_t*)data; rgui_handle_t *rgui = (rgui_handle_t*)data;
if (inited) if (menu_texture_inited)
return; return;
if (driver.video_poke && driver.video_poke->set_texture_enable) if (driver.video_poke && driver.video_poke->set_texture_enable)
{ {
driver.video_poke->set_texture_frame(driver.video_data, menu_texture->pixels, driver.video_poke->set_texture_frame(driver.video_data, menu_texture->pixels,
enable, rgui->width, rgui->height, 1.0f); enable, rgui->width, rgui->height, 1.0f);
inited = true; menu_texture_inited = true;
} }
} }
@ -437,6 +437,7 @@ static void rmenu_free_assets(void *data)
free(menu_texture->pixels); free(menu_texture->pixels);
menu_texture->pixels = NULL; menu_texture->pixels = NULL;
} }
menu_texture_inited = false;
#endif #endif
} }

View File

@ -1110,6 +1110,8 @@ int menu_set_settings(void *data, unsigned setting, unsigned action)
} }
driver.video->restart(); driver.video->restart();
if (menu_ctx && menu_ctx->free_assets)
menu_ctx->free_assets(rgui);
if (menu_ctx && menu_ctx->init_assets) if (menu_ctx && menu_ctx->init_assets)
menu_ctx->init_assets(rgui); menu_ctx->init_assets(rgui);
} }
@ -1128,6 +1130,8 @@ int menu_set_settings(void *data, unsigned setting, unsigned action)
g_extern.lifecycle_state |= (1ULL << MODE_VIDEO_PAL_TEMPORAL_ENABLE); g_extern.lifecycle_state |= (1ULL << MODE_VIDEO_PAL_TEMPORAL_ENABLE);
driver.video->restart(); driver.video->restart();
if (menu_ctx && menu_ctx->free_assets)
menu_ctx->free_assets(rgui);
if (menu_ctx && menu_ctx->init_assets) if (menu_ctx && menu_ctx->init_assets)
menu_ctx->init_assets(rgui); menu_ctx->init_assets(rgui);
} }
@ -1138,6 +1142,8 @@ int menu_set_settings(void *data, unsigned setting, unsigned action)
g_extern.lifecycle_state &= ~(1ULL << MODE_VIDEO_PAL_TEMPORAL_ENABLE); g_extern.lifecycle_state &= ~(1ULL << MODE_VIDEO_PAL_TEMPORAL_ENABLE);
driver.video->restart(); driver.video->restart();
if (menu_ctx && menu_ctx->free_assets)
menu_ctx->free_assets(rgui);
if (menu_ctx && menu_ctx->init_assets) if (menu_ctx && menu_ctx->init_assets)
menu_ctx->init_assets(rgui); menu_ctx->init_assets(rgui);
} }