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) char *s2, size_t len2)
{ {
unsigned pass = 0; unsigned pass = 0;
menu_handle_t *menu = menu_driver_get_ptr(); #if defined(HAVE_CG) || defined(HAVE_GLSL) || defined(HAVE_HLSL)
if (!menu) struct video_shader *shader = NULL;
return; #endif
(void)pass; (void)pass;
(void)menu;
*s = '\0'; *s = '\0';
*w = 19; *w = 19;
strlcpy(s2, path, len2); strlcpy(s2, path, len2);
#if defined(HAVE_CG) || defined(HAVE_GLSL) || defined(HAVE_HLSL) #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; return;
pass = (type - MENU_SETTINGS_SHADER_PASS_FILTER_0); pass = (type - MENU_SETTINGS_SHADER_PASS_FILTER_0);
switch (menu->shader->pass[pass].filter) switch (shader->pass[pass].filter)
{ {
case 0: case 0:
strlcpy(s, menu_hash_to_str(MENU_VALUE_DONT_CARE), 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, const char *path,
char *s2, size_t len2) char *s2, size_t len2)
{ {
menu_handle_t *menu = menu_driver_get_ptr(); #if defined(HAVE_CG) || defined(HAVE_GLSL) || defined(HAVE_HLSL)
if (!menu) struct video_shader *shader = NULL;
return; #endif
(void)menu;
*s = '\0'; *s = '\0';
*w = 19; *w = 19;
strlcpy(s2, path, len2); strlcpy(s2, path, len2);
#if defined(HAVE_CG) || defined(HAVE_GLSL) || defined(HAVE_HLSL) #if defined(HAVE_CG) || defined(HAVE_GLSL) || defined(HAVE_HLSL)
if (menu && menu->shader) menu_driver_ctl(RARCH_MENU_CTL_SHADER_GET,
snprintf(s, len, "%u", menu->shader->passes); &shader);
if (shader)
snprintf(s, len, "%u", shader->passes);
#endif #endif
} }
@ -191,13 +192,12 @@ static void menu_action_setting_disp_set_label_shader_pass(
const char *path, const char *path,
char *s2, size_t len2) 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); unsigned pass = (type - MENU_SETTINGS_SHADER_PASS_0);
menu_handle_t *menu = menu_driver_get_ptr();
if (!menu)
return;
(void)pass; (void)pass;
(void)menu;
*s = '\0'; *s = '\0';
*w = 19; *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); strlcpy(s, menu_hash_to_str(MENU_VALUE_NOT_AVAILABLE), len);
#if defined(HAVE_CG) || defined(HAVE_GLSL) || defined(HAVE_HLSL) #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; return;
if (*menu->shader->pass[pass].source.path)
if (*shader->pass[pass].source.path)
fill_pathname_base(s, fill_pathname_base(s,
menu->shader->pass[pass].source.path, len); shader->pass[pass].source.path, len);
#endif #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, static int shader_action_parameter_preset_left(unsigned type, const char *label,
bool wraparound) bool wraparound)
{ {
menu_handle_t *menu = menu_driver_get_ptr(); struct video_shader_parameter *param = NULL;
struct video_shader *shader = menu ? menu->shader : NULL; struct video_shader *shader = NULL;
struct video_shader_parameter *param = &shader->parameters[type - MENU_SETTINGS_SHADER_PRESET_PARAMETER_0];
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); return generic_shader_action_parameter_left(shader, param, type, label, wraparound);
} }
#endif #endif
@ -172,13 +178,11 @@ static int action_left_shader_scale_pass(unsigned type, const char *label,
{ {
#ifdef HAVE_SHADER_MANAGER #ifdef HAVE_SHADER_MANAGER
unsigned pass = type - MENU_SETTINGS_SHADER_PASS_SCALE_0; 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; 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) if (!shader)
return -1; return -1;
shader_pass = &shader->pass[pass]; 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 #ifdef HAVE_SHADER_MANAGER
unsigned delta = 2; unsigned delta = 2;
unsigned pass = type - MENU_SETTINGS_SHADER_PASS_FILTER_0; unsigned pass = type - MENU_SETTINGS_SHADER_PASS_FILTER_0;
struct video_shader *shader = NULL; struct video_shader *shader = NULL;
struct video_shader_pass *shader_pass = 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) if (!shader)
return -1; return -1;
shader_pass = &shader->pass[pass]; 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 #ifdef HAVE_SHADER_MANAGER
struct video_shader *shader = NULL; 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) if (!shader)
return -1; return -1;
@ -267,7 +267,7 @@ static int action_left_shader_num_passes(unsigned type, const char *label,
shader->passes--; shader->passes--;
menu_entries_set_refresh(false); menu_entries_set_refresh(false);
menu_driver_ctl(RARCH_MENU_CTL_SET_PREVENT_POPULATE, NULL); menu_driver_ctl(RARCH_MENU_CTL_SET_PREVENT_POPULATE, NULL);
video_shader_resolve_parameters(NULL, menu->shader); video_shader_resolve_parameters(NULL, shader);
#endif #endif
return 0; return 0;

View File

@ -625,6 +625,7 @@ static int generic_action_ok(const char *path,
int ret = 0; int ret = 0;
const char *menu_path = NULL; const char *menu_path = NULL;
const char *flush_char = NULL; const char *flush_char = NULL;
struct video_shader *shader = NULL;
global_t *global = global_get_ptr(); global_t *global = global_get_ptr();
menu_handle_t *menu = menu_driver_get_ptr(); menu_handle_t *menu = menu_driver_get_ptr();
settings_t *settings = config_get_ptr(); settings_t *settings = config_get_ptr();
@ -632,6 +633,9 @@ static int generic_action_ok(const char *path,
if (!menu) if (!menu)
goto error; goto error;
menu_driver_ctl(RARCH_MENU_CTL_SHADER_GET,
&shader);
menu_entries_get_last_stack(&menu_path, NULL, menu_entries_get_last_stack(&menu_path, NULL,
NULL, NULL); NULL, NULL);
@ -691,16 +695,16 @@ static int generic_action_ok(const char *path,
break; break;
#ifdef HAVE_SHADER_MANAGER #ifdef HAVE_SHADER_MANAGER
case ACTION_OK_LOAD_PRESET: 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), video_shader_parse_type(action_path, RARCH_SHADER_NONE),
action_path); action_path);
break; break;
case ACTION_OK_LOAD_SHADER_PASS: case ACTION_OK_LOAD_SHADER_PASS:
strlcpy( strlcpy(
menu->shader->pass[hack_shader_pass].source.path, shader->pass[hack_shader_pass].source.path,
action_path, action_path,
sizeof(menu->shader->pass[hack_shader_pass].source.path)); sizeof(shader->pass[hack_shader_pass].source.path));
video_shader_resolve_parameters(NULL, menu->shader); video_shader_resolve_parameters(NULL, shader);
break; break;
#endif #endif
case ACTION_OK_LOAD_RECORD_CONFIGFILE: 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, int shader_action_parameter_preset_right(unsigned type, const char *label,
bool wraparound) bool wraparound)
{ {
menu_handle_t *menu = menu_driver_get_ptr(); struct video_shader_parameter *param = NULL;
struct video_shader *shader = menu ? menu->shader : NULL; struct video_shader *shader = NULL;
struct video_shader_parameter *param = &shader->parameters[type - MENU_SETTINGS_SHADER_PRESET_PARAMETER_0];
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); return generic_shader_action_parameter_right(shader, param, type, label, wraparound);
} }
#endif #endif
@ -190,13 +196,11 @@ static int action_right_shader_scale_pass(unsigned type, const char *label,
{ {
#ifdef HAVE_SHADER_MANAGER #ifdef HAVE_SHADER_MANAGER
unsigned pass = type - MENU_SETTINGS_SHADER_PASS_SCALE_0; 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; 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) if (!shader)
return -1; return -1;
shader_pass = &shader->pass[pass]; shader_pass = &shader->pass[pass];
@ -220,15 +224,13 @@ static int action_right_shader_filter_pass(unsigned type, const char *label,
bool wraparound) bool wraparound)
{ {
#ifdef HAVE_SHADER_MANAGER #ifdef HAVE_SHADER_MANAGER
unsigned pass = type - MENU_SETTINGS_SHADER_PASS_FILTER_0; unsigned pass = type - MENU_SETTINGS_SHADER_PASS_FILTER_0;
struct video_shader *shader = NULL; unsigned delta = 1;
struct video_shader *shader = NULL;
struct video_shader_pass *shader_pass = 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) if (!shader)
return -1; return -1;
shader_pass = &shader->pass[pass]; 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 #ifdef HAVE_SHADER_MANAGER
struct video_shader *shader = NULL; 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) if (!shader)
return -1; return -1;
@ -284,7 +284,7 @@ static int action_right_shader_num_passes(unsigned type, const char *label,
shader->passes++; shader->passes++;
menu_entries_set_refresh(false); menu_entries_set_refresh(false);
menu_driver_ctl(RARCH_MENU_CTL_SET_PREVENT_POPULATE, NULL); menu_driver_ctl(RARCH_MENU_CTL_SET_PREVENT_POPULATE, NULL);
video_shader_resolve_parameters(NULL, menu->shader); video_shader_resolve_parameters(NULL, shader);
#endif #endif
return 0; 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_iterate_render(menu_driver_data,
menu_driver_data ? menu_driver_data->userdata : NULL); menu_driver_data ? menu_driver_data->userdata : NULL);
break; 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: case RARCH_MENU_CTL_FRAME:
if (!menu_driver_alive) if (!menu_driver_alive)
return false; return false;

View File

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