Don't do early return inside menu_shader_manager_init; free the

previously allocated menu shader first
This commit is contained in:
twinaphex 2017-03-23 19:15:14 +01:00
parent 76a53e75ad
commit 541c1b34e1

View File

@ -128,16 +128,15 @@ void menu_shader_manager_free(void) { }
bool menu_shader_manager_init(void) bool menu_shader_manager_init(void)
{ {
#ifdef HAVE_SHADER_MANAGER #ifdef HAVE_SHADER_MANAGER
config_file_t *conf = NULL;
settings_t *settings = config_get_ptr(); settings_t *settings = config_get_ptr();
const char *config_path = path_get(RARCH_PATH_CONFIG); const char *config_path = path_get(RARCH_PATH_CONFIG);
const char *path_shader = settings->path.shader;
/* menu shader already initialized */ menu_shader_manager_free();
if (menu_driver_shader)
return true;
menu_driver_shader = (struct video_shader*) menu_driver_shader = (struct video_shader*)
calloc(1, sizeof(struct video_shader)); calloc(1, sizeof(struct video_shader));
if (!menu_driver_shader) if (!menu_driver_shader)
return false; return false;
@ -168,36 +167,41 @@ bool menu_shader_manager_init(void)
} }
switch (msg_hash_to_file_type(msg_hash_calculate( switch (msg_hash_to_file_type(msg_hash_calculate(
path_get_extension(settings->path.shader)))) path_get_extension(path_shader))))
{ {
case FILE_TYPE_SHADER_PRESET_GLSLP: case FILE_TYPE_SHADER_PRESET_GLSLP:
case FILE_TYPE_SHADER_PRESET_CGP: case FILE_TYPE_SHADER_PRESET_CGP:
case FILE_TYPE_SHADER_PRESET_SLANGP: case FILE_TYPE_SHADER_PRESET_SLANGP:
conf = config_file_new(settings->path.shader);
if (conf)
{ {
if (video_shader_read_conf_cgp(conf, menu_driver_shader)) config_file_t *conf = config_file_new(path_shader);
if (conf)
{ {
video_shader_resolve_relative(menu_driver_shader, if (video_shader_read_conf_cgp(conf, menu_driver_shader))
settings->path.shader); {
video_shader_resolve_parameters(conf, menu_driver_shader); video_shader_resolve_relative(menu_driver_shader,
path_shader);
video_shader_resolve_parameters(conf, menu_driver_shader);
}
config_file_free(conf);
} }
config_file_free(conf);
} }
break; break;
case FILE_TYPE_SHADER_GLSL: case FILE_TYPE_SHADER_GLSL:
case FILE_TYPE_SHADER_CG: case FILE_TYPE_SHADER_CG:
case FILE_TYPE_SHADER_SLANG: case FILE_TYPE_SHADER_SLANG:
strlcpy(menu_driver_shader->pass[0].source.path, settings->path.shader, strlcpy(menu_driver_shader->pass[0].source.path, path_shader,
sizeof(menu_driver_shader->pass[0].source.path)); sizeof(menu_driver_shader->pass[0].source.path));
menu_driver_shader->passes = 1; menu_driver_shader->passes = 1;
break; break;
default: default:
{ {
char preset_path[PATH_MAX_LENGTH]; char preset_path[PATH_MAX_LENGTH];
config_file_t *conf = NULL;
const char *shader_dir = const char *shader_dir =
*settings->directory.video_shader ? *settings->directory.video_shader ?
settings->directory.video_shader : settings->directory.system; settings->directory.video_shader :
settings->directory.system;
preset_path[0] = '\0'; preset_path[0] = '\0';