diff --git a/general.h b/general.h index 2fe351c426..b03d2282c3 100644 --- a/general.h +++ b/general.h @@ -596,14 +596,17 @@ struct global bool exec; - /* Rewind support. */ - state_manager_t *state_manager; - size_t state_size; - bool frame_is_reverse; - - /* Movie playback/recording support. */ struct { + /* Rewind support. */ + state_manager_t *state; + size_t size; + bool frame_is_reverse; + } rewind; + + struct + { + /* Movie playback/recording support. */ bsv_movie_t *movie; char movie_path[PATH_MAX_LENGTH]; bool movie_playback; diff --git a/gfx/drivers_shader/shader_gl_cg.c b/gfx/drivers_shader/shader_gl_cg.c index 19ad05c124..324f4b12f6 100644 --- a/gfx/drivers_shader/shader_gl_cg.c +++ b/gfx/drivers_shader/shader_gl_cg.c @@ -247,13 +247,13 @@ static void gl_cg_set_params(void *data, unsigned width, unsigned height, set_param_2f(cg->prg[cg->active_idx].tex_size_f, tex_width, tex_height); set_param_2f(cg->prg[cg->active_idx].out_size_f, out_width, out_height); set_param_1f(cg->prg[cg->active_idx].frame_dir_f, - g_extern.frame_is_reverse ? -1.0 : 1.0); + g_extern.rewind.frame_is_reverse ? -1.0 : 1.0); set_param_2f(cg->prg[cg->active_idx].vid_size_v, width, height); set_param_2f(cg->prg[cg->active_idx].tex_size_v, tex_width, tex_height); set_param_2f(cg->prg[cg->active_idx].out_size_v, out_width, out_height); set_param_1f(cg->prg[cg->active_idx].frame_dir_v, - g_extern.frame_is_reverse ? -1.0 : 1.0); + g_extern.rewind.frame_is_reverse ? -1.0 : 1.0); if (cg->prg[cg->active_idx].frame_cnt_f || cg->prg[cg->active_idx].frame_cnt_v) { diff --git a/gfx/drivers_shader/shader_glsl.c b/gfx/drivers_shader/shader_glsl.c index bf9061d568..dad7aa5c5a 100644 --- a/gfx/drivers_shader/shader_glsl.c +++ b/gfx/drivers_shader/shader_glsl.c @@ -982,7 +982,7 @@ static void gl_glsl_set_params(void *data, unsigned width, unsigned height, } if (uni->frame_direction >= 0) - glUniform1i(uni->frame_direction, g_extern.frame_is_reverse ? -1 : 1); + glUniform1i(uni->frame_direction, g_extern.rewind.frame_is_reverse ? -1 : 1); for (i = 0; i < glsl->glsl_shader->luts; i++) diff --git a/gfx/drivers_shader/shader_hlsl.c b/gfx/drivers_shader/shader_hlsl.c index 6e046abd65..37a2a13cef 100644 --- a/gfx/drivers_shader/shader_hlsl.c +++ b/gfx/drivers_shader/shader_hlsl.c @@ -130,13 +130,13 @@ static void hlsl_set_params(void *data, unsigned width, unsigned height, set_param_2f(hlsl->prg[hlsl->active_idx].tex_size_f, tex_size, hlsl->prg[hlsl->active_idx].f_ctable); set_param_2f(hlsl->prg[hlsl->active_idx].out_size_f, out_size, hlsl->prg[hlsl->active_idx].f_ctable); set_param_1f(hlsl->prg[hlsl->active_idx].frame_cnt_f, frame_cnt, hlsl->prg[hlsl->active_idx].f_ctable); - set_param_1f(hlsl->prg[hlsl->active_idx].frame_dir_f, g_extern.frame_is_reverse ? -1.0 : 1.0, hlsl->prg[hlsl->active_idx].f_ctable); + set_param_1f(hlsl->prg[hlsl->active_idx].frame_dir_f, g_extern.rewind.frame_is_reverse ? -1.0 : 1.0, hlsl->prg[hlsl->active_idx].f_ctable); set_param_2f(hlsl->prg[hlsl->active_idx].vid_size_v, ori_size, hlsl->prg[hlsl->active_idx].v_ctable); set_param_2f(hlsl->prg[hlsl->active_idx].tex_size_v, tex_size, hlsl->prg[hlsl->active_idx].v_ctable); set_param_2f(hlsl->prg[hlsl->active_idx].out_size_v, out_size, hlsl->prg[hlsl->active_idx].v_ctable); set_param_1f(hlsl->prg[hlsl->active_idx].frame_cnt_v, frame_cnt, hlsl->prg[hlsl->active_idx].v_ctable); - set_param_1f(hlsl->prg[hlsl->active_idx].frame_dir_v, g_extern.frame_is_reverse ? -1.0 : 1.0, hlsl->prg[hlsl->active_idx].v_ctable); + set_param_1f(hlsl->prg[hlsl->active_idx].frame_dir_v, g_extern.rewind.frame_is_reverse ? -1.0 : 1.0, hlsl->prg[hlsl->active_idx].v_ctable); /* TODO - set lookup textures/FBO textures/state parameters/etc */ } diff --git a/libretro_version_1.c b/libretro_version_1.c index 3421a38125..6fe7216847 100644 --- a/libretro_version_1.c +++ b/libretro_version_1.c @@ -687,7 +687,7 @@ void retro_init_libretro_cbs(void *data) **/ void retro_set_rewind_callbacks(void) { - if (g_extern.frame_is_reverse) + if (g_extern.rewind.frame_is_reverse) { pretro_set_audio_sample(audio_sample_rewind); pretro_set_audio_sample_batch(audio_sample_batch_rewind); diff --git a/retroarch.c b/retroarch.c index f888a80c06..93feb6d270 100644 --- a/retroarch.c +++ b/retroarch.c @@ -895,7 +895,7 @@ static void init_rewind(void) return; #endif - if (!g_settings.rewind_enable || g_extern.state_manager) + if (!g_settings.rewind_enable || g_extern.rewind.state) return; if (g_extern.system.audio_callback.callback) @@ -904,9 +904,9 @@ static void init_rewind(void) return; } - g_extern.state_size = pretro_serialize_size(); + g_extern.rewind.size = pretro_serialize_size(); - if (!g_extern.state_size) + if (!g_extern.rewind.size) { RARCH_ERR(RETRO_LOG_REWIND_INIT_FAILED_NO_SAVESTATES); return; @@ -915,15 +915,15 @@ static void init_rewind(void) RARCH_LOG(RETRO_MSG_REWIND_INIT "%u MB\n", (unsigned)(g_settings.rewind_buffer_size / 1000000)); - g_extern.state_manager = state_manager_new(g_extern.state_size, + g_extern.rewind.state = state_manager_new(g_extern.rewind.size, g_settings.rewind_buffer_size); - if (!g_extern.state_manager) + if (!g_extern.rewind.state) RARCH_WARN(RETRO_LOG_REWIND_INIT_FAILED); - state_manager_push_where(g_extern.state_manager, &state); - pretro_serialize(state, g_extern.state_size); - state_manager_push_do(g_extern.state_manager); + state_manager_push_where(g_extern.rewind.state, &state); + pretro_serialize(state, g_extern.rewind.size); + state_manager_push_do(g_extern.rewind.state); } static void init_movie(void) @@ -2279,9 +2279,9 @@ bool rarch_main_command(unsigned cmd) if (driver.netplay_data) return false; #endif - if (g_extern.state_manager) - state_manager_free(g_extern.state_manager); - g_extern.state_manager = NULL; + if (g_extern.rewind.state) + state_manager_free(g_extern.rewind.state); + g_extern.rewind.state = NULL; break; case RARCH_CMD_REWIND_INIT: init_rewind(); diff --git a/runloop.c b/runloop.c index 8c4f316ca4..fe4c3cd2e7 100644 --- a/runloop.c +++ b/runloop.c @@ -220,14 +220,14 @@ static void check_rewind(bool pressed) { static bool first = true; - if (g_extern.frame_is_reverse) + if (g_extern.rewind.frame_is_reverse) { /* We just rewound. Flush rewind audio buffer. */ retro_flush_audio(g_extern.audio_data.rewind_buf + g_extern.audio_data.rewind_ptr, g_extern.audio_data.rewind_size - g_extern.audio_data.rewind_ptr); - g_extern.frame_is_reverse = false; + g_extern.rewind.frame_is_reverse = false; } if (first) @@ -236,7 +236,7 @@ static void check_rewind(bool pressed) return; } - if (!g_extern.state_manager) + if (!g_extern.rewind.state) return; if (pressed) @@ -244,14 +244,14 @@ static void check_rewind(bool pressed) const void *buf = NULL; msg_queue_clear(g_extern.msg_queue); - if (state_manager_pop(g_extern.state_manager, &buf)) + if (state_manager_pop(g_extern.rewind.state, &buf)) { - g_extern.frame_is_reverse = true; + g_extern.rewind.frame_is_reverse = true; setup_rewind_audio(); msg_queue_push(g_extern.msg_queue, RETRO_MSG_REWINDING, 0, g_extern.is_paused ? 1 : 30); - pretro_unserialize(buf, g_extern.state_size); + pretro_unserialize(buf, g_extern.rewind.size); if (g_extern.bsv.movie) bsv_movie_frame_rewind(g_extern.bsv.movie); @@ -270,14 +270,14 @@ static void check_rewind(bool pressed) if ((cnt == 0) || g_extern.bsv.movie) { void *state = NULL; - state_manager_push_where(g_extern.state_manager, &state); + state_manager_push_where(g_extern.rewind.state, &state); RARCH_PERFORMANCE_INIT(rewind_serialize); RARCH_PERFORMANCE_START(rewind_serialize); - pretro_serialize(state, g_extern.state_size); + pretro_serialize(state, g_extern.rewind.size); RARCH_PERFORMANCE_STOP(rewind_serialize); - state_manager_push_do(g_extern.state_manager); + state_manager_push_do(g_extern.rewind.state); } } @@ -301,7 +301,7 @@ static void check_slowmotion(bool pressed) rarch_render_cached_frame(); msg_queue_clear(g_extern.msg_queue); - msg_queue_push(g_extern.msg_queue, g_extern.frame_is_reverse ? + msg_queue_push(g_extern.msg_queue, g_extern.rewind.frame_is_reverse ? "Slow motion rewind." : "Slow motion.", 0, 30); }