Simplifications to dir_init_shader_internal

This commit is contained in:
twinaphex 2021-04-08 16:48:53 +02:00
parent 9ab6b9b308
commit d6c243143d

View File

@ -9538,20 +9538,19 @@ static void dir_free_shader(struct rarch_state *p_rarch,
#if defined(HAVE_CG) || defined(HAVE_GLSL) || defined(HAVE_SLANG) || defined(HAVE_HLSL) #if defined(HAVE_CG) || defined(HAVE_GLSL) || defined(HAVE_SLANG) || defined(HAVE_HLSL)
static bool dir_init_shader_internal( static bool dir_init_shader_internal(
struct rarch_state *p_rarch, struct rarch_state *p_rarch,
settings_t *settings,
const char *shader_dir, const char *shader_dir,
const char *shader_file_name, const char *shader_file_name,
bool show_hidden_files) bool show_hidden_files)
{ {
size_t i;
struct rarch_dir_shader_list *dir_list = (struct rarch_dir_shader_list*) struct rarch_dir_shader_list *dir_list = (struct rarch_dir_shader_list*)
&p_rarch->dir_shader_list; &p_rarch->dir_shader_list;
struct string_list *new_list = dir_list_new_special( struct string_list *new_list = dir_list_new_special(
shader_dir, DIR_LIST_SHADERS, NULL, show_hidden_files); shader_dir, DIR_LIST_SHADERS, NULL, show_hidden_files);
settings_t *settings = p_rarch->configuration_settings;
bool shader_remember_last_dir = settings->bools.video_shader_remember_last_dir; bool shader_remember_last_dir = settings->bools.video_shader_remember_last_dir;
bool search_file_name = shader_remember_last_dir && bool search_file_name = shader_remember_last_dir &&
!string_is_empty(shader_file_name); !string_is_empty(shader_file_name);
bool file_name_found = false;
size_t i;
if (!new_list) if (!new_list)
return false; return false;
@ -9570,29 +9569,30 @@ static bool dir_init_shader_internal(
dir_list->shader_loaded = false; dir_list->shader_loaded = false;
dir_list->remember_last_preset_dir = shader_remember_last_dir; dir_list->remember_last_preset_dir = shader_remember_last_dir;
for (i = 0; i < new_list->size; i++) if (search_file_name)
{ {
const char *file_path = new_list->elems[i].data; for (i = 0; i < new_list->size; i++)
if (string_is_empty(file_path))
continue;
RARCH_LOG("[Shaders]: %s \"%s\"\n",
msg_hash_to_str(MSG_FOUND_SHADER),
file_path);
/* If a shader file name has been provided,
* search the list for a match and set 'selection'
* index if found */
if (search_file_name && !file_name_found)
{ {
const char *file_name = path_basename(file_path); const char *file_name = NULL;
const char *file_path = new_list->elems[i].data;
if (string_is_empty(file_path))
continue;
/* If a shader file name has been provided,
* search the list for a match and set 'selection'
* index if found */
file_name = path_basename(file_path);
if (!string_is_empty(file_name) && if (!string_is_empty(file_name) &&
string_is_equal(file_name, shader_file_name)) string_is_equal(file_name, shader_file_name))
{ {
RARCH_LOG("[Shaders]: %s \"%s\"\n",
msg_hash_to_str(MSG_FOUND_SHADER),
file_path);
dir_list->selection = i; dir_list->selection = i;
file_name_found = true; break;
} }
} }
} }
@ -9600,9 +9600,10 @@ static bool dir_init_shader_internal(
return true; return true;
} }
static void dir_init_shader(struct rarch_state *p_rarch) static void dir_init_shader(
struct rarch_state *p_rarch,
settings_t *settings)
{ {
settings_t *settings = p_rarch->configuration_settings;
bool show_hidden_files = settings->bools.show_hidden_files; bool show_hidden_files = settings->bools.show_hidden_files;
bool shader_remember_last_dir = settings->bools.video_shader_remember_last_dir; bool shader_remember_last_dir = settings->bools.video_shader_remember_last_dir;
const char *directory_video_shader = settings->paths.directory_video_shader; const char *directory_video_shader = settings->paths.directory_video_shader;
@ -9610,7 +9611,8 @@ static void dir_init_shader(struct rarch_state *p_rarch)
const char *last_shader_preset_dir = NULL; const char *last_shader_preset_dir = NULL;
const char *last_shader_preset_file_name = NULL; const char *last_shader_preset_file_name = NULL;
#if defined(HAVE_MENU) #if defined(HAVE_MENU)
enum rarch_shader_type last_shader_preset_type = menu_driver_get_last_shader_preset_type(); menu_handle_t *menu = p_rarch->menu_driver_data;
enum rarch_shader_type last_shader_preset_type = menu ? menu->last_shader_selection.preset_type : RARCH_SHADER_NONE;
menu_driver_get_last_shader_preset_path( menu_driver_get_last_shader_preset_path(
&last_shader_preset_dir, &last_shader_preset_file_name); &last_shader_preset_dir, &last_shader_preset_file_name);
#else #else
@ -9624,22 +9626,28 @@ static void dir_init_shader(struct rarch_state *p_rarch)
if (shader_remember_last_dir && if (shader_remember_last_dir &&
(last_shader_preset_type != RARCH_SHADER_NONE) && (last_shader_preset_type != RARCH_SHADER_NONE) &&
!string_is_empty(last_shader_preset_dir) && !string_is_empty(last_shader_preset_dir) &&
dir_init_shader_internal(p_rarch, dir_init_shader_internal(
last_shader_preset_dir, p_rarch,
last_shader_preset_file_name, settings,
show_hidden_files)) last_shader_preset_dir,
last_shader_preset_file_name,
show_hidden_files))
return; return;
/* Try video shaders directory */ /* Try video shaders directory */
if (!string_is_empty(directory_video_shader) && if (!string_is_empty(directory_video_shader) &&
dir_init_shader_internal( dir_init_shader_internal(
p_rarch, directory_video_shader, NULL, show_hidden_files)) p_rarch,
settings,
directory_video_shader, NULL, show_hidden_files))
return; return;
/* Try config directory */ /* Try config directory */
if (!string_is_empty(directory_menu_config) && if (!string_is_empty(directory_menu_config) &&
dir_init_shader_internal( dir_init_shader_internal(
p_rarch, directory_menu_config, NULL, show_hidden_files)) p_rarch,
settings,
directory_menu_config, NULL, show_hidden_files))
return; return;
/* Try 'top level' directory containing main /* Try 'top level' directory containing main
@ -9651,7 +9659,9 @@ static void dir_init_shader(struct rarch_state *p_rarch)
if (!string_is_empty(rarch_config_directory)) if (!string_is_empty(rarch_config_directory))
dir_init_shader_internal( dir_init_shader_internal(
p_rarch, rarch_config_directory, NULL, show_hidden_files); p_rarch,
settings,
rarch_config_directory, NULL, show_hidden_files);
free(rarch_config_directory); free(rarch_config_directory);
} }
@ -9680,7 +9690,8 @@ static void dir_check_shader(struct rarch_state *p_rarch,
const char *set_shader_path = NULL; const char *set_shader_path = NULL;
bool dir_list_initialised = false; bool dir_list_initialised = false;
#if defined(HAVE_MENU) #if defined(HAVE_MENU)
enum rarch_shader_type last_shader_preset_type = menu_driver_get_last_shader_preset_type(); menu_handle_t *menu = p_rarch->menu_driver_data;
enum rarch_shader_type last_shader_preset_type = menu ? menu->last_shader_selection.preset_type : RARCH_SHADER_NONE;
menu_driver_get_last_shader_preset_path( menu_driver_get_last_shader_preset_path(
&last_shader_preset_dir, &last_shader_preset_file_name); &last_shader_preset_dir, &last_shader_preset_file_name);
#else #else
@ -9695,7 +9706,7 @@ static void dir_check_shader(struct rarch_state *p_rarch,
(last_shader_preset_type != RARCH_SHADER_NONE) && (last_shader_preset_type != RARCH_SHADER_NONE) &&
!string_is_equal(dir_list->directory, last_shader_preset_dir))) !string_is_equal(dir_list->directory, last_shader_preset_dir)))
{ {
dir_init_shader(p_rarch); dir_init_shader(p_rarch, settings);
dir_list_initialised = true; dir_list_initialised = true;
} }