diff --git a/command_event.c b/command_event.c index e59bd4c9c3..deedb4020c 100644 --- a/command_event.c +++ b/command_event.c @@ -1398,34 +1398,13 @@ bool event_command(enum event_command cmd) #endif break; case EVENT_CMD_SHADER_DIR_DEINIT: - if (!global) - break; - - dir_list_free(global->dir.shader_dir.list); - global->dir.shader_dir.list = NULL; - global->dir.shader_dir.ptr = 0; + shader_dir_free(); break; case EVENT_CMD_SHADER_DIR_INIT: event_command(EVENT_CMD_SHADER_DIR_DEINIT); - if (!*settings->video.shader_dir) + if (!shader_dir_init()) return false; - - global->dir.shader_dir.list = dir_list_new_special(NULL, DIR_LIST_SHADERS, NULL); - - if (!global->dir.shader_dir.list || global->dir.shader_dir.list->size == 0) - { - event_command(EVENT_CMD_SHADER_DIR_DEINIT); - return false; - } - - global->dir.shader_dir.ptr = 0; - dir_list_sort(global->dir.shader_dir.list, false); - - for (i = 0; i < global->dir.shader_dir.list->size; i++) - RARCH_LOG("%s \"%s\"\n", - msg_hash_to_str(MSG_FOUND_SHADER), - global->dir.shader_dir.list->elems[i].data); break; case EVENT_CMD_SAVEFILES: event_save_files(); diff --git a/runloop.c b/runloop.c index a4412bf891..dec4d9d260 100644 --- a/runloop.c +++ b/runloop.c @@ -40,6 +40,7 @@ #include "retroarch.h" #include "runloop.h" #include "rewind.h" +#include "dir_list_special.h" #include "audio/audio_driver.h" #include "msg_hash.h" @@ -290,6 +291,45 @@ static void check_stateslots(settings_t *settings, #define SHADER_EXT_CG 0x0059776fU #define SHADER_EXT_CGP 0x0b8865bfU +void shader_dir_free(void) +{ + global_t *global = global_get_ptr(); + + if (!global) + return; + + dir_list_free(global->dir.shader_dir.list); + global->dir.shader_dir.list = NULL; + global->dir.shader_dir.ptr = 0; +} + +bool shader_dir_init(void) +{ + unsigned i; + global_t *global = global_get_ptr(); + settings_t *settings = config_get_ptr(); + + if (!*settings->video.shader_dir) + return false; + + global->dir.shader_dir.list = dir_list_new_special(NULL, DIR_LIST_SHADERS, NULL); + + if (!global->dir.shader_dir.list || global->dir.shader_dir.list->size == 0) + { + event_command(EVENT_CMD_SHADER_DIR_DEINIT); + return false; + } + + global->dir.shader_dir.ptr = 0; + dir_list_sort(global->dir.shader_dir.list, false); + + for (i = 0; i < global->dir.shader_dir.list->size; i++) + RARCH_LOG("%s \"%s\"\n", + msg_hash_to_str(MSG_FOUND_SHADER), + global->dir.shader_dir.list->elems[i].data); + return true; +} + /** * check_shader_dir: * @pressed_next : was next shader key pressed? diff --git a/runloop.h b/runloop.h index c9573ecf64..282a00956c 100644 --- a/runloop.h +++ b/runloop.h @@ -300,6 +300,10 @@ const char *rarch_main_msg_queue_pull(void); bool *runloop_perfcnt_enabled(void); +void shader_dir_free(void); + +bool shader_dir_init(void); + bool runloop_ctl(enum runloop_ctl_state state, void *data); typedef int (*transfer_cb_t)(void *data, size_t len);