From 17e2da87e15ca46a9e1ced62abde2808d1b76911 Mon Sep 17 00:00:00 2001 From: Themaister Date: Sun, 15 Sep 2013 20:34:36 +0200 Subject: [PATCH] Don't hardcode rgui.cgp/glslp as default. In a multi-config environment, shader manager could conflict. Instead, infer the default RGUI shader cgps/glslps from config path. Fallback to old rgui.cgp/rgui.glslp if we use a default config. --- file.h | 3 +++ file_path.c | 8 ++++++++ frontend/menu/menu_common.c | 17 +++++++++++++++++ frontend/menu/menu_common.h | 2 ++ frontend/menu/rgui.c | 2 +- 5 files changed, 31 insertions(+), 1 deletion(-) diff --git a/file.h b/file.h index 78e6e7b2fa..115b909f75 100644 --- a/file.h +++ b/file.h @@ -74,6 +74,9 @@ bool path_is_directory(const char *path); bool path_file_exists(const char *path); const char *path_get_extension(const char *path); +// Removes all text after and including the last '.' +char *path_remove_extension(char *path); + // Returns basename from path. const char *path_basename(const char *path); diff --git a/file_path.c b/file_path.c index be0aa82ec2..b13921e34c 100644 --- a/file_path.c +++ b/file_path.c @@ -185,6 +185,14 @@ const char *path_get_extension(const char *path) return ""; } +char *path_remove_extension(char *path) +{ + char *last = strrchr(path, '.'); + if (*last) + *last = '\0'; + return last; +} + static int qstrcmp_plain(const void *a_, const void *b_) { const struct string_list_elem *a = (const struct string_list_elem*)a_; diff --git a/frontend/menu/menu_common.c b/frontend/menu/menu_common.c index 35824389ab..253b852397 100644 --- a/frontend/menu/menu_common.c +++ b/frontend/menu/menu_common.c @@ -40,6 +40,23 @@ void shader_manager_init(rgui_handle_t *rgui) { memset(&rgui->shader, 0, sizeof(rgui->shader)); config_file_t *conf = NULL; + + // In a multi-config setting, we can't have conflicts on rgui.cgp/rgui.glslp. + if (*g_extern.config_path) + { + fill_pathname_base(rgui->default_glslp, g_extern.config_path, sizeof(rgui->default_glslp)); + path_remove_extension(rgui->default_glslp); + strlcat(rgui->default_glslp, ".glslp", sizeof(rgui->default_glslp)); + fill_pathname_base(rgui->default_cgp, g_extern.config_path, sizeof(rgui->default_cgp)); + path_remove_extension(rgui->default_cgp); + strlcat(rgui->default_cgp, ".cgp", sizeof(rgui->default_cgp)); + } + else + { + strlcpy(rgui->default_glslp, "rgui.glslp", sizeof(rgui->default_glslp)); + strlcpy(rgui->default_cgp, "rgui.cgp", sizeof(rgui->default_cgp)); + } + char cgp_path[PATH_MAX]; const char *ext = path_get_extension(g_settings.video.shader_path); diff --git a/frontend/menu/menu_common.h b/frontend/menu/menu_common.h index f544db9982..d5326c6dcc 100644 --- a/frontend/menu/menu_common.h +++ b/frontend/menu/menu_common.h @@ -242,6 +242,8 @@ typedef struct bool msg_force; char base_path[PATH_MAX]; + char default_glslp[PATH_MAX]; + char default_cgp[PATH_MAX]; const uint8_t *font; bool alloc_font; diff --git a/frontend/menu/rgui.c b/frontend/menu/rgui.c index b43c76a662..f2a6c79cc8 100644 --- a/frontend/menu/rgui.c +++ b/frontend/menu/rgui.c @@ -1692,7 +1692,7 @@ static int shader_manager_toggle_setting(rgui_handle_t *rgui, unsigned setting, if (rgui->shader.passes && type != RARCH_SHADER_NONE) { - const char *conf_path = type == RARCH_SHADER_GLSL ? "rgui.glslp" : "rgui.cgp"; + const char *conf_path = type == RARCH_SHADER_GLSL ? rgui->default_glslp : rgui->default_cgp; char cgp_path[PATH_MAX]; const char *shader_dir = *g_settings.video.shader_dir ?