- Add RARCH_CMD_CORE_INIT

- Change returntype of rarch_main_command to bool to indicate
success or failure at performing action - used by RARCH_CMD_CORE_INIT
This commit is contained in:
twinaphex 2014-10-05 19:13:03 +02:00
parent 2ba246bbb4
commit dda84be1ac
2 changed files with 69 additions and 50 deletions

View File

@ -123,6 +123,7 @@ enum basic_event
RARCH_CMD_CORE_INFO_DEINIT, RARCH_CMD_CORE_INFO_DEINIT,
RARCH_CMD_CORE_INFO_INIT, RARCH_CMD_CORE_INFO_INIT,
RARCH_CMD_CORE_DEINIT, RARCH_CMD_CORE_DEINIT,
RARCH_CMD_CORE_INIT,
RARCH_CMD_AUDIO_SET_BLOCKING_STATE, RARCH_CMD_AUDIO_SET_BLOCKING_STATE,
RARCH_CMD_AUDIO_SET_NONBLOCKING_STATE, RARCH_CMD_AUDIO_SET_NONBLOCKING_STATE,
RARCH_CMD_VIDEO_APPLY_STATE_CHANGES, RARCH_CMD_VIDEO_APPLY_STATE_CHANGES,
@ -812,7 +813,7 @@ void rarch_main_init_wrap(const struct rarch_main_wrap *args,
int *argc, char **argv); int *argc, char **argv);
int rarch_main_init(int argc, char *argv[]); int rarch_main_init(int argc, char *argv[]);
void rarch_main_set_state(unsigned action); void rarch_main_set_state(unsigned action);
void rarch_main_command(unsigned action); bool rarch_main_command(unsigned action);
int rarch_main_iterate(void); int rarch_main_iterate(void);
void rarch_main_deinit(void); void rarch_main_deinit(void);
void rarch_render_cached_frame(void); void rarch_render_cached_frame(void);

View File

