mirror of
https://github.com/libretro/RetroArch
synced 2025-02-20 15:40:44 +00:00
Fix shader preset save.
Have to take into consideration the preset type.
This commit is contained in:
parent
d111a0c658
commit
4ae4d40364
frontend/menu
@ -414,6 +414,7 @@ void shader_manager_get_str(struct gfx_shader *shader,
|
||||
char *type_str, size_t type_str_size, unsigned type);
|
||||
void shader_manager_set_preset(struct gfx_shader *shader,
|
||||
enum rarch_shader_type type, const char *path);
|
||||
void shader_manager_save_preset(void *data, const char *basename, bool apply);
|
||||
#endif
|
||||
|
||||
void menu_ticker_line(char *buf, size_t len, unsigned tick, const char *str, bool selected);
|
||||
|
@ -93,26 +93,15 @@ void rsound_ipaddress_callback(void *userdata, const char *str)
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_SHADER_MANAGER
|
||||
void preset_filename_callback(void *userdata, const char *str)
|
||||
{
|
||||
rgui_handle_t *rgui = (rgui_handle_t*)userdata;
|
||||
|
||||
if (str && *str)
|
||||
{
|
||||
char filepath[PATH_MAX];
|
||||
|
||||
fill_pathname_join(filepath, g_settings.video.shader_dir, str, sizeof(filepath));
|
||||
strlcat(filepath, ".cgp", sizeof(filepath));
|
||||
config_file_t *conf = config_file_new(NULL);
|
||||
if (conf)
|
||||
{
|
||||
gfx_shader_write_conf_cgp(conf, &rgui->shader);
|
||||
config_file_write(conf, filepath);
|
||||
config_file_free(conf);
|
||||
}
|
||||
}
|
||||
shader_manager_save_preset(rgui, str && *str ? str : NULL, false);
|
||||
menu_key_end_line(rgui);
|
||||
}
|
||||
#endif
|
||||
|
||||
void menu_key_event(bool down, unsigned keycode, uint32_t character, uint16_t mod)
|
||||
{
|
||||
|
@ -171,6 +171,74 @@ static enum rarch_shader_type shader_manager_get_type(const struct gfx_shader *s
|
||||
return type;
|
||||
}
|
||||
|
||||
void shader_manager_save_preset(void *data, const char *basename, bool apply)
|
||||
{
|
||||
rgui_handle_t *rgui = (rgui_handle_t*)data;
|
||||
enum rarch_shader_type type = shader_manager_get_type(&rgui->shader);
|
||||
if (type == RARCH_SHADER_NONE)
|
||||
return;
|
||||
|
||||
const char *conf_path = NULL;
|
||||
char buffer[PATH_MAX];
|
||||
if (basename)
|
||||
{
|
||||
strlcpy(buffer, basename, sizeof(buffer));
|
||||
// Append extension automatically as appropriate.
|
||||
if (!strstr(basename, ".cgp") && !strstr(basename, ".glslp"))
|
||||
{
|
||||
if (type == RARCH_SHADER_GLSL)
|
||||
strlcat(buffer, ".glslp", sizeof(buffer));
|
||||
else if (type == RARCH_SHADER_CG)
|
||||
strlcat(buffer, ".cgp", sizeof(buffer));
|
||||
}
|
||||
conf_path = buffer;
|
||||
}
|
||||
else
|
||||
conf_path = type == RARCH_SHADER_GLSL ? rgui->default_glslp : rgui->default_cgp;
|
||||
|
||||
char config_directory[PATH_MAX];
|
||||
if (*g_extern.config_path)
|
||||
fill_pathname_basedir(config_directory, g_extern.config_path, sizeof(config_directory));
|
||||
else
|
||||
*config_directory = '\0';
|
||||
|
||||
char cgp_path[PATH_MAX];
|
||||
const char *dirs[] = {
|
||||
g_settings.video.shader_dir,
|
||||
g_settings.rgui_config_directory,
|
||||
config_directory,
|
||||
};
|
||||
|
||||
config_file_t *conf = config_file_new(NULL);
|
||||
if (!conf)
|
||||
return;
|
||||
gfx_shader_write_conf_cgp(conf, &rgui->shader);
|
||||
|
||||
bool ret = false;
|
||||
unsigned d;
|
||||
for (d = 0; d < ARRAY_SIZE(dirs); d++)
|
||||
{
|
||||
if (!*dirs[d])
|
||||
continue;
|
||||
|
||||
fill_pathname_join(cgp_path, dirs[d], conf_path, sizeof(cgp_path));
|
||||
if (config_file_write(conf, cgp_path))
|
||||
{
|
||||
RARCH_LOG("Saved shader preset to %s.\n", cgp_path);
|
||||
if (apply)
|
||||
shader_manager_set_preset(NULL, type, cgp_path);
|
||||
ret = true;
|
||||
break;
|
||||
}
|
||||
else
|
||||
RARCH_LOG("Failed writing shader preset to %s.\n", cgp_path);
|
||||
}
|
||||
|
||||
config_file_free(conf);
|
||||
if (!ret)
|
||||
RARCH_ERR("Failed to save shader preset. Make sure config directory and/or shader dir are writable.\n");
|
||||
}
|
||||
|
||||
static int shader_manager_toggle_setting(void *data, unsigned setting, unsigned action)
|
||||
{
|
||||
unsigned dist_shader, dist_filter, dist_scale;
|
||||
@ -1585,74 +1653,31 @@ int menu_set_settings(void *data, unsigned setting, unsigned action)
|
||||
#endif
|
||||
break;
|
||||
case RGUI_SETTINGS_SHADER_APPLY:
|
||||
{
|
||||
if (!driver.video || !driver.video->set_shader || action != RGUI_ACTION_OK)
|
||||
return 0;
|
||||
|
||||
RARCH_LOG("Applying shader ...\n");
|
||||
|
||||
enum rarch_shader_type type = shader_manager_get_type(&rgui->shader);
|
||||
|
||||
if (rgui->shader.passes && type != RARCH_SHADER_NONE)
|
||||
shader_manager_save_preset(rgui, NULL, true);
|
||||
else
|
||||
{
|
||||
if (!driver.video || !driver.video->set_shader || action != RGUI_ACTION_OK)
|
||||
return 0;
|
||||
|
||||
RARCH_LOG("Applying shader ...\n");
|
||||
|
||||
enum rarch_shader_type type = shader_manager_get_type(&rgui->shader);
|
||||
|
||||
if (rgui->shader.passes && type != RARCH_SHADER_NONE)
|
||||
type = gfx_shader_parse_type("", DEFAULT_SHADER_TYPE);
|
||||
if (type == RARCH_SHADER_NONE)
|
||||
{
|
||||
const char *conf_path = type == RARCH_SHADER_GLSL ? rgui->default_glslp : rgui->default_cgp;
|
||||
|
||||
char config_directory[PATH_MAX];
|
||||
if (*g_extern.config_path)
|
||||
fill_pathname_basedir(config_directory, g_extern.config_path, sizeof(config_directory));
|
||||
else
|
||||
*config_directory = '\0';
|
||||
|
||||
char cgp_path[PATH_MAX];
|
||||
const char *dirs[] = {
|
||||
g_settings.video.shader_dir,
|
||||
g_settings.rgui_config_directory,
|
||||
config_directory,
|
||||
};
|
||||
|
||||
config_file_t *conf = config_file_new(NULL);
|
||||
if (!conf)
|
||||
return 0;
|
||||
gfx_shader_write_conf_cgp(conf, &rgui->shader);
|
||||
|
||||
bool ret = false;
|
||||
unsigned d;
|
||||
for (d = 0; d < ARRAY_SIZE(dirs); d++)
|
||||
{
|
||||
if (!*dirs[d])
|
||||
continue;
|
||||
|
||||
fill_pathname_join(cgp_path, dirs[d], conf_path, sizeof(cgp_path));
|
||||
if (config_file_write(conf, cgp_path))
|
||||
{
|
||||
RARCH_LOG("Saved shader preset to %s.\n", cgp_path);
|
||||
shader_manager_set_preset(NULL, type, cgp_path);
|
||||
ret = true;
|
||||
break;
|
||||
}
|
||||
else
|
||||
RARCH_LOG("Failed writing shader preset to %s.\n", cgp_path);
|
||||
}
|
||||
|
||||
config_file_free(conf);
|
||||
if (!ret)
|
||||
RARCH_ERR("Failed to save shader preset. Make sure config directory and/or shader dir are writable.\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
type = gfx_shader_parse_type("", DEFAULT_SHADER_TYPE);
|
||||
if (type == RARCH_SHADER_NONE)
|
||||
{
|
||||
#if defined(HAVE_GLSL)
|
||||
type = RARCH_SHADER_GLSL;
|
||||
type = RARCH_SHADER_GLSL;
|
||||
#elif defined(HAVE_CG) || defined(HAVE_HLSL)
|
||||
type = RARCH_SHADER_CG;
|
||||
type = RARCH_SHADER_CG;
|
||||
#endif
|
||||
}
|
||||
shader_manager_set_preset(NULL, type, NULL);
|
||||
}
|
||||
shader_manager_set_preset(NULL, type, NULL);
|
||||
}
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
#ifdef _XBOX1
|
||||
case RGUI_SETTINGS_FLICKER_FILTER:
|
||||
|
Loading…
x
Reference in New Issue
Block a user