Create RARCH_MENU_CTL_SHADER_GET

This commit is contained in:
twinaphex 2015-12-10 19:56:08 +01:00
parent 4202e9e9d3
commit 8392d944e5
6 changed files with 79 additions and 63 deletions

View File

@ -102,24 +102,25 @@ static void menu_action_setting_disp_set_label_shader_filter_pass(
char *s2, size_t len2)
{
unsigned pass = 0;
menu_handle_t *menu = menu_driver_get_ptr();
if (!menu)
return;
#if defined(HAVE_CG) || defined(HAVE_GLSL) || defined(HAVE_HLSL)
struct video_shader *shader = NULL;
#endif
(void)pass;
(void)menu;
*s = '\0';
*w = 19;
strlcpy(s2, path, len2);
#if defined(HAVE_CG) || defined(HAVE_GLSL) || defined(HAVE_HLSL)
if (!menu || !menu->shader)
menu_driver_ctl(RARCH_MENU_CTL_SHADER_GET,
&shader);
if (!shader)
return;
pass = (type - MENU_SETTINGS_SHADER_PASS_FILTER_0);
switch (menu->shader->pass[pass].filter)
switch (shader->pass[pass].filter)
{
case 0:
strlcpy(s, menu_hash_to_str(MENU_VALUE_DONT_CARE),
@ -167,18 +168,18 @@ static void menu_action_setting_disp_set_label_shader_num_passes(
const char *path,
char *s2, size_t len2)
{
menu_handle_t *menu = menu_driver_get_ptr();
if (!menu)
return;
(void)menu;
#if defined(HAVE_CG) || defined(HAVE_GLSL) || defined(HAVE_HLSL)
struct video_shader *shader = NULL;
#endif
*s = '\0';
*w = 19;
strlcpy(s2, path, len2);
#if defined(HAVE_CG) || defined(HAVE_GLSL) || defined(HAVE_HLSL)
if (menu && menu->shader)
snprintf(s, len, "%u", menu->shader->passes);
menu_driver_ctl(RARCH_MENU_CTL_SHADER_GET,
&shader);
if (shader)
snprintf(s, len, "%u", shader->passes);
#endif
}
@ -191,13 +192,12 @@ static void menu_action_setting_disp_set_label_shader_pass(
const char *path,
char *s2, size_t len2)
{
#if defined(HAVE_CG) || defined(HAVE_GLSL) || defined(HAVE_HLSL)
struct video_shader *shader = NULL;
#endif
unsigned pass = (type - MENU_SETTINGS_SHADER_PASS_0);
menu_handle_t *menu = menu_driver_get_ptr();
if (!menu)
return;
(void)pass;
(void)menu;
*s = '\0';
*w = 19;
@ -205,11 +205,14 @@ static void menu_action_setting_disp_set_label_shader_pass(
strlcpy(s, menu_hash_to_str(MENU_VALUE_NOT_AVAILABLE), len);
#if defined(HAVE_CG) || defined(HAVE_GLSL) || defined(HAVE_HLSL)
if (!menu->shader)
menu_driver_ctl(RARCH_MENU_CTL_SHADER_GET,
&shader);
if (!shader)
return;
if (*menu->shader->pass[pass].source.path)
if (*shader->pass[pass].source.path)
fill_pathname_base(s,
menu->shader->pass[pass].source.path, len);
shader->pass[pass].source.path, len);
#endif
}

View File

@ -58,9 +58,15 @@ static int shader_action_parameter_left(unsigned type, const char *label,
static int shader_action_parameter_preset_left(unsigned type, const char *label,
bool wraparound)
{
menu_handle_t *menu = menu_driver_get_ptr();
struct video_shader *shader = menu ? menu->shader : NULL;
struct video_shader_parameter *param = &shader->parameters[type - MENU_SETTINGS_SHADER_PRESET_PARAMETER_0];
struct video_shader_parameter *param = NULL;
struct video_shader *shader = NULL;
menu_driver_ctl(RARCH_MENU_CTL_SHADER_GET,
&shader);
param = shader ?
&shader->parameters[type - MENU_SETTINGS_SHADER_PRESET_PARAMETER_0] :
NULL;
return generic_shader_action_parameter_left(shader, param, type, label, wraparound);
}
#endif
@ -172,13 +178,11 @@ static int action_left_shader_scale_pass(unsigned type, const char *label,
{
#ifdef HAVE_SHADER_MANAGER
unsigned pass = type - MENU_SETTINGS_SHADER_PASS_SCALE_0;
struct video_shader *shader = NULL;
struct video_shader *shader = NULL;
struct video_shader_pass *shader_pass = NULL;
menu_handle_t *menu = menu_driver_get_ptr();
if (!menu)
return -1;
shader = menu->shader;
menu_driver_ctl(RARCH_MENU_CTL_SHADER_GET,
&shader);
if (!shader)
return -1;
shader_pass = &shader->pass[pass];
@ -203,14 +207,12 @@ static int action_left_shader_filter_pass(unsigned type, const char *label,
{
#ifdef HAVE_SHADER_MANAGER
unsigned delta = 2;
unsigned pass = type - MENU_SETTINGS_SHADER_PASS_FILTER_0;
struct video_shader *shader = NULL;
unsigned pass = type - MENU_SETTINGS_SHADER_PASS_FILTER_0;
struct video_shader *shader = NULL;
struct video_shader_pass *shader_pass = NULL;
menu_handle_t *menu = menu_driver_get_ptr();
if (!menu)
return -1;
shader = menu->shader;
menu_driver_ctl(RARCH_MENU_CTL_SHADER_GET,
&shader);
if (!shader)
return -1;
shader_pass = &shader->pass[pass];
@ -255,11 +257,9 @@ static int action_left_shader_num_passes(unsigned type, const char *label,
{
#ifdef HAVE_SHADER_MANAGER
struct video_shader *shader = NULL;
menu_handle_t *menu = menu_driver_get_ptr();
if (!menu)
return -1;
shader = menu->shader;
menu_driver_ctl(RARCH_MENU_CTL_SHADER_GET,
&shader);
if (!shader)
return -1;
@ -267,7 +267,7 @@ static int action_left_shader_num_passes(unsigned type, const char *label,
shader->passes--;
menu_entries_set_refresh(false);
menu_driver_ctl(RARCH_MENU_CTL_SET_PREVENT_POPULATE, NULL);
video_shader_resolve_parameters(NULL, menu->shader);
video_shader_resolve_parameters(NULL, shader);
#endif
return 0;

View File

@ -625,6 +625,7 @@ static int generic_action_ok(const char *path,
int ret = 0;
const char *menu_path = NULL;
const char *flush_char = NULL;
struct video_shader *shader = NULL;
global_t *global = global_get_ptr();
menu_handle_t *menu = menu_driver_get_ptr();
settings_t *settings = config_get_ptr();
@ -632,6 +633,9 @@ static int generic_action_ok(const char *path,
if (!menu)
goto error;
menu_driver_ctl(RARCH_MENU_CTL_SHADER_GET,
&shader);
menu_entries_get_last_stack(&menu_path, NULL,
NULL, NULL);
@ -691,16 +695,16 @@ static int generic_action_ok(const char *path,
break;
#ifdef HAVE_SHADER_MANAGER
case ACTION_OK_LOAD_PRESET:
menu_shader_manager_set_preset(menu->shader,
menu_shader_manager_set_preset(shader,
video_shader_parse_type(action_path, RARCH_SHADER_NONE),
action_path);
break;
case ACTION_OK_LOAD_SHADER_PASS:
strlcpy(
menu->shader->pass[hack_shader_pass].source.path,
shader->pass[hack_shader_pass].source.path,
action_path,
sizeof(menu->shader->pass[hack_shader_pass].source.path));
video_shader_resolve_parameters(NULL, menu->shader);
sizeof(shader->pass[hack_shader_pass].source.path));
video_shader_resolve_parameters(NULL, shader);
break;
#endif
case ACTION_OK_LOAD_RECORD_CONFIGFILE:

View File

@ -61,9 +61,15 @@ int shader_action_parameter_right(unsigned type, const char *label, bool wraparo
int shader_action_parameter_preset_right(unsigned type, const char *label,
bool wraparound)
{
menu_handle_t *menu = menu_driver_get_ptr();
struct video_shader *shader = menu ? menu->shader : NULL;
struct video_shader_parameter *param = &shader->parameters[type - MENU_SETTINGS_SHADER_PRESET_PARAMETER_0];
struct video_shader_parameter *param = NULL;
struct video_shader *shader = NULL;
menu_driver_ctl(RARCH_MENU_CTL_SHADER_GET,
&shader);
param = shader ?
&shader->parameters[type - MENU_SETTINGS_SHADER_PRESET_PARAMETER_0] :
NULL;
return generic_shader_action_parameter_right(shader, param, type, label, wraparound);
}
#endif
@ -190,13 +196,11 @@ static int action_right_shader_scale_pass(unsigned type, const char *label,
{
#ifdef HAVE_SHADER_MANAGER
unsigned pass = type - MENU_SETTINGS_SHADER_PASS_SCALE_0;
struct video_shader *shader = NULL;
struct video_shader *shader = NULL;
struct video_shader_pass *shader_pass = NULL;
menu_handle_t *menu = menu_driver_get_ptr();
if (!menu)
return -1;
shader = menu->shader;
menu_driver_ctl(RARCH_MENU_CTL_SHADER_GET,
&shader);
if (!shader)
return -1;
shader_pass = &shader->pass[pass];
@ -220,15 +224,13 @@ static int action_right_shader_filter_pass(unsigned type, const char *label,
bool wraparound)
{
#ifdef HAVE_SHADER_MANAGER
unsigned pass = type - MENU_SETTINGS_SHADER_PASS_FILTER_0;
struct video_shader *shader = NULL;
unsigned pass = type - MENU_SETTINGS_SHADER_PASS_FILTER_0;
unsigned delta = 1;
struct video_shader *shader = NULL;
struct video_shader_pass *shader_pass = NULL;
menu_handle_t *menu = menu_driver_get_ptr();
unsigned delta = 1;
if (!menu)
return -1;
shader = menu->shader;
menu_driver_ctl(RARCH_MENU_CTL_SHADER_GET,
&shader);
if (!shader)
return -1;
shader_pass = &shader->pass[pass];
@ -272,11 +274,9 @@ static int action_right_shader_num_passes(unsigned type, const char *label,
{
#ifdef HAVE_SHADER_MANAGER
struct video_shader *shader = NULL;
menu_handle_t *menu = menu_driver_get_ptr();
if (!menu)
return -1;
shader = menu->shader;
menu_driver_ctl(RARCH_MENU_CTL_SHADER_GET,
&shader);
if (!shader)
return -1;
@ -284,7 +284,7 @@ static int action_right_shader_num_passes(unsigned type, const char *label,
shader->passes++;
menu_entries_set_refresh(false);
menu_driver_ctl(RARCH_MENU_CTL_SET_PREVENT_POPULATE, NULL);
video_shader_resolve_parameters(NULL, menu->shader);
video_shader_resolve_parameters(NULL, shader);
#endif
return 0;

View File

@ -664,6 +664,14 @@ bool menu_driver_ctl(enum rarch_menu_ctl_state state, void *data)
menu_iterate_render(menu_driver_data,
menu_driver_data ? menu_driver_data->userdata : NULL);
break;
case RARCH_MENU_CTL_SHADER_GET:
{
struct video_shader **shader = (struct video_shader**)data;
if (!shader)
return false;
*shader = menu_driver_data ? menu_driver_data->shader : NULL;
}
return true;
case RARCH_MENU_CTL_FRAME:
if (!menu_driver_alive)
return false;

View File

@ -93,6 +93,7 @@ enum rarch_menu_ctl_state
{
RARCH_MENU_CTL_NONE = 0,
RARCH_MENU_CTL_DEINIT,
RARCH_MENU_CTL_SHADER_GET,
RARCH_MENU_CTL_RENDER,
RARCH_MENU_CTL_FRAME,
RARCH_MENU_CTL_SET_PREVENT_POPULATE,