diff --git a/frontend/menu/backend/menu_common_backend.c b/frontend/menu/backend/menu_common_backend.c index 9b11852e27..fc45396557 100644 --- a/frontend/menu/backend/menu_common_backend.c +++ b/frontend/menu/backend/menu_common_backend.c @@ -1051,33 +1051,7 @@ static int menu_setting_ok_toggle(unsigned type, } else if (!strcmp(label, "shader_apply_changes")) { - unsigned shader_type = RARCH_SHADER_NONE; - - if (driver.menu_ctx && driver.menu_ctx->backend && - driver.menu_ctx->backend->shader_manager_get_type) - shader_type = driver.menu_ctx->backend->shader_manager_get_type( - driver.menu->shader); - - if (driver.menu->shader->passes && shader_type != RARCH_SHADER_NONE - && driver.menu_ctx && driver.menu_ctx->backend && - driver.menu_ctx->backend->shader_manager_save_preset) - driver.menu_ctx->backend->shader_manager_save_preset(NULL, true); - else - { - shader_type = gfx_shader_parse_type("", DEFAULT_SHADER_TYPE); - if (shader_type == RARCH_SHADER_NONE) - { -#if defined(HAVE_GLSL) - shader_type = RARCH_SHADER_GLSL; -#elif defined(HAVE_CG) || defined(HAVE_HLSL) - shader_type = RARCH_SHADER_CG; -#endif - } - if (driver.menu_ctx && driver.menu_ctx->backend && - driver.menu_ctx->backend->shader_manager_set_preset) - driver.menu_ctx->backend->shader_manager_set_preset( - NULL, shader_type, NULL); - } + rarch_main_command(RARCH_CMD_SHADERS_APPLY_CHANGES); return 0; } #endif diff --git a/frontend/menu/backend/menu_common_shader_backend.c b/frontend/menu/backend/menu_common_shader_backend.c index fb06e170eb..fe147977a5 100644 --- a/frontend/menu/backend/menu_common_shader_backend.c +++ b/frontend/menu/backend/menu_common_shader_backend.c @@ -331,6 +331,7 @@ static int menu_common_shader_manager_setting_toggle( else if (id >= MENU_SETTINGS_SHADER_PARAMETER_0 && id <= MENU_SETTINGS_SHADER_PARAMETER_LAST) { + bool apply_changes = false; struct gfx_shader *shader = NULL; struct gfx_shader_parameter *param = NULL; @@ -344,14 +345,17 @@ static int menu_common_shader_manager_setting_toggle( { case MENU_ACTION_START: param->current = param->initial; + apply_changes = true; break; case MENU_ACTION_LEFT: param->current -= param->step; + apply_changes = true; break; case MENU_ACTION_RIGHT: param->current += param->step; + apply_changes = true; break; default: @@ -359,6 +363,9 @@ static int menu_common_shader_manager_setting_toggle( } param->current = min(max(param->minimum, param->current), param->maximum); + + if (apply_changes) + rarch_main_command(RARCH_CMD_SHADERS_APPLY_CHANGES); } else if ((!strcmp(label, "video_shader_parameters") || !strcmp(label, "video_shader_preset_parameters")) diff --git a/general.h b/general.h index 24e62ca050..3f5b57ab08 100644 --- a/general.h +++ b/general.h @@ -129,6 +129,7 @@ enum basic_event RARCH_CMD_QUIT_RETROARCH, RARCH_CMD_RESUME, RARCH_CMD_MENU_SAVE_CONFIG, + RARCH_CMD_SHADERS_APPLY_CHANGES, }; enum action_state diff --git a/retroarch.c b/retroarch.c index 997329b8a3..7ff93f0ccc 100644 --- a/retroarch.c +++ b/retroarch.c @@ -3535,9 +3535,9 @@ void rarch_main_command(unsigned cmd) break; case RARCH_CMD_OVERLAY_SET_ALPHA_MOD: #ifdef HAVE_OVERLAY - if (driver.overlay) - input_overlay_set_alpha_mod(driver.overlay, - g_settings.input.overlay_opacity); + if (driver.overlay) + input_overlay_set_alpha_mod(driver.overlay, + g_settings.input.overlay_opacity); #endif break; case RARCH_CMD_RESET_CONTEXT: @@ -3562,6 +3562,39 @@ void rarch_main_command(unsigned cmd) case RARCH_CMD_MENU_SAVE_CONFIG: #ifdef HAVE_MENU menu_save_new_config(); +#endif + break; + case RARCH_CMD_SHADERS_APPLY_CHANGES: +#ifdef HAVE_MENU + { + unsigned shader_type = RARCH_SHADER_NONE; + + if (driver.menu_ctx && driver.menu_ctx->backend && + driver.menu_ctx->backend->shader_manager_get_type) + shader_type = driver.menu_ctx->backend->shader_manager_get_type( + driver.menu->shader); + + if (driver.menu->shader->passes && shader_type != RARCH_SHADER_NONE + && driver.menu_ctx && driver.menu_ctx->backend && + driver.menu_ctx->backend->shader_manager_save_preset) + driver.menu_ctx->backend->shader_manager_save_preset(NULL, true); + else + { + shader_type = gfx_shader_parse_type("", DEFAULT_SHADER_TYPE); + if (shader_type == RARCH_SHADER_NONE) + { +#if defined(HAVE_GLSL) + shader_type = RARCH_SHADER_GLSL; +#elif defined(HAVE_CG) || defined(HAVE_HLSL) + shader_type = RARCH_SHADER_CG; +#endif + } + if (driver.menu_ctx && driver.menu_ctx->backend && + driver.menu_ctx->backend->shader_manager_set_preset) + driver.menu_ctx->backend->shader_manager_set_preset( + NULL, shader_type, NULL); + } + } #endif break; }