diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index e6adbf5004..0cc9ebe9bb 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -802,6 +802,53 @@ static int menu_displaylist_parse_all_settings(menu_displaylist_info_t *info) return 0; } +static int menu_displaylist_parse_shader_options(menu_displaylist_info_t *info) +{ + unsigned i; + struct video_shader *shader = NULL; + menu_handle_t *menu = menu_driver_get_ptr(); + + if (!menu) + return -1; + + shader = menu->shader; + + if (!shader) + return -1; + + menu_list_push(info->list, "Apply Shader Changes", "shader_apply_changes", + MENU_SETTING_ACTION, 0); + menu_list_push(info->list, "Load Shader Preset", "video_shader_preset", + MENU_FILE_PATH, 0); + menu_list_push(info->list, "Shader Preset Save As", + "video_shader_preset_save_as", MENU_SETTING_ACTION, 0); + menu_list_push(info->list, "Parameters (Current)", + "video_shader_parameters", MENU_SETTING_ACTION, 0); + menu_list_push(info->list, "Parameters (Menu)", + "video_shader_preset_parameters", MENU_SETTING_ACTION, 0); + menu_list_push(info->list, "Shader Passes", "video_shader_num_passes", + 0, 0); + + for (i = 0; i < shader->passes; i++) + { + char buf[64]; + + snprintf(buf, sizeof(buf), "Shader #%u", i); + menu_list_push(info->list, buf, "video_shader_pass", + MENU_SETTINGS_SHADER_PASS_0 + i, 0); + + snprintf(buf, sizeof(buf), "Shader #%u Filter", i); + menu_list_push(info->list, buf, "video_shader_filter_pass", + MENU_SETTINGS_SHADER_PASS_FILTER_0 + i, 0); + + snprintf(buf, sizeof(buf), "Shader #%u Scale", i); + menu_list_push(info->list, buf, "video_shader_scale_pass", + MENU_SETTINGS_SHADER_PASS_SCALE_0 + i, 0); + } + + return 0; +} + int menu_displaylist_push_list(menu_displaylist_info_t *info, unsigned type) { int ret = 0; @@ -855,6 +902,13 @@ int menu_displaylist_push_list(menu_displaylist_info_t *info, unsigned type) 0, 0); #endif + need_push = true; + break; + case DISPLAYLIST_OPTIONS_SHADERS: + menu_list_clear(info->list); + + ret = menu_displaylist_parse_shader_options(info); + need_push = true; break; case DISPLAYLIST_DEFAULT: diff --git a/menu/menu_displaylist.h b/menu/menu_displaylist.h index 9c4e9c8dfa..85f6d2d463 100644 --- a/menu/menu_displaylist.h +++ b/menu/menu_displaylist.h @@ -63,6 +63,7 @@ enum DISPLAYLIST_SHADER_PARAMETERS, DISPLAYLIST_SHADER_PARAMETERS_PRESET, DISPLAYLIST_OPTIONS_VIDEO, + DISPLAYLIST_OPTIONS_SHADERS, }; typedef struct menu_displaylist_info diff --git a/menu/menu_entries_cbs_deferred_push.c b/menu/menu_entries_cbs_deferred_push.c index f08b971995..48163a111d 100644 --- a/menu/menu_entries_cbs_deferred_push.c +++ b/menu/menu_entries_cbs_deferred_push.c @@ -1190,60 +1190,15 @@ static int deferred_push_video_options(void *data, void *userdata, static int deferred_push_shader_options(void *data, void *userdata, const char *path, const char *label, unsigned type) { - unsigned i; - struct video_shader *shader = NULL; - file_list_t *list = NULL; - file_list_t *menu_list = NULL; - menu_handle_t *menu = menu_driver_get_ptr(); + menu_displaylist_info_t info = {0}; - if (!menu) - return -1; + info.list = (file_list_t*)data; + info.menu_list = (file_list_t*)userdata; + info.type = type; + strlcpy(info.path, path, sizeof(info.path)); + strlcpy(info.label, label, sizeof(info.label)); - list = (file_list_t*)data; - menu_list = (file_list_t*)userdata; - - if (!list || !menu_list) - return -1; - - shader = menu->shader; - - if (!shader) - return -1; - - menu_list_clear(list); - menu_list_push(list, "Apply Shader Changes", "shader_apply_changes", - MENU_SETTING_ACTION, 0); - menu_list_push(list, "Load Shader Preset", "video_shader_preset", - MENU_FILE_PATH, 0); - menu_list_push(list, "Shader Preset Save As", - "video_shader_preset_save_as", MENU_SETTING_ACTION, 0); - menu_list_push(list, "Parameters (Current)", - "video_shader_parameters", MENU_SETTING_ACTION, 0); - menu_list_push(list, "Parameters (Menu)", - "video_shader_preset_parameters", MENU_SETTING_ACTION, 0); - menu_list_push(list, "Shader Passes", "video_shader_num_passes", - 0, 0); - - for (i = 0; i < shader->passes; i++) - { - char buf[64]; - - snprintf(buf, sizeof(buf), "Shader #%u", i); - menu_list_push(list, buf, "video_shader_pass", - MENU_SETTINGS_SHADER_PASS_0 + i, 0); - - snprintf(buf, sizeof(buf), "Shader #%u Filter", i); - menu_list_push(list, buf, "video_shader_filter_pass", - MENU_SETTINGS_SHADER_PASS_FILTER_0 + i, 0); - - snprintf(buf, sizeof(buf), "Shader #%u Scale", i); - menu_list_push(list, buf, "video_shader_scale_pass", - MENU_SETTINGS_SHADER_PASS_SCALE_0 + i, 0); - } - - menu_driver_populate_entries(path, label, type); - - return 0; + return menu_displaylist_push_list(&info, DISPLAYLIST_OPTIONS_SHADERS); } static int deferred_push_options(void *data, void *userdata,