@ -1832,12 +1832,6 @@ static void init_system_info(void)
g_extern.system.block_extract = info->block_extract; g_extern.system.block_extract = info->block_extract;
} }
static void init_system_av_info(void)
{
pretro_get_system_av_info(&g_extern.system.av_info);
g_extern.frame_limit.last_frame_time = rarch_get_time_usec();
}
static void verify_api_version(void) static void verify_api_version(void)
{ {
/* TODO - when libretro v2 gets added, allow for switching /* TODO - when libretro v2 gets added, allow for switching
@ -1876,6 +1870,12 @@ static void validate_cpu_features(void)
#endif #endif
} }
static void init_system_av_info(void)
{
pretro_get_system_av_info(&g_extern.system.av_info);
g_extern.frame_limit.last_frame_time = rarch_get_time_usec();
}
static void deinit_core(void) static void deinit_core(void)
{ {
pretro_unload_game(); pretro_unload_game();
@ -1886,6 +1886,48 @@ static void deinit_core(void)
uninit_libretro_sym(); uninit_libretro_sym();
} }
/*
* Returns:
* 0 - success
* 1 - error
*/
static bool init_core(void)
{
verify_api_version();
pretro_init();
g_extern.use_sram = !g_extern.libretro_dummy &&
!g_extern.libretro_no_content;
if (g_extern.libretro_no_content && !g_extern.libretro_dummy)
{
if (!init_content_file())
return false;
}
else if (!g_extern.libretro_dummy)
{
rarch_main_command(RARCH_CMD_SAVEFILES_INIT);
if (!init_content_file())
return false;
set_savestate_auto_index();
if (load_save_files())
RARCH_LOG("Skipping SRAM load.\n");
load_auto_state();
rarch_main_command(RARCH_CMD_BSV_MOVIE_INIT);
rarch_main_command(RARCH_CMD_NETPLAY_INIT);
}
retro_init_libretro_cbs(&driver.retro_ctx);
init_system_av_info();
return true;
}
int rarch_main_init(int argc, char *argv[]) int rarch_main_init(int argc, char *argv[])
{ {
int sjlj_ret; int sjlj_ret;
@ -1919,37 +1961,8 @@ int rarch_main_init(int argc, char *argv[])
init_drivers_pre(); init_drivers_pre();
verify_api_version(); if (!rarch_main_command(RARCH_CMD_CORE_INIT))
pretro_init();
g_extern.use_sram = !g_extern.libretro_dummy &&
!g_extern.libretro_no_content;
if (g_extern.libretro_no_content && !g_extern.libretro_dummy)
{
if (!init_content_file())
goto error; goto error;
}
else if (!g_extern.libretro_dummy)
{
rarch_main_command(RARCH_CMD_SAVEFILES_INIT);
if (!init_content_file())
goto error;
set_savestate_auto_index();
if (load_save_files())
RARCH_LOG("Skipping SRAM load.\n");
load_auto_state();
rarch_main_command(RARCH_CMD_BSV_MOVIE_INIT);
rarch_main_command(RARCH_CMD_NETPLAY_INIT);
}
retro_init_libretro_cbs(&driver.retro_ctx);
init_system_av_info();
rarch_main_command(RARCH_CMD_DRIVERS_INIT); rarch_main_command(RARCH_CMD_DRIVERS_INIT);
rarch_main_command(RARCH_CMD_COMMAND_INIT); rarch_main_command(RARCH_CMD_COMMAND_INIT);
@ -2134,7 +2147,7 @@ static void history_playlist_new(void)
g_settings.content_history_size); g_settings.content_history_size);
} }
void rarch_main_command(unsigned cmd) bool rarch_main_command(unsigned cmd)
{ {
bool boolean = false; bool boolean = false;
@ -2163,11 +2176,11 @@ void rarch_main_command(unsigned cmd)
/* Immutable - disallow savestate load when /* Immutable - disallow savestate load when
* we absolutely cannot change game state. */ * we absolutely cannot change game state. */
if (g_extern.bsv.movie) if (g_extern.bsv.movie)
return; return false;
#ifdef HAVE_NETPLAY #ifdef HAVE_NETPLAY
if (driver.netplay_data) if (driver.netplay_data)
return; return false;
#endif #endif
main_state(cmd); main_state(cmd);
break; break;
@ -2229,7 +2242,7 @@ void rarch_main_command(unsigned cmd)
case RARCH_CMD_REWIND_DEINIT: case RARCH_CMD_REWIND_DEINIT:
#ifdef HAVE_NETPLAY #ifdef HAVE_NETPLAY
if (driver.netplay_data) if (driver.netplay_data)
return; return false;
#endif #endif
if (g_extern.state_manager) if (g_extern.state_manager)
state_manager_free(g_extern.state_manager); state_manager_free(g_extern.state_manager);
@ -2260,18 +2273,17 @@ void rarch_main_command(unsigned cmd)
break; break;
case RARCH_CMD_AUDIO_STOP: case RARCH_CMD_AUDIO_STOP:
if (!driver.audio_data) if (!driver.audio_data)
return; return false;
if (!driver.audio->alive(driver.audio_data)) if (!driver.audio->alive(driver.audio_data))
return; return false;
driver.audio->stop(driver.audio_data); driver.audio->stop(driver.audio_data);
break; break;
case RARCH_CMD_AUDIO_START: case RARCH_CMD_AUDIO_START:
if (!driver.audio_data) if (!driver.audio_data)
return; return false;
if (driver.audio->alive(driver.audio_data)) if (driver.audio->alive(driver.audio_data))
return; return false;
if (!g_extern.audio_data.mute if (!g_extern.audio_data.mute
&& !driver.audio->start(driver.audio_data)) && !driver.audio->start(driver.audio_data))
@ -2325,7 +2337,7 @@ void rarch_main_command(unsigned cmd)
break; break;
case RARCH_CMD_RECORD_DEINIT: case RARCH_CMD_RECORD_DEINIT:
if (!driver.recording_data || !driver.recording) if (!driver.recording_data || !driver.recording)
return; return false;
if (driver.recording->finalize) if (driver.recording->finalize)
driver.recording->finalize(driver.recording_data); driver.recording->finalize(driver.recording_data);
@ -2372,6 +2384,10 @@ void rarch_main_command(unsigned cmd)
case RARCH_CMD_CORE_DEINIT: case RARCH_CMD_CORE_DEINIT:
deinit_core(); deinit_core();
break; break;
case RARCH_CMD_CORE_INIT:
if (!init_core())
return false;
break;
case RARCH_CMD_VIDEO_APPLY_STATE_CHANGES: case RARCH_CMD_VIDEO_APPLY_STATE_CHANGES:
if (driver.video_data && driver.video_poke if (driver.video_data && driver.video_poke
&& driver.video_poke->apply_state_changes) && driver.video_poke->apply_state_changes)
@ -2464,7 +2480,7 @@ void rarch_main_command(unsigned cmd)
{ {
unsigned i; unsigned i;
if (!*g_settings.video.shader_dir) if (!*g_settings.video.shader_dir)
return; return false;
g_extern.shader_dir.list = dir_list_new(g_settings.video.shader_dir, g_extern.shader_dir.list = dir_list_new(g_settings.video.shader_dir,
"cg|cgp|glsl|glslp", false); "cg|cgp|glsl|glslp", false);
@ -2472,7 +2488,7 @@ void rarch_main_command(unsigned cmd)
if (!g_extern.shader_dir.list || g_extern.shader_dir.list->size == 0) if (!g_extern.shader_dir.list || g_extern.shader_dir.list->size == 0)
{ {
rarch_main_command(RARCH_CMD_SHADER_DIR_DEINIT); rarch_main_command(RARCH_CMD_SHADER_DIR_DEINIT);
return; return false;
} }
g_extern.shader_dir.ptr = 0; g_extern.shader_dir.ptr = 0;
@ -2602,6 +2618,8 @@ void rarch_main_command(unsigned cmd)
} }
break; break;
} }
return true;
} }
void rarch_main_deinit(void) void rarch_main_deinit(void)