mirror of
https://github.com/libretro/RetroArch
synced 2025-03-03 04:14:00 +00:00
implement global shader presets
This commit is contained in:
parent
dec409bf17
commit
be20b9c283
@ -3868,6 +3868,10 @@ MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_AS,
|
||||
"Save Shader Preset As"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_GLOBAL,
|
||||
"Save Global Preset"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_CORE,
|
||||
"Save Core Preset"
|
||||
@ -6592,6 +6596,10 @@ MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_VIDEO_SHADER_PRESET_SAVE_GAME,
|
||||
"Save the current shader settings as the default settings for the content."
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_VIDEO_SHADER_PRESET_SAVE_GLOBAL,
|
||||
"Save the current shader settings as the default global setting."
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_VIDEO_SHADER_PARAMETERS,
|
||||
"Modifies the current shader directly. Changes will not be saved to the preset file."
|
||||
|
@ -2686,9 +2686,10 @@ default_action_dialog_start(action_ok_rename_entry,
|
||||
#if defined(HAVE_CG) || defined(HAVE_GLSL) || defined(HAVE_SLANG) || defined(HAVE_HLSL)
|
||||
enum
|
||||
{
|
||||
ACTION_OK_SHADER_PRESET_SAVE_CORE = 0,
|
||||
ACTION_OK_SHADER_PRESET_SAVE_GAME,
|
||||
ACTION_OK_SHADER_PRESET_SAVE_PARENT
|
||||
ACTION_OK_SHADER_PRESET_SAVE_GLOBAL = 0,
|
||||
ACTION_OK_SHADER_PRESET_SAVE_CORE,
|
||||
ACTION_OK_SHADER_PRESET_SAVE_PARENT,
|
||||
ACTION_OK_SHADER_PRESET_SAVE_GAME
|
||||
};
|
||||
|
||||
static int generic_action_ok_shader_preset_save(const char *path,
|
||||
@ -2704,24 +2705,47 @@ static int generic_action_ok_shader_preset_save(const char *path,
|
||||
|
||||
directory[0] = file[0] = tmp[0] = '\0';
|
||||
|
||||
if (!string_is_empty(core_name))
|
||||
if (action_type != ACTION_OK_SHADER_PRESET_SAVE_GLOBAL)
|
||||
{
|
||||
if (!string_is_empty(core_name))
|
||||
{
|
||||
fill_pathname_join(
|
||||
tmp,
|
||||
settings->paths.directory_video_shader,
|
||||
"presets",
|
||||
sizeof(tmp));
|
||||
fill_pathname_join(
|
||||
directory,
|
||||
tmp,
|
||||
core_name,
|
||||
sizeof(directory));
|
||||
}
|
||||
|
||||
if (!path_is_directory(directory))
|
||||
path_mkdir(directory);
|
||||
}
|
||||
else
|
||||
{
|
||||
fill_pathname_join(
|
||||
tmp,
|
||||
directory,
|
||||
settings->paths.directory_video_shader,
|
||||
"presets",
|
||||
sizeof(tmp));
|
||||
fill_pathname_join(
|
||||
directory,
|
||||
tmp,
|
||||
core_name,
|
||||
sizeof(directory));
|
||||
|
||||
if (!path_is_directory(directory))
|
||||
path_mkdir(directory);
|
||||
|
||||
fill_pathname_join(
|
||||
file,
|
||||
directory,
|
||||
"global",
|
||||
sizeof(file));
|
||||
}
|
||||
if (!path_is_directory(directory))
|
||||
path_mkdir(directory);
|
||||
|
||||
switch (action_type)
|
||||
{
|
||||
case ACTION_OK_SHADER_PRESET_SAVE_GLOBAL:
|
||||
break;
|
||||
case ACTION_OK_SHADER_PRESET_SAVE_CORE:
|
||||
if (!string_is_empty(core_name))
|
||||
fill_pathname_join(file, directory, core_name, sizeof(file));
|
||||
@ -2752,6 +2776,13 @@ static int generic_action_ok_shader_preset_save(const char *path,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int action_ok_shader_preset_save_global(const char *path,
|
||||
const char *label, unsigned type, size_t idx, size_t entry_idx)
|
||||
{
|
||||
return generic_action_ok_shader_preset_save(path, label, type,
|
||||
idx, entry_idx, ACTION_OK_SHADER_PRESET_SAVE_GLOBAL);
|
||||
}
|
||||
|
||||
static int action_ok_shader_preset_save_core(const char *path,
|
||||
const char *label, unsigned type, size_t idx, size_t entry_idx)
|
||||
{
|
||||
@ -2759,19 +2790,19 @@ static int action_ok_shader_preset_save_core(const char *path,
|
||||
idx, entry_idx, ACTION_OK_SHADER_PRESET_SAVE_CORE);
|
||||
}
|
||||
|
||||
static int action_ok_shader_preset_save_game(const char *path,
|
||||
const char *label, unsigned type, size_t idx, size_t entry_idx)
|
||||
{
|
||||
return generic_action_ok_shader_preset_save(path, label, type,
|
||||
idx, entry_idx, ACTION_OK_SHADER_PRESET_SAVE_GAME);
|
||||
}
|
||||
|
||||
static int action_ok_shader_preset_save_parent(const char *path,
|
||||
const char *label, unsigned type, size_t idx, size_t entry_idx)
|
||||
{
|
||||
return generic_action_ok_shader_preset_save(path, label, type,
|
||||
idx, entry_idx, ACTION_OK_SHADER_PRESET_SAVE_PARENT);
|
||||
}
|
||||
|
||||
static int action_ok_shader_preset_save_game(const char *path,
|
||||
const char *label, unsigned type, size_t idx, size_t entry_idx)
|
||||
{
|
||||
return generic_action_ok_shader_preset_save(path, label, type,
|
||||
idx, entry_idx, ACTION_OK_SHADER_PRESET_SAVE_GAME);
|
||||
}
|
||||
#endif
|
||||
|
||||
static int generic_action_ok_remap_file_operation(const char *path,
|
||||
@ -6359,9 +6390,9 @@ static int menu_cbs_init_bind_ok_compare_label(menu_file_list_cbs_t *cbs,
|
||||
BIND_ACTION_OK(cbs, action_ok_shader_preset_save_as);
|
||||
#endif
|
||||
break;
|
||||
case MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_GAME:
|
||||
case MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_GLOBAL:
|
||||
#if defined(HAVE_CG) || defined(HAVE_GLSL) || defined(HAVE_SLANG) || defined(HAVE_HLSL)
|
||||
BIND_ACTION_OK(cbs, action_ok_shader_preset_save_game);
|
||||
BIND_ACTION_OK(cbs, action_ok_shader_preset_save_global);
|
||||
#endif
|
||||
break;
|
||||
case MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_CORE:
|
||||
@ -6372,6 +6403,11 @@ static int menu_cbs_init_bind_ok_compare_label(menu_file_list_cbs_t *cbs,
|
||||
case MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_PARENT:
|
||||
#if defined(HAVE_CG) || defined(HAVE_GLSL) || defined(HAVE_SLANG) || defined(HAVE_HLSL)
|
||||
BIND_ACTION_OK(cbs, action_ok_shader_preset_save_parent);
|
||||
#endif
|
||||
break;
|
||||
case MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_GAME:
|
||||
#if defined(HAVE_CG) || defined(HAVE_GLSL) || defined(HAVE_SLANG) || defined(HAVE_HLSL)
|
||||
BIND_ACTION_OK(cbs, action_ok_shader_preset_save_game);
|
||||
#endif
|
||||
break;
|
||||
case MENU_ENUM_LABEL_CHEAT_FILE_SAVE_AS:
|
||||
|
@ -554,6 +554,7 @@ default_sublabel_macro(action_bind_sublabel_shader_watch_for_changes,
|
||||
default_sublabel_macro(action_bind_sublabel_shader_num_passes, MENU_ENUM_SUBLABEL_VIDEO_SHADER_NUM_PASSES)
|
||||
default_sublabel_macro(action_bind_sublabel_shader_preset, MENU_ENUM_SUBLABEL_VIDEO_SHADER_PRESET)
|
||||
default_sublabel_macro(action_bind_sublabel_shader_preset_save_as, MENU_ENUM_SUBLABEL_VIDEO_SHADER_PRESET_SAVE_AS)
|
||||
default_sublabel_macro(action_bind_sublabel_shader_preset_save_global, MENU_ENUM_SUBLABEL_VIDEO_SHADER_PRESET_SAVE_GLOBAL)
|
||||
default_sublabel_macro(action_bind_sublabel_shader_preset_save_core, MENU_ENUM_SUBLABEL_VIDEO_SHADER_PRESET_SAVE_CORE)
|
||||
default_sublabel_macro(action_bind_sublabel_shader_preset_save_parent, MENU_ENUM_SUBLABEL_VIDEO_SHADER_PRESET_SAVE_PARENT)
|
||||
default_sublabel_macro(action_bind_sublabel_shader_preset_save_game, MENU_ENUM_SUBLABEL_VIDEO_SHADER_PRESET_SAVE_GAME)
|
||||
@ -1234,6 +1235,9 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs,
|
||||
case MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_PARAMETERS:
|
||||
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_shader_preset_parameters);
|
||||
break;
|
||||
case MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_GLOBAL:
|
||||
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_shader_preset_save_global);
|
||||
break;
|
||||
case MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_CORE:
|
||||
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_shader_preset_save_core);
|
||||
break;
|
||||
|
@ -98,6 +98,7 @@ menu_texture_item ozone_entries_icon_get_texture(ozone_handle_t *ozone,
|
||||
case MENU_ENUM_LABEL_UPDATE_ASSETS:
|
||||
case MENU_ENUM_LABEL_SAVE_CURRENT_CONFIG_OVERRIDE_GAME:
|
||||
case MENU_ENUM_LABEL_REMAP_FILE_SAVE_GAME:
|
||||
case MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_GLOBAL:
|
||||
case MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_GAME:
|
||||
return ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_QUICKMENU];
|
||||
case MENU_ENUM_LABEL_START_CORE:
|
||||
|
@ -2397,6 +2397,7 @@ static uintptr_t xmb_icon_get_id(xmb_handle_t *xmb,
|
||||
case MENU_ENUM_LABEL_UPDATE_ASSETS:
|
||||
case MENU_ENUM_LABEL_SAVE_CURRENT_CONFIG_OVERRIDE_GAME:
|
||||
case MENU_ENUM_LABEL_REMAP_FILE_SAVE_GAME:
|
||||
case MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_GLOBAL:
|
||||
case MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_GAME:
|
||||
return xmb->textures.list[XMB_TEXTURE_QUICKMENU];
|
||||
case MENU_ENUM_LABEL_START_CORE:
|
||||
|
@ -6025,6 +6025,12 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type,
|
||||
MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_AS,
|
||||
MENU_SETTING_ACTION, 0, 0))
|
||||
count++;
|
||||
if (menu_entries_append_enum(info->list,
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_GLOBAL),
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_GLOBAL),
|
||||
MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_GLOBAL,
|
||||
MENU_SETTING_ACTION, 0, 0))
|
||||
count++;
|
||||
if (menu_entries_append_enum(info->list,
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_CORE),
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_CORE),
|
||||
|
@ -1904,9 +1904,10 @@ enum msg_hash_enums
|
||||
MENU_ENUM_LABEL_VALUE_UNABLE_TO_READ_COMPRESSED_FILE,
|
||||
|
||||
MENU_LABEL(VIDEO_SHADER_PRESET_SAVE_AS),
|
||||
MENU_LABEL(VIDEO_SHADER_PRESET_SAVE_GLOBAL),
|
||||
MENU_LABEL(VIDEO_SHADER_PRESET_SAVE_CORE),
|
||||
MENU_LABEL(VIDEO_SHADER_PRESET_SAVE_GAME),
|
||||
MENU_LABEL(VIDEO_SHADER_PRESET_SAVE_PARENT),
|
||||
MENU_LABEL(VIDEO_SHADER_PRESET_SAVE_GAME),
|
||||
MENU_LABEL(USER_LANGUAGE),
|
||||
MENU_LABEL(NETPLAY_NICKNAME),
|
||||
MENU_LABEL(VIDEO_VI_WIDTH),
|
||||
|
31
retroarch.c
31
retroarch.c
@ -22713,11 +22713,20 @@ static bool retroarch_load_shader_preset_internal(
|
||||
continue;
|
||||
|
||||
/* Concatenate strings into full paths */
|
||||
fill_pathname_join_special_ext(shader_path,
|
||||
shader_directory, core_name,
|
||||
special_name,
|
||||
video_shader_get_preset_extension(types[i]),
|
||||
PATH_MAX_LENGTH);
|
||||
if (core_name)
|
||||
{
|
||||
fill_pathname_join_special_ext(shader_path,
|
||||
shader_directory, core_name,
|
||||
special_name,
|
||||
video_shader_get_preset_extension(types[i]),
|
||||
PATH_MAX_LENGTH);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* core_name == NULL means we want the global preset */
|
||||
fill_pathname_join(shader_path, shader_directory, "global", PATH_MAX_LENGTH);
|
||||
strlcat(shader_path, video_shader_get_preset_extension(types[i]), PATH_MAX_LENGTH);
|
||||
}
|
||||
|
||||
if (!config_file_exists(shader_path))
|
||||
continue;
|
||||
@ -22738,9 +22747,10 @@ static bool retroarch_load_shader_preset_internal(
|
||||
/**
|
||||
* retroarch_load_shader_preset:
|
||||
*
|
||||
* Tries to load a supported core-, game- or folder-specific shader preset
|
||||
* from its respective location:
|
||||
* Tries to load a supported core-, game-, folder-specific or global
|
||||
* shader preset from its respective location:
|
||||
*
|
||||
* global: $SHADER_DIR/presets/global.$PRESET_EXT
|
||||
* core-specific: $SHADER_DIR/presets/$CORE_NAME/$CORE_NAME.$PRESET_EXT
|
||||
* folder-specific: $SHADER_DIR/presets/$CORE_NAME/$FOLDER_NAME.$PRESET_EXT
|
||||
* game-specific: $SHADER_DIR/presets/$CORE_NAME/$GAME_NAME.$PRESET_EXT
|
||||
@ -22805,6 +22815,13 @@ static bool retroarch_load_shader_preset(void)
|
||||
goto success;
|
||||
}
|
||||
|
||||
if (retroarch_load_shader_preset_internal(shader_directory, NULL,
|
||||
core_name))
|
||||
{
|
||||
RARCH_LOG("[Shaders]: global shader preset found.\n");
|
||||
goto success;
|
||||
}
|
||||
|
||||
free(shader_directory);
|
||||
return false;
|
||||
|
||||
|
@ -54,6 +54,7 @@ enum
|
||||
SHADER_PRESET_SAVE_CORE = 0,
|
||||
SHADER_PRESET_SAVE_GAME,
|
||||
SHADER_PRESET_SAVE_PARENT,
|
||||
SHADER_PRESET_SAVE_GLOBAL,
|
||||
SHADER_PRESET_SAVE_NORMAL
|
||||
};
|
||||
|
||||
@ -687,22 +688,42 @@ void ShaderParamsDialog::saveShaderPreset(const char *path, unsigned action_type
|
||||
|
||||
directory[0] = file[0] = tmp[0] = '\0';
|
||||
|
||||
if (!string_is_empty(core_name))
|
||||
if (action_type != SHADER_PRESET_SAVE_GLOBAL)
|
||||
{
|
||||
if (!string_is_empty(core_name))
|
||||
{
|
||||
fill_pathname_join(
|
||||
tmp,
|
||||
settings->paths.directory_video_shader,
|
||||
"presets",
|
||||
sizeof(tmp));
|
||||
fill_pathname_join(
|
||||
directory,
|
||||
tmp,
|
||||
core_name,
|
||||
sizeof(directory));
|
||||
}
|
||||
|
||||
if (!path_is_directory(directory))
|
||||
path_mkdir(directory);
|
||||
}
|
||||
else
|
||||
{
|
||||
fill_pathname_join(
|
||||
tmp,
|
||||
directory,
|
||||
settings->paths.directory_video_shader,
|
||||
"presets",
|
||||
sizeof(tmp));
|
||||
fill_pathname_join(
|
||||
directory,
|
||||
tmp,
|
||||
core_name,
|
||||
sizeof(directory));
|
||||
}
|
||||
|
||||
if (!path_is_directory(directory))
|
||||
path_mkdir(directory);
|
||||
if (!path_is_directory(directory))
|
||||
path_mkdir(directory);
|
||||
|
||||
fill_pathname_join(
|
||||
file,
|
||||
directory,
|
||||
"global",
|
||||
sizeof(file));
|
||||
}
|
||||
|
||||
switch (action_type)
|
||||
{
|
||||
@ -743,6 +764,11 @@ void ShaderParamsDialog::saveShaderPreset(const char *path, unsigned action_type
|
||||
);
|
||||
}
|
||||
|
||||
void ShaderParamsDialog::onShaderSaveGlobalPresetClicked()
|
||||
{
|
||||
saveShaderPreset(NULL, SHADER_PRESET_SAVE_GLOBAL);
|
||||
}
|
||||
|
||||
void ShaderParamsDialog::onShaderSaveCorePresetClicked()
|
||||
{
|
||||
saveShaderPreset(NULL, SHADER_PRESET_SAVE_CORE);
|
||||
@ -913,6 +939,7 @@ void ShaderParamsDialog::buildLayout()
|
||||
|
||||
saveMenu = new QMenu(saveButton);
|
||||
saveMenu->addAction(QString(msg_hash_to_str(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_AS)) + "...", this, SLOT(onShaderSavePresetAsClicked()));
|
||||
saveMenu->addAction(msg_hash_to_str(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_GLOBAL), this, SLOT(onShaderSaveGlobalPresetClicked()));
|
||||
saveMenu->addAction(msg_hash_to_str(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_CORE), this, SLOT(onShaderSaveCorePresetClicked()));
|
||||
saveMenu->addAction(msg_hash_to_str(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_PARENT), this, SLOT(onShaderSaveParentPresetClicked()));
|
||||
saveMenu->addAction(msg_hash_to_str(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_GAME), this, SLOT(onShaderSaveGamePresetClicked()));
|
||||
|
@ -61,6 +61,7 @@ private slots:
|
||||
void onShaderSaveCorePresetClicked();
|
||||
void onShaderSaveParentPresetClicked();
|
||||
void onShaderSaveGamePresetClicked();
|
||||
void onShaderSaveGlobalPresetClicked();
|
||||
void onShaderClearAllPassesClicked();
|
||||
void onShaderRemovePassClicked();
|
||||
void onShaderApplyClicked();
|
||||
|
Loading…
x
Reference in New Issue
Block a user