Reimplement shader preset parameter functions

This commit is contained in:
twinaphex 2019-12-22 22:45:08 +01:00
parent b5cc71720c
commit 18f2b9c63e
6 changed files with 68 additions and 32 deletions

View File

@ -370,13 +370,14 @@ static void menu_action_setting_disp_set_label_shader_default_filter(
strlcpy(s, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NEAREST), len);
}
static void menu_action_setting_disp_set_label_shader_parameter(
static void menu_action_setting_disp_set_label_shader_parameter_internal(
file_list_t* list,
unsigned *w, unsigned type, unsigned i,
const char *label,
char *s, size_t len,
const char *path,
char *s2, size_t len2)
char *s2, size_t len2,
unsigned offset)
{
video_shader_ctx_t shader_info;
const struct video_shader_parameter *param = NULL;
@ -390,8 +391,7 @@ static void menu_action_setting_disp_set_label_shader_parameter(
if (!shader_info.data)
return;
param = &shader_info.data->parameters[type -
MENU_SETTINGS_SHADER_PARAMETER_0];
param = &shader_info.data->parameters[type - offset];
if (!param)
return;
@ -400,6 +400,18 @@ static void menu_action_setting_disp_set_label_shader_parameter(
param->current, param->minimum, param->maximum);
}
static void menu_action_setting_disp_set_label_shader_parameter(
file_list_t* list,
unsigned *w, unsigned type, unsigned i,
const char *label,
char *s, size_t len,
const char *path,
char *s2, size_t len2)
{
menu_action_setting_disp_set_label_shader_parameter_internal(list, w, type, i,
label, s, len, path, s2, len2, MENU_SETTINGS_SHADER_PARAMETER_0);
}
static void menu_action_setting_disp_set_label_shader_preset_parameter(
file_list_t* list,
unsigned *w, unsigned type, unsigned i,
@ -408,18 +420,8 @@ static void menu_action_setting_disp_set_label_shader_preset_parameter(
const char *path,
char *s2, size_t len2)
{
struct video_shader *shader = menu_shader_get();
struct video_shader_parameter *param = shader ?
&shader->parameters[type - MENU_SETTINGS_SHADER_PRESET_PARAMETER_0]
: NULL;
*s = '\0';
*w = 19;
strlcpy(s2, path, len2);
if (param)
snprintf(s, len, "%.2f [%.2f %.2f]",
param->current, param->minimum, param->maximum);
menu_action_setting_disp_set_label_shader_parameter_internal(list, w, type, i,
label, s, len, path, s2, len2, MENU_SETTINGS_SHADER_PRESET_PARAMETER_0);
}
static void menu_action_setting_disp_set_label_shader_scale_pass(

View File

@ -64,7 +64,8 @@ static int generic_shader_action_parameter_left(
return 0;
}
static int shader_action_parameter_left(unsigned type, const char *label, bool wraparound)
static int shader_action_parameter_left_internal(unsigned type, const char *label, bool wraparound,
unsigned offset)
{
video_shader_ctx_t shader_info;
struct video_shader *shader = menu_shader_get();
@ -75,9 +76,8 @@ static int shader_action_parameter_left(unsigned type, const char *label, bool w
video_shader_driver_get_current_shader(&shader_info);
param_prev = &shader_info.data->parameters[type - MENU_SETTINGS_SHADER_PARAMETER_0];
param_menu = shader ? &shader->parameters[type -
MENU_SETTINGS_SHADER_PARAMETER_0] : NULL;
param_prev = &shader_info.data->parameters[type - offset];
param_menu = shader ? &shader->parameters [type - offset] : NULL;
if (!param_prev || !param_menu)
return menu_cbs_exit();
@ -89,6 +89,16 @@ static int shader_action_parameter_left(unsigned type, const char *label, bool w
return ret;
}
static int shader_action_parameter_left(unsigned type, const char *label, bool wraparound)
{
return shader_action_parameter_left_internal(type, label, wraparound, MENU_SETTINGS_SHADER_PARAMETER_0);
}
static int shader_action_preset_parameter_left(unsigned type, const char *label, bool wraparound)
{
return shader_action_parameter_left_internal(type, label, wraparound, MENU_SETTINGS_SHADER_PRESET_PARAMETER_0);
}
#endif
#ifdef HAVE_AUDIOMIXER
@ -920,7 +930,7 @@ static int menu_cbs_init_bind_left_compare_type(menu_file_list_cbs_t *cbs,
else if (type >= MENU_SETTINGS_SHADER_PRESET_PARAMETER_0
&& type <= MENU_SETTINGS_SHADER_PRESET_PARAMETER_LAST)
{
BIND_ACTION_LEFT(cbs, shader_action_parameter_left);
BIND_ACTION_LEFT(cbs, shader_action_preset_parameter_left);
}
#endif
else if (type >= MENU_SETTINGS_INPUT_DESC_BEGIN

View File

@ -64,7 +64,8 @@ static int generic_shader_action_parameter_right(struct video_shader_parameter *
return 0;
}
int shader_action_parameter_right(unsigned type, const char *label, bool wraparound)
static int generic_shader_action_parameter_right_internal(unsigned type, const char *label,
bool wraparound, unsigned offset)
{
video_shader_ctx_t shader_info;
struct video_shader *shader = menu_shader_get();
@ -75,9 +76,8 @@ int shader_action_parameter_right(unsigned type, const char *label, bool wraparo
video_shader_driver_get_current_shader(&shader_info);
param_prev = &shader_info.data->parameters[type - MENU_SETTINGS_SHADER_PARAMETER_0];
param_menu = shader ? &shader->parameters[type -
MENU_SETTINGS_SHADER_PARAMETER_0] : NULL;
param_prev = &shader_info.data->parameters[type - offset];
param_menu = shader ? &shader->parameters [type - offset] : NULL;
if (!param_prev || !param_menu)
return menu_cbs_exit();
@ -89,6 +89,16 @@ int shader_action_parameter_right(unsigned type, const char *label, bool wraparo
return ret;
}
int shader_action_parameter_right(unsigned type, const char *label, bool wraparound)
{
return generic_shader_action_parameter_right_internal(type, label, wraparound, MENU_SETTINGS_SHADER_PARAMETER_0);
}
int shader_action_preset_parameter_right(unsigned type, const char *label, bool wraparound)
{
return generic_shader_action_parameter_right_internal(type, label, wraparound, MENU_SETTINGS_SHADER_PRESET_PARAMETER_0);
}
#endif
int generic_action_cheat_toggle(size_t idx, unsigned type, const char *label,
@ -805,7 +815,7 @@ static int menu_cbs_init_bind_right_compare_type(menu_file_list_cbs_t *cbs,
else if (type >= MENU_SETTINGS_SHADER_PRESET_PARAMETER_0
&& type <= MENU_SETTINGS_SHADER_PRESET_PARAMETER_LAST)
{
BIND_ACTION_RIGHT(cbs, shader_action_parameter_right);
BIND_ACTION_RIGHT(cbs, shader_action_preset_parameter_right);
}
#endif
else if (type >= MENU_SETTINGS_INPUT_DESC_BEGIN

View File

@ -132,7 +132,7 @@ static int shader_action_parameter_select(const char *path, const char *label, u
static int shader_action_parameter_preset_select(const char *path, const char *label, unsigned type,
size_t idx, size_t entry_idx)
{
return shader_action_parameter_right(type, label, true);
return shader_action_preset_parameter_right(type, label, true);
}
#endif

View File

@ -166,13 +166,12 @@ static int action_start_input_desc(
}
#if defined(HAVE_CG) || defined(HAVE_GLSL) || defined(HAVE_SLANG) || defined(HAVE_HLSL)
static int action_start_shader_action_parameter(
const char *path, const char *label,
unsigned type, size_t idx, size_t entry_idx)
static int action_start_shader_action_parameter_generic(
unsigned type, unsigned offset)
{
video_shader_ctx_t shader_info;
struct video_shader_parameter *param = NULL;
unsigned parameter = type - MENU_SETTINGS_SHADER_PARAMETER_0;
unsigned parameter = type - offset;
video_shader_driver_get_current_shader(&shader_info);
@ -187,6 +186,20 @@ static int action_start_shader_action_parameter(
return menu_shader_manager_clear_parameter(menu_shader_get(), parameter);
}
static int action_start_shader_action_parameter(
const char *path, const char *label,
unsigned type, size_t idx, size_t entry_idx)
{
return action_start_shader_action_parameter_generic(type, MENU_SETTINGS_SHADER_PARAMETER_0);
}
static int action_start_shader_action_preset_parameter(
const char *path, const char *label,
unsigned type, size_t idx, size_t entry_idx)
{
return action_start_shader_action_parameter_generic(type, MENU_SETTINGS_SHADER_PRESET_PARAMETER_0);
}
static int action_start_shader_pass(
const char *path, const char *label,
unsigned type, size_t idx, size_t entry_idx)
@ -510,7 +523,7 @@ static int menu_cbs_init_bind_start_compare_type(menu_file_list_cbs_t *cbs,
else if (type >= MENU_SETTINGS_SHADER_PRESET_PARAMETER_0
&& type <= MENU_SETTINGS_SHADER_PRESET_PARAMETER_LAST)
{
BIND_ACTION_START(cbs, action_start_shader_action_parameter);
BIND_ACTION_START(cbs, action_start_shader_action_preset_parameter);
}
else
#endif

View File

@ -196,6 +196,7 @@ int action_cancel_pop_default(const char *path,
int action_refresh_default(file_list_t *list, file_list_t *menu_list);
int shader_action_parameter_right(unsigned type, const char *label, bool wraparound);
int shader_action_preset_parameter_right(unsigned type, const char *label, bool wraparound);
int action_cancel_pop_with_new_pos(const char *path,
const char *label, unsigned type, size_t idx, size_t new_idx);