Cleanup menu_shader.c

This commit is contained in:
twinaphex 2017-01-09 03:53:55 +01:00
parent 78608f4c46
commit 25decd033a
7 changed files with 76 additions and 110 deletions

View File

@ -279,10 +279,8 @@ static int action_left_shader_num_passes(unsigned type, const char *label,
{
#ifdef HAVE_SHADER_MANAGER
bool refresh = false;
struct video_shader *shader = NULL;
struct video_shader *shader = menu_shader_get();
menu_driver_ctl(RARCH_MENU_CTL_SHADER_GET,
&shader);
if (!shader)
return menu_cbs_exit();

View File

@ -36,6 +36,7 @@
#include "../widgets/menu_filebrowser.h"
#include "../widgets/menu_input_dialog.h"
#include "../menu_content.h"
#include "../menu_shader.h"
#include "../../core.h"
#include "../../configuration.h"
@ -1097,8 +1098,7 @@ static int generic_action_ok(const char *path,
#ifdef HAVE_SHADER_MANAGER
case ACTION_OK_LOAD_PRESET:
{
struct video_shader *shader = NULL;
menu_driver_ctl(RARCH_MENU_CTL_SHADER_GET, &shader);
struct video_shader *shader = menu_shader_get();
flush_char = msg_hash_to_str(flush_id);
menu_shader_manager_set_preset(shader,
video_shader_parse_type(action_path, RARCH_SHADER_NONE),
@ -1107,8 +1107,7 @@ static int generic_action_ok(const char *path,
break;
case ACTION_OK_LOAD_SHADER_PASS:
{
struct video_shader *shader = NULL;
menu_driver_ctl(RARCH_MENU_CTL_SHADER_GET, &shader);
struct video_shader *shader = menu_shader_get();
flush_char = msg_hash_to_str(flush_id);
strlcpy(
shader->pass[hack_shader_pass].source.path,

View File

@ -291,11 +291,9 @@ static int action_right_shader_num_passes(unsigned type, const char *label,
bool wraparound)
{
#ifdef HAVE_SHADER_MANAGER
bool refresh = false;
struct video_shader *shader = NULL;
bool refresh = false;
struct video_shader *shader = menu_shader_get();
menu_driver_ctl(RARCH_MENU_CTL_SHADER_GET,
&shader);
if (!shader)
return menu_cbs_exit();

View File

@ -182,9 +182,6 @@ static bool menu_init(menu_handle_t *menu_data)
if (!menu_entries_ctl(MENU_ENTRIES_CTL_INIT, NULL))
return false;
if (!menu_driver_ctl(RARCH_MENU_CTL_SHADER_INIT, NULL))
return false;
if (settings->menu_show_start_screen)
{
menu_dialog_push_pending(true, MENU_DIALOG_WELCOME);
@ -487,29 +484,6 @@ bool menu_driver_ctl(enum rarch_menu_ctl_state state, void *data)
menu_driver_data->state = 0;
break;
case RARCH_MENU_CTL_SHADER_DEINIT:
#ifdef HAVE_SHADER_MANAGER
if (menu_driver_shader)
free(menu_driver_shader);
menu_driver_shader = NULL;
#endif
break;
case RARCH_MENU_CTL_SHADER_INIT:
#ifdef HAVE_SHADER_MANAGER
menu_driver_shader = (struct video_shader*)
calloc(1, sizeof(struct video_shader));
if (!menu_driver_shader)
return false;
#endif
break;
case RARCH_MENU_CTL_SHADER_GET:
{
struct video_shader **shader = (struct video_shader**)data;
if (!shader)
return false;
*shader = menu_driver_shader;
}
break;
case RARCH_MENU_CTL_FRAME:
if (!menu_driver_alive)
return false;
@ -555,7 +529,8 @@ bool menu_driver_ctl(enum rarch_menu_ctl_state state, void *data)
if (menu_driver_ctl(RARCH_MENU_CTL_OWNS_DRIVER, NULL))
return true;
menu_driver_ctl(RARCH_MENU_CTL_PLAYLIST_FREE, NULL);
menu_driver_ctl(RARCH_MENU_CTL_SHADER_DEINIT, NULL);
menu_shader_manager_free();
if (menu_driver_data)
{
menu_input_ctl(MENU_INPUT_CTL_DEINIT, NULL);

View File

@ -96,9 +96,6 @@ enum rarch_menu_ctl_state
RARCH_MENU_CTL_SET_PENDING_SHUTDOWN,
RARCH_MENU_CTL_DEINIT,
RARCH_MENU_CTL_INIT,
RARCH_MENU_CTL_SHADER_DEINIT,
RARCH_MENU_CTL_SHADER_INIT,
RARCH_MENU_CTL_SHADER_GET,
RARCH_MENU_CTL_BLIT_RENDER,
RARCH_MENU_CTL_RENDER,
RARCH_MENU_CTL_RENDER_MESSAGEBOX,

View File

@ -37,14 +37,16 @@
static char default_glslp[PATH_MAX_LENGTH];
static char default_cgp[PATH_MAX_LENGTH];
static char default_slangp[PATH_MAX_LENGTH];
#endif
static struct video_shader *menu_driver_shader = NULL;
struct video_shader *menu_shader_get(void)
{
return menu_driver_shader;
}
struct video_shader_parameter *menu_shader_manager_get_parameters(unsigned i)
{
struct video_shader *shader = NULL;
menu_driver_ctl(RARCH_MENU_CTL_SHADER_GET,
&shader);
struct video_shader *shader = menu_shader_get();
if (!shader)
return NULL;
@ -54,10 +56,7 @@ struct video_shader_parameter *menu_shader_manager_get_parameters(unsigned i)
struct video_shader_pass *menu_shader_manager_get_pass(unsigned i)
{
struct video_shader *shader = NULL;
menu_driver_ctl(RARCH_MENU_CTL_SHADER_GET,
&shader);
struct video_shader *shader = menu_shader_get();
if (!shader)
return NULL;
@ -67,32 +66,57 @@ struct video_shader_pass *menu_shader_manager_get_pass(unsigned i)
unsigned menu_shader_manager_get_amount_passes(void)
{
struct video_shader *shader = NULL;
menu_driver_ctl(RARCH_MENU_CTL_SHADER_GET,
&shader);
struct video_shader *shader = menu_shader_get();
if (!shader)
return 0;
return shader->passes;
}
#else
struct video_shader *menu_shader_get(void)
{
return NULL;
}
struct video_shader_parameter *menu_shader_manager_get_parameters(unsigned i)
{
return NULL;
}
struct video_shader_pass *menu_shader_manager_get_pass(unsigned i)
{
return NULL;
}
unsigned menu_shader_manager_get_amount_passes(void) { return 0; }
#endif
void menu_shader_manager_free(void)
{
#ifdef HAVE_SHADER_MANAGER
if (menu_driver_shader)
free(menu_driver_shader);
menu_driver_shader = NULL;
#endif
}
/**
* menu_shader_manager_init:
*
* Initializes shader manager.
**/
void menu_shader_manager_init(void)
bool menu_shader_manager_init(void)
{
#ifdef HAVE_SHADER_MANAGER
struct video_shader *shader = NULL;
config_file_t *conf = NULL;
settings_t *settings = config_get_ptr();
const char *config_path = path_get(RARCH_PATH_CONFIG);
menu_driver_ctl(RARCH_MENU_CTL_SHADER_GET,
&shader);
menu_driver_shader = (struct video_shader*)
calloc(1, sizeof(struct video_shader));
if (!menu_driver_shader)
return false;
/* In a multi-config setting, we can't have
* conflicts on menu.cgp/menu.glslp. */
@ -129,11 +153,11 @@ void menu_shader_manager_init(void)
conf = config_file_new(settings->path.shader);
if (conf)
{
if (video_shader_read_conf_cgp(conf, shader))
if (video_shader_read_conf_cgp(conf, menu_driver_shader))
{
video_shader_resolve_relative(shader,
video_shader_resolve_relative(menu_driver_shader,
settings->path.shader);
video_shader_resolve_parameters(conf, shader);
video_shader_resolve_parameters(conf, menu_driver_shader);
}
config_file_free(conf);
}
@ -141,9 +165,9 @@ void menu_shader_manager_init(void)
case FILE_TYPE_SHADER_GLSL:
case FILE_TYPE_SHADER_CG:
case FILE_TYPE_SHADER_SLANG:
strlcpy(shader->pass[0].source.path, settings->path.shader,
sizeof(shader->pass[0].source.path));
shader->passes = 1;
strlcpy(menu_driver_shader->pass[0].source.path, settings->path.shader,
sizeof(menu_driver_shader->pass[0].source.path));
menu_driver_shader->passes = 1;
break;
default:
{
@ -174,10 +198,10 @@ void menu_shader_manager_init(void)
if (conf)
{
if (video_shader_read_conf_cgp(conf, shader))
if (video_shader_read_conf_cgp(conf, menu_driver_shader))
{
video_shader_resolve_relative(shader, preset_path);
video_shader_resolve_parameters(conf, shader);
video_shader_resolve_relative(menu_driver_shader, preset_path);
video_shader_resolve_parameters(conf, menu_driver_shader);
}
config_file_free(conf);
}
@ -185,6 +209,8 @@ void menu_shader_manager_init(void)
break;
}
#endif
return true;
}
/**
@ -259,14 +285,12 @@ bool menu_shader_manager_save_preset(
const char *dirs[3] = {0};
config_file_t *conf = NULL;
bool ret = false;
struct video_shader *shader = NULL;
struct video_shader *shader = menu_shader_get();
settings_t *settings = config_get_ptr();
buffer[0] = config_directory[0] = '\0';
preset_path[0] = '\0';
menu_driver_ctl(RARCH_MENU_CTL_SHADER_GET,
&shader);
if (!shader)
return false;
@ -402,13 +426,8 @@ int menu_shader_manager_clear_num_passes(void)
{
#ifdef HAVE_SHADER_MANAGER
bool refresh = false;
struct video_shader *shader = NULL;
struct video_shader *shader = menu_shader_get();
menu_driver_ctl(RARCH_MENU_CTL_SHADER_GET,
&shader);
if (!shader)
return -1;
if (shader->passes)
shader->passes = 0;
@ -437,15 +456,8 @@ int menu_shader_manager_clear_parameter(unsigned i)
int menu_shader_manager_clear_pass_filter(unsigned i)
{
#ifdef HAVE_SHADER_MANAGER
struct video_shader *shader = NULL;
struct video_shader_pass *shader_pass = NULL;
struct video_shader_pass *shader_pass = menu_shader_manager_get_pass(i);
menu_driver_ctl(RARCH_MENU_CTL_SHADER_GET,
&shader);
if (!shader)
return -1;
shader_pass = &shader->pass[i];
if (!shader_pass)
return -1;
@ -460,35 +472,21 @@ int menu_shader_manager_clear_pass_filter(unsigned i)
void menu_shader_manager_clear_pass_scale(unsigned i)
{
#ifdef HAVE_SHADER_MANAGER
struct video_shader *shader = NULL;
struct video_shader_pass *shader_pass = NULL;
struct video_shader_pass *shader_pass = menu_shader_manager_get_pass(i);
menu_driver_ctl(RARCH_MENU_CTL_SHADER_GET,
&shader);
if (!shader_pass)
return;
if (shader)
shader_pass = &shader->pass[i];
if (shader_pass)
{
shader_pass->fbo.scale_x = 0;
shader_pass->fbo.scale_y = 0;
shader_pass->fbo.valid = false;
}
shader_pass->fbo.scale_x = 0;
shader_pass->fbo.scale_y = 0;
shader_pass->fbo.valid = false;
#endif
}
void menu_shader_manager_clear_pass_path(unsigned i)
{
#ifdef HAVE_SHADER_MANAGER
struct video_shader *shader = NULL;
struct video_shader_pass *shader_pass = NULL;
menu_driver_ctl(RARCH_MENU_CTL_SHADER_GET,
&shader);
if (shader)
shader_pass = &shader->pass[i];
struct video_shader_pass *shader_pass = menu_shader_manager_get_pass(i);
if (shader_pass)
*shader_pass->source.path = '\0';
@ -548,10 +546,7 @@ void menu_shader_manager_apply_changes(void)
{
#ifdef HAVE_SHADER_MANAGER
unsigned shader_type;
struct video_shader *shader = NULL;
menu_driver_ctl(RARCH_MENU_CTL_SHADER_GET,
&shader);
struct video_shader *shader = menu_shader_get();
if (!shader)
return;

View File

@ -23,18 +23,22 @@
RETRO_BEGIN_DECLS
struct video_shader *menu_shader_get();
struct video_shader_parameter *menu_shader_manager_get_parameters(unsigned i);
struct video_shader_pass *menu_shader_manager_get_pass(unsigned i);
unsigned menu_shader_manager_get_amount_passes(void);
void menu_shader_manager_free(void);
/**
* menu_shader_manager_init:
*
* Initializes shader manager.
**/
void menu_shader_manager_init(void);
bool menu_shader_manager_init(void);
/**
* menu_shader_manager_set_preset: