From 8cb66dd02115abbb2b84d52c763d3ed5d9d36c6d Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sun, 24 Apr 2016 22:03:39 +0200 Subject: [PATCH] Add way to switch back and forth between shader pipeline --- config.def.h | 2 +- configuration.c | 4 ++-- configuration.h | 2 +- gfx/drivers_shader/shader_gl_cg.c | 8 +++++++ gfx/drivers_shader/shader_glsl.c | 9 ++++++++ gfx/video_shader_driver.h | 1 + gfx/video_shader_parse.h | 2 +- menu/cbs/menu_cbs_get_value.c | 35 +++++++++++++++++++++++++++++++ menu/drivers/xmb.c | 2 +- menu/menu_display.c | 5 ++++- menu/menu_setting.c | 5 ++--- 11 files changed, 65 insertions(+), 10 deletions(-) diff --git a/config.def.h b/config.def.h index 12c146ddae..f71e7f8f51 100644 --- a/config.def.h +++ b/config.def.h @@ -513,7 +513,7 @@ static unsigned xmb_alpha_factor = 75; static unsigned xmb_theme = 0; static unsigned xmb_gradient = 0; static bool xmb_shadows_enable = false; -static bool xmb_ribbon_enable = false; +static unsigned xmb_ribbon_enable = 0; static bool show_advanced_settings = true; static const uint32_t menu_entry_normal_color = 0xffffffff; diff --git a/configuration.c b/configuration.c index c74a0757aa..c93025e959 100644 --- a/configuration.c +++ b/configuration.c @@ -1548,7 +1548,7 @@ static bool config_load_file(const char *path, bool set_defaults) CONFIG_GET_INT_BASE(conf, settings, menu.xmb_theme, "xmb_theme"); CONFIG_GET_INT_BASE(conf, settings, menu.xmb_gradient, "xmb_gradient"); CONFIG_GET_BOOL_BASE(conf, settings, menu.xmb_shadows_enable, "xmb_shadows_enable"); - CONFIG_GET_BOOL_BASE(conf, settings, menu.xmb_ribbon_enable, "xmb_ribbon_enable"); + CONFIG_GET_INT_BASE(conf, settings, menu.xmb_ribbon_enable, "xmb_ribbon_enable"); config_get_path(conf, "xmb_font", settings->menu.xmb_font, sizeof(settings->menu.xmb_font)); #endif config_get_array(conf, "video_context_driver", settings->video.context_driver, sizeof(settings->video.context_driver)); @@ -2782,7 +2782,7 @@ bool config_save_file(const char *path) config_set_int(conf, "xmb_theme", settings->menu.xmb_theme); config_set_int(conf, "xmb_gradient", settings->menu.xmb_gradient); config_set_bool(conf, "xmb_shadows_enable", settings->menu.xmb_shadows_enable); - config_set_bool(conf, "xmb_ribbon_enable", settings->menu.xmb_ribbon_enable); + config_set_int(conf, "xmb_ribbon_enable", settings->menu.xmb_ribbon_enable); config_set_path(conf, "xmb_font", !string_is_empty(settings->menu.xmb_font) ? settings->menu.xmb_font : ""); config_set_path(conf, "rgui_browser_directory", diff --git a/configuration.h b/configuration.h index 085f0ace45..7bae6e4432 100644 --- a/configuration.h +++ b/configuration.h @@ -169,7 +169,7 @@ typedef struct settings unsigned xmb_theme; unsigned xmb_gradient; bool xmb_shadows_enable; - bool xmb_ribbon_enable; + unsigned xmb_ribbon_enable; char xmb_font[PATH_MAX_LENGTH]; bool throttle_framerate; bool linear_filter; diff --git a/gfx/drivers_shader/shader_gl_cg.c b/gfx/drivers_shader/shader_gl_cg.c index 4ccc1d4752..7bb11dd37e 100644 --- a/gfx/drivers_shader/shader_gl_cg.c +++ b/gfx/drivers_shader/shader_gl_cg.c @@ -1169,6 +1169,14 @@ static void *gl_cg_init(void *data, const char *path) &cg_data->prg[VIDEO_SHADER_MENU], &shader_prog_info); + shader_prog_info.combined = stock_xmb_simple; + + gl_cg_compile_program( + cg_data, + VIDEO_SHADER_MENU_SEC, + &cg_data->prg[VIDEO_SHADER_MENU_SEC], + &shader_prog_info); + return cg_data; error: diff --git a/gfx/drivers_shader/shader_glsl.c b/gfx/drivers_shader/shader_glsl.c index be5861ab73..57c7bd46d5 100644 --- a/gfx/drivers_shader/shader_glsl.c +++ b/gfx/drivers_shader/shader_glsl.c @@ -912,6 +912,15 @@ static void *gl_glsl_init(void *data, const char *path) &glsl->prg[VIDEO_SHADER_MENU], &shader_prog_info); + shader_prog_info.vertex = stock_vertex_xmb_simple; + shader_prog_info.fragment = stock_fragment_xmb_simple; + + gl_glsl_compile_program( + glsl, + VIDEO_SHADER_MENU_SEC, + &glsl->prg[VIDEO_SHADER_MENU_SEC], + &shader_prog_info); + gl_glsl_reset_attrib(glsl); for (i = 0; i < GFX_MAX_SHADERS; i++) diff --git a/gfx/video_shader_driver.h b/gfx/video_shader_driver.h index 4afc1b58e3..ad8ad4b6dc 100644 --- a/gfx/video_shader_driver.h +++ b/gfx/video_shader_driver.h @@ -35,6 +35,7 @@ #define VIDEO_SHADER_STOCK_BLEND (GFX_MAX_SHADERS - 1) #define VIDEO_SHADER_MENU (GFX_MAX_SHADERS - 2) +#define VIDEO_SHADER_MENU_SEC (GFX_MAX_SHADERS - 3) #endif diff --git a/gfx/video_shader_parse.h b/gfx/video_shader_parse.h index 110adbd77d..646303b87f 100644 --- a/gfx/video_shader_parse.h +++ b/gfx/video_shader_parse.h @@ -27,7 +27,7 @@ extern "C" { #endif #ifndef GFX_MAX_SHADERS -#define GFX_MAX_SHADERS 25 +#define GFX_MAX_SHADERS 26 #endif #ifndef GFX_MAX_TEXTURES diff --git a/menu/cbs/menu_cbs_get_value.c b/menu/cbs/menu_cbs_get_value.c index dd42eeb6a9..b7b2454a20 100644 --- a/menu/cbs/menu_cbs_get_value.c +++ b/menu/cbs/menu_cbs_get_value.c @@ -166,6 +166,37 @@ static void menu_action_setting_disp_set_label_filter( settings->video.softfilter_plugin, len); } +static void menu_action_setting_disp_set_label_pipeline( + file_list_t* list, + unsigned *w, unsigned type, unsigned i, + const char *label, + char *s, size_t len, + const char *entry_label, + const char *path, + char *s2, size_t len2) +{ + settings_t *settings = config_get_ptr(); + + *s = '\0'; + *w = 19; + + switch (settings->menu.xmb_ribbon_enable) + { + case 0: + snprintf(s, len, "%s", "Off"); + break; + case 1: + snprintf(s, len, "%s", "Ribbon (simplified)"); + break; + case 2: + snprintf(s, len, "%s", "Ribbon"); + break; + } + + strlcpy(s2, path, len2); + +} + static void menu_action_setting_disp_set_label_shader_num_passes( file_list_t* list, unsigned *w, unsigned type, unsigned i, @@ -1286,6 +1317,10 @@ static int menu_cbs_init_bind_get_string_representation_compare_label( BIND_ACTION_GET_VALUE(cbs, menu_action_setting_disp_set_label_shader_num_passes); break; + case MENU_LABEL_XMB_RIBBON_ENABLE: + BIND_ACTION_GET_VALUE(cbs, + menu_action_setting_disp_set_label_pipeline); + break; case MENU_LABEL_VIDEO_SHADER_PASS: BIND_ACTION_GET_VALUE(cbs, menu_action_setting_disp_set_label_shader_pass); diff --git a/menu/drivers/xmb.c b/menu/drivers/xmb.c index a9cf93f9a1..f0ee39496e 100644 --- a/menu/drivers/xmb.c +++ b/menu/drivers/xmb.c @@ -1902,7 +1902,7 @@ static void xmb_draw_bg( menu_display_ctl(MENU_DISPLAY_CTL_BLEND_BEGIN, NULL); menu_display_ctl(MENU_DISPLAY_CTL_SET_VIEWPORT, NULL); - if (settings->menu.xmb_ribbon_enable) + if (settings->menu.xmb_ribbon_enable > 0) { draw.color = xmb_gradient_ident(); diff --git a/menu/menu_display.c b/menu/menu_display.c index 683965a54a..4eb7b10171 100644 --- a/menu/menu_display.c +++ b/menu/menu_display.c @@ -547,9 +547,12 @@ bool menu_display_ctl(enum menu_display_ctl_state state, void *data) #if defined(HAVE_GLSL) || defined(HAVE_CG) || defined(HAVE_HLSL) shader_info.data = NULL; - shader_info.idx = VIDEO_SHADER_MENU; + shader_info.idx = VIDEO_SHADER_MENU_SEC; shader_info.set_active = true; + if (settings->menu.xmb_ribbon_enable == 2) + shader_info.idx = VIDEO_SHADER_MENU; + video_shader_driver_ctl(SHADER_CTL_USE, &shader_info); t += 0.01; diff --git a/menu/menu_setting.c b/menu/menu_setting.c index dd20b376cc..66611385fd 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -5889,19 +5889,18 @@ static bool setting_append_list( general_write_handler, general_read_handler); - CONFIG_BOOL( + CONFIG_UINT( list, list_info, &settings->menu.xmb_ribbon_enable, menu_hash_to_str(MENU_LABEL_XMB_RIBBON_ENABLE), menu_hash_to_str(MENU_LABEL_VALUE_XMB_RIBBON_ENABLE), xmb_ribbon_enable, - menu_hash_to_str(MENU_VALUE_OFF), - menu_hash_to_str(MENU_VALUE_ON), &group_info, &subgroup_info, parent_group, general_write_handler, general_read_handler); + menu_settings_list_current_add_range(list, list_info, 0, 2, 1, true, true); CONFIG_UINT( list, list_info,