From 2c15e652f9e4b8b2398d113383cdeb69bda87833 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Wed, 15 Oct 2014 02:34:43 +0200 Subject: [PATCH] Move more shader setting code to menu_entries_cbs.c --- frontend/menu/menu_entries_cbs.c | 209 ++++++++++++++++++++++++++++++- frontend/menu/menu_shader.c | 190 ---------------------------- frontend/menu/menu_shader.h | 3 - 3 files changed, 204 insertions(+), 198 deletions(-) diff --git a/frontend/menu/menu_entries_cbs.c b/frontend/menu/menu_entries_cbs.c index 2c220431e0..a1b0bc771d 100644 --- a/frontend/menu/menu_entries_cbs.c +++ b/frontend/menu/menu_entries_cbs.c @@ -661,6 +661,193 @@ static int shader_action_parameter_toggle(unsigned type, const char *label, return 0; } +#ifdef HAVE_SHADER_MANAGER +extern size_t hack_shader_pass; +#endif + +static int action_toggle_shader_pass(unsigned type, const char *label, + unsigned action) +{ +#ifdef HAVE_SHADER_MANAGER + hack_shader_pass = type - MENU_SETTINGS_SHADER_PASS_0; + struct gfx_shader *shader = (struct gfx_shader*)driver.menu->shader; + struct gfx_shader_pass *shader_pass = NULL; + + if (shader) + shader_pass = (struct gfx_shader_pass*)&shader->pass[hack_shader_pass]; + + switch (action) + { + case MENU_ACTION_OK: + menu_entries_push(driver.menu->menu_stack, + g_settings.video.shader_dir, + "video_shader_pass", + type, + driver.menu->selection_ptr); + break; + case MENU_ACTION_START: + if (shader_pass) + *shader_pass->source.path = '\0'; + break; + } +#endif + return 0; +} + +static int action_toggle_shader_preset(unsigned type, const char *label, + unsigned action) +{ +#ifdef HAVE_SHADER_MANAGER + switch (action) + { + case MENU_ACTION_OK: + menu_entries_push(driver.menu->menu_stack, + g_settings.video.shader_dir, + "video_shader_preset", + type, + driver.menu->selection_ptr); + break; + } +#endif + return 0; +} + +static int action_toggle_shader_scale_pass(unsigned type, const char *label, + unsigned action) +{ +#ifdef HAVE_SHADER_MANAGER + unsigned pass = type - MENU_SETTINGS_SHADER_PASS_SCALE_0; + struct gfx_shader *shader = (struct gfx_shader*)driver.menu->shader; + struct gfx_shader_pass *shader_pass = (struct gfx_shader_pass*) + &shader->pass[pass]; + + switch (action) + { + case MENU_ACTION_START: + if (shader) + { + shader_pass->fbo.scale_x = shader_pass->fbo.scale_y = 0; + shader_pass->fbo.valid = false; + } + break; + + case MENU_ACTION_LEFT: + case MENU_ACTION_RIGHT: + case MENU_ACTION_OK: + { + unsigned current_scale = shader_pass->fbo.scale_x; + unsigned delta = action == MENU_ACTION_LEFT ? 5 : 1; + current_scale = (current_scale + delta) % 6; + + if (shader_pass) + { + shader_pass->fbo.valid = current_scale; + shader_pass->fbo.scale_x = shader_pass->fbo.scale_y = current_scale; + } + } + break; + } +#endif + return 0; +} + +static int action_toggle_shader_filter_pass(unsigned type, const char *label, + unsigned action) +{ +#ifdef HAVE_SHADER_MANAGER + unsigned pass = type - MENU_SETTINGS_SHADER_PASS_FILTER_0; + struct gfx_shader *shader = (struct gfx_shader*)driver.menu->shader; + struct gfx_shader_pass *shader_pass = (struct gfx_shader_pass*) + &shader->pass[pass]; + + switch (action) + { + case MENU_ACTION_START: + if (shader) + shader->pass[pass].filter = RARCH_FILTER_UNSPEC; + break; + + case MENU_ACTION_LEFT: + case MENU_ACTION_RIGHT: + case MENU_ACTION_OK: + { + unsigned delta = (action == MENU_ACTION_LEFT) ? 2 : 1; + if (shader_pass) + shader_pass->filter = ((shader_pass->filter + delta) % 3); + } + break; + } +#endif + return 0; +} + +static int action_toggle_shader_filter_default(unsigned type, const char *label, + unsigned action) +{ +#ifdef HAVE_SHADER_MANAGER + rarch_setting_t *current_setting = NULL; + if ((current_setting = setting_data_find_setting( + driver.menu->list_settings, "video_smooth"))) + menu_action_setting_boolean(current_setting, action); +#endif + return 0; +} + +static int action_toggle_shader_num_passes(unsigned type, const char *label, + unsigned action) +{ +#ifdef HAVE_SHADER_MANAGER + struct gfx_shader *shader = (struct gfx_shader*)driver.menu->shader; + + if (!shader) + return -1; + + switch (action) + { + case MENU_ACTION_START: + if (shader && shader->passes) + shader->passes = 0; + driver.menu->need_refresh = true; + break; + + case MENU_ACTION_LEFT: + if (shader && shader->passes) + shader->passes--; + driver.menu->need_refresh = true; + break; + + case MENU_ACTION_RIGHT: + case MENU_ACTION_OK: + if (shader && (shader->passes < GFX_MAX_SHADERS)) + shader->passes++; + driver.menu->need_refresh = true; + break; + } + + if (driver.menu->need_refresh) + gfx_shader_resolve_parameters(NULL, driver.menu->shader); + +#endif + return 0; +} + +static int action_toggle_shader_parameters(unsigned type, const char *label, + unsigned action) +{ +#ifdef HAVE_SHADER_MANAGER + switch (action) + { + case MENU_ACTION_OK: + menu_entries_push(driver.menu->menu_stack, "", + "video_shader_parameters", + MENU_FILE_SWITCH, driver.menu->selection_ptr); + break; + } +#endif + + return 0; +} + static int performance_counters_frontend_toggle(unsigned type, const char *label, unsigned action) { @@ -948,11 +1135,23 @@ static void menu_entries_cbs_init_bind_toggle(menu_file_list_cbs_t *cbs, if (type >= MENU_SETTINGS_SHADER_PARAMETER_0 && type <= MENU_SETTINGS_SHADER_PARAMETER_LAST) cbs->action_toggle = shader_action_parameter_toggle; - else if ((menu_common_type_is(label, type) == MENU_SETTINGS_SHADER_OPTIONS) || - !strcmp(label, "video_shader_parameters") || - !strcmp(label, "video_shader_preset_parameters") - ) - cbs->action_toggle = menu_shader_manager_setting_toggle; + else if (!strcmp(label, "video_shader_pass")) + cbs->action_toggle = action_toggle_shader_pass; + else if (!strcmp(label, "video_shader_preset")) + cbs->action_toggle = action_toggle_shader_preset; + else if (!strcmp(label, "video_shader_scale_pass")) + cbs->action_toggle = action_toggle_shader_scale_pass; + else if (!strcmp(label, "video_shader_filter_pass")) + cbs->action_toggle = action_toggle_shader_filter_pass; + else if (!strcmp(label, "video_shader_default_filter")) + cbs->action_toggle = action_toggle_shader_filter_default; + else if (!strcmp(label, "video_shader_num_passes")) + cbs->action_toggle = action_toggle_shader_num_passes; + else if ((!strcmp(label, "video_shader_parameters") || + !strcmp(label, "video_shader_preset_parameters"))) + cbs->action_toggle = action_toggle_shader_parameters; + else if (!strcmp(label, "shader_apply_changes")) + cbs->action_toggle = menu_action_setting_set; else if ((type >= MENU_SETTINGS_CORE_OPTION_START)) cbs->action_toggle = core_setting_toggle; else if (type >= MENU_SETTINGS_PERF_COUNTERS_BEGIN && diff --git a/frontend/menu/menu_shader.c b/frontend/menu/menu_shader.c index 05146658eb..0c239088bb 100644 --- a/frontend/menu/menu_shader.c +++ b/frontend/menu/menu_shader.c @@ -22,8 +22,6 @@ #ifdef HAVE_SHADER_MANAGER -extern size_t hack_shader_pass; - void menu_shader_manager_init(void *data) { char cgp_path[PATH_MAX]; @@ -312,188 +310,6 @@ unsigned menu_shader_manager_get_type(const struct gfx_shader *shader) return type; } -static int handle_shader_pass_setting(struct gfx_shader *shader, - unsigned action) -{ - switch (action) - { - case MENU_ACTION_START: - if (shader && shader->passes) - shader->passes = 0; - driver.menu->need_refresh = true; - break; - - case MENU_ACTION_LEFT: - if (shader && shader->passes) - shader->passes--; - driver.menu->need_refresh = true; - break; - - case MENU_ACTION_RIGHT: - case MENU_ACTION_OK: - if (shader && (shader->passes < GFX_MAX_SHADERS)) - shader->passes++; - driver.menu->need_refresh = true; - break; - - default: - break; - } - - if (driver.menu->need_refresh) - gfx_shader_resolve_parameters(NULL, driver.menu->shader); - - return 0; -} - -int menu_shader_manager_setting_toggle( - unsigned type, const char *label, unsigned action) -{ - if (!driver.menu) - { - RARCH_ERR("Menu handle is not initialized.\n"); - return 0; - } - -#if 0 - RARCH_LOG("shader label: %s\n", label); -#endif - - if (!strcmp(label, "video_shader_default_filter")) - { - rarch_setting_t *current_setting = NULL; - if ((current_setting = setting_data_find_setting( - driver.menu->list_settings, "video_smooth"))) - menu_action_setting_boolean(current_setting, action); - } - else if ((!strcmp(label, "video_shader_parameters") || - !strcmp(label, "video_shader_preset_parameters")) - && action == MENU_ACTION_OK) - menu_entries_push(driver.menu->menu_stack, "", - "video_shader_parameters", MENU_FILE_SWITCH, driver.menu->selection_ptr); - else if (!strcmp(label, "shader_apply_changes") || - !strcmp(label, "video_shader_num_passes")) - { - if (!strcmp(label, "video_shader_num_passes")) - return handle_shader_pass_setting(driver.menu->shader, action); - menu_action_setting_set(type, label, action); - } - else if (!strcmp(label, "video_shader_preset")) - { - switch (action) - { - case MENU_ACTION_OK: - menu_entries_push(driver.menu->menu_stack, - g_settings.video.shader_dir, - "video_shader_preset", - type, - driver.menu->selection_ptr); - break; - - case MENU_ACTION_START: - break; - - default: - break; - } - } - else if (!strcmp(label, "video_shader_pass")) - { - hack_shader_pass = type - MENU_SETTINGS_SHADER_PASS_0; - struct gfx_shader *shader = (struct gfx_shader*)driver.menu->shader; - struct gfx_shader_pass *shader_pass = NULL; - - if (shader) - shader_pass = (struct gfx_shader_pass*)&shader->pass[hack_shader_pass]; - - switch (action) - { - case MENU_ACTION_OK: - menu_entries_push(driver.menu->menu_stack, - g_settings.video.shader_dir, - "video_shader_pass", - type, - driver.menu->selection_ptr); - break; - case MENU_ACTION_START: - if (shader_pass) - *shader_pass->source.path = '\0'; - break; - - default: - break; - } - } - else if (!strcmp(label, "video_shader_filter_pass")) - { - unsigned pass = type - MENU_SETTINGS_SHADER_PASS_FILTER_0; - struct gfx_shader *shader = (struct gfx_shader*)driver.menu->shader; - struct gfx_shader_pass *shader_pass = (struct gfx_shader_pass*) - &shader->pass[pass]; - - switch (action) - { - case MENU_ACTION_START: - if (shader) - shader->pass[pass].filter = RARCH_FILTER_UNSPEC; - break; - - case MENU_ACTION_LEFT: - case MENU_ACTION_RIGHT: - case MENU_ACTION_OK: - { - unsigned delta = (action == MENU_ACTION_LEFT) ? 2 : 1; - if (shader_pass) - shader_pass->filter = ((shader_pass->filter + delta) % 3); - break; - } - - default: - break; - } - } - else if (!strcmp(label, "video_shader_scale_pass")) - { - unsigned pass = type - MENU_SETTINGS_SHADER_PASS_SCALE_0; - struct gfx_shader *shader = (struct gfx_shader*)driver.menu->shader; - struct gfx_shader_pass *shader_pass = (struct gfx_shader_pass*) - &shader->pass[pass]; - - switch (action) - { - case MENU_ACTION_START: - if (shader) - { - shader_pass->fbo.scale_x = shader_pass->fbo.scale_y = 0; - shader_pass->fbo.valid = false; - } - break; - - case MENU_ACTION_LEFT: - case MENU_ACTION_RIGHT: - case MENU_ACTION_OK: - { - unsigned current_scale = shader_pass->fbo.scale_x; - unsigned delta = action == MENU_ACTION_LEFT ? 5 : 1; - current_scale = (current_scale + delta) % 6; - - if (shader_pass) - { - shader_pass->fbo.valid = current_scale; - shader_pass->fbo.scale_x = shader_pass->fbo.scale_y = current_scale; - } - break; - } - - default: - break; - } - } - - return 0; -} - - void menu_shader_manager_apply_changes(void) { unsigned shader_type = menu_shader_manager_get_type(driver.menu->shader); @@ -527,12 +343,6 @@ void menu_shader_manager_init(void *data) {} void menu_shader_manager_set_preset(struct gfx_shader *shader, unsigned type, const char *cgp_path) { } -int menu_shader_manager_setting_toggle( - unsigned id, const char *label, unsigned action) -{ - return 0; -} - void menu_shader_manager_save_preset( const char *basename, bool apply) { } diff --git a/frontend/menu/menu_shader.h b/frontend/menu/menu_shader.h index 502b036c29..bdd7fb5c71 100644 --- a/frontend/menu/menu_shader.h +++ b/frontend/menu/menu_shader.h @@ -32,9 +32,6 @@ void menu_shader_manager_init(void *data); void menu_shader_manager_set_preset(struct gfx_shader *shader, unsigned type, const char *cgp_path); -int menu_shader_manager_setting_toggle( - unsigned id, const char *label, unsigned action); - void menu_shader_manager_save_preset( const char *basename, bool apply);