mirror of
https://github.com/libretro/RetroArch
synced 2025-03-03 04:14:00 +00:00
Can tweak shader parameters from RGUI.
Just need to figure out how to handle parameter saving now.
This commit is contained in:
parent
b88c678213
commit
b38c30b368
@ -51,6 +51,18 @@ static void menu_common_entries_init(void *data, unsigned menu_type)
|
||||
switch (menu_type)
|
||||
{
|
||||
#ifdef HAVE_SHADER_MANAGER
|
||||
case RGUI_SETTINGS_SHADER_PARAMETERS:
|
||||
{
|
||||
file_list_clear(rgui->selection_buf);
|
||||
struct gfx_shader *shader = NULL;
|
||||
if (driver.video_poke && driver.video_data && driver.video_poke->get_current_shader)
|
||||
shader = driver.video_poke->get_current_shader(driver.video_data);
|
||||
|
||||
if (shader)
|
||||
for (i = 0; i < shader->num_parameters; i++)
|
||||
file_list_push(rgui->selection_buf, shader->parameters[i].desc, RGUI_SETTINGS_SHADER_PARAMETER_0 + i, 0);
|
||||
break;
|
||||
}
|
||||
case RGUI_SETTINGS_SHADER_OPTIONS:
|
||||
file_list_clear(rgui->selection_buf);
|
||||
file_list_push(rgui->selection_buf, "Apply Shader Changes",
|
||||
@ -60,6 +72,8 @@ static void menu_common_entries_init(void *data, unsigned menu_type)
|
||||
RGUI_SETTINGS_SHADER_PRESET, 0);
|
||||
file_list_push(rgui->selection_buf, "Save As Shader Preset",
|
||||
RGUI_SETTINGS_SHADER_PRESET_SAVE, 0);
|
||||
file_list_push(rgui->selection_buf, "Shader Parameters",
|
||||
RGUI_SETTINGS_SHADER_PARAMETERS, 0);
|
||||
file_list_push(rgui->selection_buf, "Shader Passes",
|
||||
RGUI_SETTINGS_SHADER_PASSES, 0);
|
||||
|
||||
@ -505,6 +519,7 @@ static unsigned menu_common_type_is(unsigned type)
|
||||
type == RGUI_SETTINGS_VIDEO_OPTIONS ||
|
||||
type == RGUI_SETTINGS_FONT_OPTIONS ||
|
||||
type == RGUI_SETTINGS_SHADER_OPTIONS ||
|
||||
type == RGUI_SETTINGS_SHADER_PARAMETERS ||
|
||||
type == RGUI_SETTINGS_AUDIO_OPTIONS ||
|
||||
type == RGUI_SETTINGS_DISK_OPTIONS ||
|
||||
type == RGUI_SETTINGS_PATH_OPTIONS ||
|
||||
@ -670,7 +685,7 @@ static int menu_settings_iterate(void *data, unsigned action)
|
||||
file_list_get_last(rgui->menu_stack, &dir, &menu_type);
|
||||
|
||||
if (rgui->need_refresh && !(menu_type == RGUI_FILE_DIRECTORY ||
|
||||
menu_common_type_is(menu_type) == RGUI_SETTINGS_SHADER_OPTIONS||
|
||||
menu_common_type_is(menu_type) == RGUI_SETTINGS_SHADER_OPTIONS ||
|
||||
menu_common_type_is(menu_type) == RGUI_FILE_DIRECTORY ||
|
||||
menu_type == RGUI_SETTINGS_VIDEO_SOFTFILTER ||
|
||||
menu_type == RGUI_SETTINGS_AUDIO_DSP_FILTER ||
|
||||
@ -697,6 +712,7 @@ static int menu_settings_iterate(void *data, unsigned action)
|
||||
|| menu_type == RGUI_SETTINGS_VIDEO_OPTIONS
|
||||
|| menu_type == RGUI_SETTINGS_FONT_OPTIONS
|
||||
|| menu_type == RGUI_SETTINGS_SHADER_OPTIONS
|
||||
|| menu_type == RGUI_SETTINGS_SHADER_PARAMETERS
|
||||
)
|
||||
menu_common_entries_init(rgui, menu_type);
|
||||
else
|
||||
@ -1750,9 +1766,23 @@ static void menu_common_shader_manager_get_str(void *data, char *type_str, size_
|
||||
struct gfx_shader *shader = (struct gfx_shader*)data;
|
||||
if (type == RGUI_SETTINGS_SHADER_APPLY)
|
||||
*type_str = '\0';
|
||||
else if (type >= RGUI_SETTINGS_SHADER_PARAMETER_0 && type <= RGUI_SETTINGS_SHADER_PARAMETER_LAST)
|
||||
{
|
||||
struct gfx_shader *shader = NULL;
|
||||
if (driver.video_poke && driver.video_data && driver.video_poke->get_current_shader)
|
||||
shader = driver.video_poke->get_current_shader(driver.video_data);
|
||||
|
||||
if (shader)
|
||||
{
|
||||
const struct gfx_shader_parameter *param = &shader->parameters[type - RGUI_SETTINGS_SHADER_PARAMETER_0];
|
||||
snprintf(type_str, type_str_size, "%.2f [%.2f %.2f]", param->current, param->minimum, param->maximum);
|
||||
}
|
||||
else
|
||||
*type_str = '\0';
|
||||
}
|
||||
else if (type == RGUI_SETTINGS_SHADER_PASSES)
|
||||
snprintf(type_str, type_str_size, "%u", shader->passes);
|
||||
else
|
||||
else if (type >= RGUI_SETTINGS_SHADER_0 && type <= RGUI_SETTINGS_SHADER_LAST)
|
||||
{
|
||||
unsigned pass = (type - RGUI_SETTINGS_SHADER_0) / 3;
|
||||
switch ((type - RGUI_SETTINGS_SHADER_0) % 3)
|
||||
@ -1793,6 +1823,8 @@ static void menu_common_shader_manager_get_str(void *data, char *type_str, size_
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
*type_str = '\0';
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -1951,10 +1983,46 @@ static int menu_common_shader_manager_setting_toggle(void *data, unsigned settin
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (setting == RGUI_SETTINGS_SHADER_PARAMETERS && action == RGUI_ACTION_OK)
|
||||
{
|
||||
file_list_push(rgui->menu_stack, "", setting, rgui->selection_ptr);
|
||||
menu_clear_navigation(rgui);
|
||||
rgui->need_refresh = true;
|
||||
}
|
||||
else if (setting >= RGUI_SETTINGS_SHADER_PARAMETER_0 && setting <= RGUI_SETTINGS_SHADER_PARAMETER_LAST)
|
||||
{
|
||||
struct gfx_shader *shader = NULL;
|
||||
if (driver.video_poke && driver.video_data && driver.video_poke->get_current_shader)
|
||||
shader = driver.video_poke->get_current_shader(driver.video_data);
|
||||
|
||||
if (!shader)
|
||||
return 0;
|
||||
|
||||
struct gfx_shader_parameter *param = &shader->parameters[setting - RGUI_SETTINGS_SHADER_PARAMETER_0];
|
||||
switch (action)
|
||||
{
|
||||
case RGUI_ACTION_START:
|
||||
param->current = param->initial;
|
||||
break;
|
||||
|
||||
case RGUI_ACTION_LEFT:
|
||||
param->current -= param->step;
|
||||
break;
|
||||
|
||||
case RGUI_ACTION_RIGHT:
|
||||
param->current += param->step;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
param->current = min(max(param->minimum, param->current), param->maximum);
|
||||
}
|
||||
else if ((setting == RGUI_SETTINGS_SHADER_APPLY || setting == RGUI_SETTINGS_SHADER_PASSES) &&
|
||||
(driver.menu_ctx && driver.menu_ctx->backend && driver.menu_ctx->backend->setting_set))
|
||||
driver.menu_ctx->backend->setting_set(rgui, setting, action);
|
||||
else if ((dist_shader % 3) == 0 || setting == RGUI_SETTINGS_SHADER_PRESET)
|
||||
else if (((dist_shader % 3) == 0 || setting == RGUI_SETTINGS_SHADER_PRESET))
|
||||
{
|
||||
dist_shader /= 3;
|
||||
struct gfx_shader_pass *pass = setting == RGUI_SETTINGS_SHADER_PRESET ?
|
||||
|
@ -62,7 +62,10 @@ typedef enum
|
||||
RGUI_SETTINGS_SHADER_FILTER,
|
||||
RGUI_SETTINGS_SHADER_PRESET,
|
||||
RGUI_SETTINGS_SHADER_APPLY,
|
||||
RGUI_SETTINGS_SHADER_PARAMETERS,
|
||||
RGUI_SETTINGS_SHADER_PASSES,
|
||||
RGUI_SETTINGS_SHADER_PARAMETER_0,
|
||||
RGUI_SETTINGS_SHADER_PARAMETER_LAST = RGUI_SETTINGS_SHADER_PARAMETER_0 + (GFX_MAX_PARAMETERS - 1),
|
||||
RGUI_SETTINGS_SHADER_0,
|
||||
RGUI_SETTINGS_SHADER_0_FILTER,
|
||||
RGUI_SETTINGS_SHADER_0_SCALE,
|
||||
|
@ -316,6 +316,8 @@ static void rgui_render(void *data)
|
||||
#ifdef HAVE_SHADER_MANAGER
|
||||
else if (menu_type == RGUI_SETTINGS_SHADER_OPTIONS)
|
||||
strlcpy(title, "SHADER OPTIONS", sizeof(title));
|
||||
else if (menu_type == RGUI_SETTINGS_SHADER_PARAMETERS)
|
||||
strlcpy(title, "SHADER PARAMETERS", sizeof(title));
|
||||
#endif
|
||||
else if (menu_type == RGUI_SETTINGS_FONT_OPTIONS)
|
||||
strlcpy(title, "FONT OPTIONS", sizeof(title));
|
||||
@ -451,7 +453,7 @@ static void rgui_render(void *data)
|
||||
strlcpy(type_str, "(DIR)", sizeof(type_str));
|
||||
w = 5;
|
||||
}
|
||||
else if (type == RGUI_SETTINGS_SHADER_OPTIONS || type == RGUI_SETTINGS_SHADER_PRESET)
|
||||
else if (type == RGUI_SETTINGS_SHADER_OPTIONS || type == RGUI_SETTINGS_SHADER_PRESET || type == RGUI_SETTINGS_SHADER_PARAMETERS)
|
||||
strlcpy(type_str, "...", sizeof(type_str));
|
||||
else if (type == RGUI_SETTINGS_SHADER_FILTER)
|
||||
snprintf(type_str, sizeof(type_str), "%s",
|
||||
|
@ -28,6 +28,7 @@ extern "C" {
|
||||
#define GFX_MAX_SHADERS 16
|
||||
#define GFX_MAX_TEXTURES 8
|
||||
#define GFX_MAX_VARIABLES 64
|
||||
#define GFX_MAX_PARAMETERS 64
|
||||
|
||||
enum gfx_scale_type
|
||||
{
|
||||
@ -120,7 +121,7 @@ struct gfx_shader
|
||||
unsigned luts;
|
||||
struct gfx_shader_lut lut[GFX_MAX_TEXTURES];
|
||||
|
||||
struct gfx_shader_parameter parameters[64];
|
||||
struct gfx_shader_parameter parameters[GFX_MAX_PARAMETERS];
|
||||
unsigned num_parameters;
|
||||
|
||||
unsigned variables;
|
||||
|
Loading…
x
Reference in New Issue
Block a user