diff --git a/driver.c b/driver.c index cc53311d1e..072d9cc2be 100644 --- a/driver.c +++ b/driver.c @@ -1197,18 +1197,8 @@ void init_video_input(void) } #ifdef HAVE_OVERLAY - if (driver.overlay) - { - input_overlay_free(driver.overlay); - driver.overlay = NULL; - } - - if (*g_settings.input.overlay) - { - driver.overlay = input_overlay_new(g_settings.input.overlay); - if (!driver.overlay) - RARCH_ERR("Failed to load overlay.\n"); - } + rarch_main_command(RARCH_CMD_OVERLAY_FREE); + rarch_main_command(RARCH_CMD_OVERLAY_INIT); #endif g_extern.measure_data.frame_time_samples_count = 0; @@ -1217,12 +1207,7 @@ void init_video_input(void) void uninit_video_input(void) { #ifdef HAVE_OVERLAY - if (driver.overlay) - { - input_overlay_free(driver.overlay); - driver.overlay = NULL; - memset(&driver.overlay_state, 0, sizeof(driver.overlay_state)); - } + rarch_main_command(RARCH_CMD_OVERLAY_FREE); #endif if (!driver.input_data_own && driver.input_data != driver.video_data && driver.input && driver.input->free) diff --git a/frontend/menu/backend/menu_common_backend.c b/frontend/menu/backend/menu_common_backend.c index 8e04da5d66..12e42eebf5 100644 --- a/frontend/menu/backend/menu_common_backend.c +++ b/frontend/menu/backend/menu_common_backend.c @@ -3704,9 +3704,7 @@ static int menu_common_setting_set(unsigned setting, unsigned action) menu_common_setting_push_current_menu(driver.menu->menu_stack, g_extern.overlay_dir, setting, driver.menu->selection_ptr, action); break; case MENU_ACTION_START: - if (driver.overlay) - input_overlay_free(driver.overlay); - driver.overlay = NULL; + rarch_main_command(RARCH_CMD_OVERLAY_FREE); *g_settings.input.overlay = '\0'; break; default: diff --git a/general.h b/general.h index 25b4394e61..2d6c599643 100644 --- a/general.h +++ b/general.h @@ -104,6 +104,8 @@ enum basic_event RARCH_CMD_AUTOSAVE, RARCH_CMD_AUDIO_STOP, RARCH_CMD_AUDIO_START, + RARCH_CMD_OVERLAY_INIT, + RARCH_CMD_OVERLAY_FREE, }; enum menu_enums diff --git a/retroarch.c b/retroarch.c index b6b85d364d..eeefe645c3 100644 --- a/retroarch.c +++ b/retroarch.c @@ -3211,6 +3211,24 @@ void rarch_main_command(unsigned action) g_extern.audio_active = false; } break; + case RARCH_CMD_OVERLAY_INIT: +#ifdef HAVE_OVERLAY + if (*g_settings.input.overlay && g_settings.input.overlay[0] != '\0') + { + driver.overlay = input_overlay_new(g_settings.input.overlay); + if (!driver.overlay) + RARCH_ERR("Failed to load overlay.\n"); + } +#endif + break; + case RARCH_CMD_OVERLAY_FREE: +#ifdef HAVE_OVERLAY + if (driver.overlay) + input_overlay_free(driver.overlay); + driver.overlay = NULL; + memset(&driver.overlay_state, 0, sizeof(driver.overlay_state)); +#endif + break; } } diff --git a/settings_data.c b/settings_data.c index 2bd6669b67..3c87c297e2 100644 --- a/settings_data.c +++ b/settings_data.c @@ -977,9 +977,11 @@ static void general_read_handler(const void *data) static void general_write_handler(const void *data) { - bool has_set_reinit = false; - bool has_set_rewind = false; - bool has_set_autosave = false; + bool has_set_reinit = false; + bool has_set_rewind = false; + bool has_set_autosave = false; + bool has_set_overlay_init = false; + bool has_set_overlay_free = false; const rarch_setting_t *setting = (const rarch_setting_t*)data; if (!setting) @@ -1144,11 +1146,8 @@ static void general_write_handler(const void *data) { strlcpy(g_settings.input.overlay, setting->value.string, sizeof(g_settings.input.overlay)); - if (driver.overlay) - input_overlay_free(driver.overlay); - - if (g_settings.input.overlay && g_settings.input.overlay[0] != '\0') - driver.overlay = input_overlay_new(g_settings.input.overlay); + has_set_overlay_free = false; + has_set_overlay_init = true; } else if (!strcmp(setting->name, "input_overlay_scale")) { @@ -1338,6 +1337,10 @@ static void general_write_handler(const void *data) rarch_main_command(RARCH_CMD_REWIND); if (has_set_autosave) rarch_main_command(RARCH_CMD_AUTOSAVE); + if (has_set_overlay_free) + rarch_main_command(RARCH_CMD_OVERLAY_FREE); + if (has_set_overlay_init) + rarch_main_command(RARCH_CMD_OVERLAY_INIT); } #define NEXT (list[index++])