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.
This commit is contained in:
Themaister 2013-09-15 20:34:36 +02:00
parent 217ad4b04d
commit 17e2da87e1
5 changed files with 31 additions and 1 deletions

3
file.h
View File

@ -74,6 +74,9 @@ bool path_is_directory(const char *path);
bool path_file_exists(const char *path); bool path_file_exists(const char *path);
const char *path_get_extension(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. // Returns basename from path.
const char *path_basename(const char *path); const char *path_basename(const char *path);

View File

@ -185,6 +185,14 @@ const char *path_get_extension(const char *path)
return ""; 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_) static int qstrcmp_plain(const void *a_, const void *b_)
{ {
const struct string_list_elem *a = (const struct string_list_elem*)a_; const struct string_list_elem *a = (const struct string_list_elem*)a_;

View File

@ -40,6 +40,23 @@ void shader_manager_init(rgui_handle_t *rgui)
{ {
memset(&rgui->shader, 0, sizeof(rgui->shader)); memset(&rgui->shader, 0, sizeof(rgui->shader));
config_file_t *conf = NULL; 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]; char cgp_path[PATH_MAX];
const char *ext = path_get_extension(g_settings.video.shader_path); const char *ext = path_get_extension(g_settings.video.shader_path);

View File

@ -242,6 +242,8 @@ typedef struct
bool msg_force; bool msg_force;
char base_path[PATH_MAX]; char base_path[PATH_MAX];
char default_glslp[PATH_MAX];
char default_cgp[PATH_MAX];
const uint8_t *font; const uint8_t *font;
bool alloc_font; bool alloc_font;

View File

@ -1692,7 +1692,7 @@ static int shader_manager_toggle_setting(rgui_handle_t *rgui, unsigned setting,
if (rgui->shader.passes && type != RARCH_SHADER_NONE) 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]; char cgp_path[PATH_MAX];
const char *shader_dir = *g_settings.video.shader_dir ? const char *shader_dir = *g_settings.video.shader_dir ?