Capture the actual current frame number when opening the rewind selector

pull/3590/head
mariobob 7 days ago
parent e79e699dd3
commit 6a8251d62a

@ -1644,8 +1644,9 @@ void ImGuiManager::RenderRewindSelector()
// Display state info for current selection
const auto& current_state = states[current_index];
const u32 frame_diff = (states.empty() || current_index == 0) ?
0 : (states[0].frame_number - current_state.frame_number);
const u32 current_frame = System::Internal::GetRewindSelectorCurrentFrame();
const u32 frame_diff = (states.empty() || current_state.frame_number >= current_frame) ?
0 : (current_frame - current_state.frame_number);
const float seconds_ago = frame_diff / System::GetVideoFrameRate();
ImGui::Text("Frame: %u", current_state.frame_number);

@ -307,6 +307,7 @@ struct ALIGN_TO_CACHE_LINE StateVars
bool rewind_selector_open = false;
bool was_paused_before_rewind_selector = false;
size_t rewind_selector_index = 0;
u32 rewind_selector_current_frame = 0;
std::vector<System::RewindStateInfo> rewind_selector_states;
const BIOS::ImageInfo* bios_image_info = nullptr;
@ -3773,8 +3774,9 @@ void System::SetRewindState(bool enabled)
{
if (!IsRewindStateSelectorOpen())
{
GPUThread::RunOnThread([]() {
System::OpenRewindStateSelector();
const u32 current_frame = System::GetFrameNumber();
GPUThread::RunOnThread([current_frame]() {
System::OpenRewindStateSelector(current_frame);
});
}
else
@ -5292,12 +5294,13 @@ void System::CleanupRewindStates()
INFO_LOG("Cleaned up {} rewind state director{}", cleaned_dirs, (cleaned_dirs == 1) ? "y" : "ies");
}
void System::OpenRewindStateSelector()
void System::OpenRewindStateSelector(u32 current_frame_number)
{
if (!IsValid() || !g_settings.rewind_enable || !g_settings.rewind_use_save_states)
return;
s_state.rewind_selector_open = true;
s_state.rewind_selector_current_frame = current_frame_number;
s_state.rewind_selector_states = GetAvailableRewindStates();
s_state.rewind_selector_index = 0;
@ -5352,6 +5355,11 @@ size_t& GetRewindSelectorIndex()
return s_state.rewind_selector_index;
}
u32 GetRewindSelectorCurrentFrame()
{
return s_state.rewind_selector_current_frame;
}
} // namespace System::Internal
bool System::IsRunaheadActive()

@ -382,7 +382,7 @@ void DeleteRewindStatesAfter(u32 frame_number);
void CleanupRewindStates();
/// Opens the rewind state selector UI.
void OpenRewindStateSelector();
void OpenRewindStateSelector(u32 current_frame_number);
/// Closes the rewind state selector UI.
void CloseRewindStateSelector();
@ -495,6 +495,9 @@ const std::vector<RewindStateInfo>& GetRewindSelectorStates();
/// Returns a reference to the rewind selector index (for UI rendering).
size_t& GetRewindSelectorIndex();
/// Returns the current frame number when the rewind selector was opened.
u32 GetRewindSelectorCurrentFrame();
} // namespace Internal
} // namespace System

Loading…
Cancel
Save