diff options
| author | Pokechu22 <Pokechu022@gmail.com> | 2021-02-08 16:10:57 -0800 |
|---|---|---|
| committer | Pokechu22 <Pokechu022@gmail.com> | 2021-05-07 15:42:17 -0700 |
| commit | 263ca79aaeef9d768a779738b7ce3bf2b3e610c7 (patch) | |
| tree | b9cd7e9108388ebe46eb4c14e0bfdd30e3ca6850 /Source/Core | |
| parent | 5ebe63b1752c02f762985f166422e7d1da4a6353 (diff) | |
Adjust FIFO player object ranges
A single object can be selected instead of 2 (it was already inclusive internally), and the maximum value is the highest number of objects in any frame (minus 1) to reduce jank when multiple frames are being played back.
Diffstat (limited to 'Source/Core')
| -rw-r--r-- | Source/Core/Core/FifoPlayer/FifoPlayer.cpp | 12 | ||||
| -rw-r--r-- | Source/Core/Core/FifoPlayer/FifoPlayer.h | 1 | ||||
| -rw-r--r-- | Source/Core/DolphinQt/FIFO/FIFOPlayerWindow.cpp | 10 |
3 files changed, 18 insertions, 5 deletions
diff --git a/Source/Core/Core/FifoPlayer/FifoPlayer.cpp b/Source/Core/Core/FifoPlayer/FifoPlayer.cpp index 880ef791a5..48b6b581d5 100644 --- a/Source/Core/Core/FifoPlayer/FifoPlayer.cpp +++ b/Source/Core/Core/FifoPlayer/FifoPlayer.cpp @@ -189,6 +189,18 @@ bool FifoPlayer::IsRunningWithFakeVideoInterfaceUpdates() const return m_File->ShouldGenerateFakeVIUpdates(); } +u32 FifoPlayer::GetMaxObjectCount() const +{ + u32 result = 0; + for (auto& frame : m_FrameInfo) + { + const u32 count = static_cast<u32>(frame.objectStarts.size()); + if (count > result) + result = count; + } + return result; +} + u32 FifoPlayer::GetFrameObjectCount() const { if (m_CurrentFrame < m_FrameInfo.size()) diff --git a/Source/Core/Core/FifoPlayer/FifoPlayer.h b/Source/Core/Core/FifoPlayer/FifoPlayer.h index 5302e8cfcb..0f326c3cdb 100644 --- a/Source/Core/Core/FifoPlayer/FifoPlayer.h +++ b/Source/Core/Core/FifoPlayer/FifoPlayer.h @@ -74,6 +74,7 @@ public: bool IsPlaying() const; FifoDataFile* GetFile() const { return m_File.get(); } + u32 GetMaxObjectCount() const; u32 GetFrameObjectCount() const; u32 GetCurrentFrameNum() const { return m_CurrentFrame; } const AnalyzedFrameInfo& GetAnalyzedFrameInfo(u32 frame) const { return m_FrameInfo[frame]; } diff --git a/Source/Core/DolphinQt/FIFO/FIFOPlayerWindow.cpp b/Source/Core/DolphinQt/FIFO/FIFOPlayerWindow.cpp index d88581b6f5..f888bb255d 100644 --- a/Source/Core/DolphinQt/FIFO/FIFOPlayerWindow.cpp +++ b/Source/Core/DolphinQt/FIFO/FIFOPlayerWindow.cpp @@ -298,16 +298,16 @@ void FIFOPlayerWindow::OnFIFOLoaded() { FifoDataFile* file = FifoPlayer::GetInstance().GetFile(); - auto object_count = FifoPlayer::GetInstance().GetFrameObjectCount(); + auto object_count = FifoPlayer::GetInstance().GetMaxObjectCount(); auto frame_count = file->GetFrameCount(); m_frame_range_to->setMaximum(frame_count); - m_object_range_to->setMaximum(object_count); + m_object_range_to->setMaximum(object_count - 1); m_frame_range_from->setValue(0); m_object_range_from->setValue(0); m_frame_range_to->setValue(frame_count); - m_object_range_to->setValue(object_count); + m_object_range_to->setValue(object_count - 1); UpdateInfo(); UpdateLimits(); @@ -336,8 +336,8 @@ void FIFOPlayerWindow::UpdateLimits() { m_frame_range_from->setMaximum(std::max(m_frame_range_to->value() - 1, 0)); m_frame_range_to->setMinimum(m_frame_range_from->value() + 1); - m_object_range_from->setMaximum(std::max(m_object_range_to->value() - 1, 0)); - m_object_range_to->setMinimum(m_object_range_from->value() + 1); + m_object_range_from->setMaximum(m_object_range_to->value()); + m_object_range_to->setMinimum(m_object_range_from->value()); } void FIFOPlayerWindow::UpdateControls() |
