Don't init assets from init.

Rename to context_reset/context_destroy and let the driver init/uninit
step signal the menu when the context is going down and coming up.
This commit is contained in:
Themaister 2014-05-31 23:22:20 +02:00
parent d5ec0c8d90
commit f1b3252193
5 changed files with 30 additions and 19 deletions

View File

@ -508,9 +508,10 @@ bool driver_update_system_av_info(const struct retro_system_av_info *info)
#ifdef HAVE_MENU
static void init_menu(void)
{
if (!driver.menu_ctx)
find_menu_driver();
if (driver.menu)
return;
find_menu_driver();
if (!(driver.menu = (rgui_handle_t*)menu_init(driver.menu_ctx)))
{
RARCH_ERR("Cannot initialize menu.\n");
@ -547,6 +548,9 @@ void init_drivers(void)
g_extern.system.hw_render_callback.context_reset();
driver.video_cache_context_ack = false;
if (driver.menu_ctx && driver.menu_ctx->context_reset)
driver.menu_ctx->context_reset(driver.menu);
init_audio();
#ifdef HAVE_CAMERA
@ -631,9 +635,15 @@ void uninit_drivers(void)
if (g_extern.system.hw_render_callback.context_destroy && !driver.video_cache_context)
g_extern.system.hw_render_callback.context_destroy();
if (driver.menu_ctx && driver.menu_ctx->context_destroy)
driver.menu_ctx->context_destroy(driver.menu);
#ifdef HAVE_MENU
if (!driver.menu_data_own)
{
menu_free(driver.menu);
driver.menu = NULL;
}
#endif
uninit_video_input();

View File

@ -418,8 +418,8 @@ typedef struct menu_ctx_driver
void (*frame)(void);
void* (*init)(void);
void (*free)(void*);
void (*init_assets)(void*);
void (*free_assets)(void*);
void (*context_reset)(void*);
void (*context_destroy)(void*);
void (*populate_entries)(void*, unsigned);
void (*iterate)(void*, unsigned);
int (*input_postprocess)(uint64_t);

View File

@ -1019,7 +1019,7 @@ static GLuint png_texture_load(const char * file_name, int * width, int * height
return texture;
}
static void lakka_free_assets(void *data)
static void lakka_context_destroy(void *data)
{
(void)data;
@ -1036,7 +1036,7 @@ static void lakka_free_assets(void *data)
free(tweens);
}
static void lakka_init_assets(void *data)
static void lakka_context_reset(void *data)
{
char path[256], dirpath[256];;
rgui_handle_t *rgui = (rgui_handle_t*)data;
@ -1190,13 +1190,10 @@ static void lakka_init_items(int i, menu_category_t *category, core_info_t *info
}
static void lakka_free(void *data)
{
rgui_handle_t *rgui = (rgui_handle_t*)data;
lakka_free_assets(rgui);
if (rgui->alloc_font)
free((uint8_t*)rgui->font);
}
@ -1246,7 +1243,6 @@ static void *lakka_init(void)
init_font(gl, g_settings.video.font_path, g_settings.video.font_size, gl->win_width, gl->win_height);
lakka_init_core_info(rgui);
lakka_init_assets(rgui);
if (categories)
{
@ -1358,8 +1354,8 @@ const menu_ctx_driver_t menu_ctx_lakka = {
lakka_frame,
lakka_init,
lakka_free,
lakka_init_assets,
lakka_free_assets,
lakka_context_reset,
lakka_context_destroy,
NULL,
NULL,
lakka_input_postprocess,

View File

@ -450,7 +450,7 @@ void rmenu_set_texture(void *data, bool enable)
}
}
static void rmenu_init_assets(void *data)
static void rmenu_context_reset(void *data)
{
rgui_handle_t *rgui = (rgui_handle_t*)data;
@ -476,19 +476,16 @@ static void *rmenu_init(void)
if (!rgui)
return NULL;
rmenu_init_assets(rgui);
return rgui;
}
static void rmenu_free_assets(void *data)
static void rmenu_context_destroy(void *data)
{
texture_image_free(driver.video_data, menu_texture);
}
static void rmenu_free(void *data)
{
rmenu_free_assets(data);
}
static int rmenu_input_postprocess(uint64_t old_state)
@ -524,8 +521,8 @@ const menu_ctx_driver_t menu_ctx_rmenu = {
NULL,
rmenu_init,
rmenu_free,
rmenu_init_assets,
rmenu_free_assets,
rmenu_context_reset,
rmenu_context_destroy,
NULL,
NULL,
rmenu_input_postprocess,

View File

@ -1963,6 +1963,10 @@ static void check_savestates(bool immutable)
void rarch_set_fullscreen(bool fullscreen)
{
#ifdef HAVE_MENU
driver.menu_data_own = true; // Don't reinit menu for something trivial.
#endif
g_settings.video.fullscreen = fullscreen;
driver.video_cache_context = g_extern.system.hw_render_callback.cache_context;
driver.video_cache_context_ack = false;
@ -1973,6 +1977,10 @@ void rarch_set_fullscreen(bool fullscreen)
// Poll input to avoid possibly stale data to corrupt things.
if (driver.input)
input_poll_func();
#ifdef HAVE_MENU
driver.menu_data_own = false;
#endif
}
bool rarch_check_fullscreen(void)