mirror of
https://github.com/hrydgard/ppsspp.git
synced 2024-11-23 05:19:56 +00:00
Try to make Frame Advance a bit more reliable
This commit is contained in:
parent
476c69c675
commit
42914c3d7c
@ -715,16 +715,9 @@ void EmuScreen::onVKey(int virtualKeyCode, bool down) {
|
||||
break;
|
||||
|
||||
case VIRTKEY_FRAME_ADVANCE:
|
||||
if (!Achievements::WarnUserIfHardcoreModeActive(false)) {
|
||||
if (down) {
|
||||
// If game is running, pause emulation immediately. Otherwise, advance a single frame.
|
||||
if (Core_IsStepping()) {
|
||||
frameStep_ = true;
|
||||
Core_EnableStepping(false);
|
||||
} else if (!frameStep_) {
|
||||
Core_EnableStepping(true, "ui.frameAdvance", 0);
|
||||
}
|
||||
}
|
||||
// Can't do this reliably in an async fashion, so we just set a variable.
|
||||
if (down) {
|
||||
doFrameAdvance_.store(true);
|
||||
}
|
||||
break;
|
||||
|
||||
@ -1422,6 +1415,19 @@ ScreenRenderFlags EmuScreen::render(ScreenRenderMode mode) {
|
||||
|
||||
Core_UpdateDebugStats((DebugOverlay)g_Config.iDebugOverlay == DebugOverlay::DEBUG_STATS || g_Config.bLogFrameDrops);
|
||||
|
||||
if (doFrameAdvance_.exchange(false)) {
|
||||
if (!Achievements::WarnUserIfHardcoreModeActive(false)) {
|
||||
// If game is running, pause emulation immediately. Otherwise, advance a single frame.
|
||||
if (Core_IsStepping()) {
|
||||
frameStep_ = true;
|
||||
Core_EnableStepping(false);
|
||||
} else if (!frameStep_) {
|
||||
lastNumFlips = gpuStats.numFlips;
|
||||
Core_EnableStepping(true, "ui.frameAdvance", 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool blockedExecution = Achievements::IsBlockingExecution();
|
||||
uint32_t clearColor = 0;
|
||||
if (!blockedExecution) {
|
||||
|
@ -121,5 +121,7 @@ private:
|
||||
|
||||
std::string extraAssertInfoStr_;
|
||||
|
||||
std::atomic<bool> doFrameAdvance_{};
|
||||
|
||||
ControlMapper controlMapper_;
|
||||
};
|
||||
|
@ -205,7 +205,9 @@ void GameScreen::CreateViews() {
|
||||
rightColumnItems->SetSpacing(0.0f);
|
||||
rightColumn->Add(rightColumnItems);
|
||||
|
||||
rightColumnItems->Add(new Choice(ga->T("Play")))->OnClick.Handle(this, &GameScreen::OnPlay);
|
||||
if (!inGame_) {
|
||||
rightColumnItems->Add(new Choice(ga->T("Play")))->OnClick.Handle(this, &GameScreen::OnPlay);
|
||||
}
|
||||
|
||||
btnGameSettings_ = rightColumnItems->Add(new Choice(ga->T("Game Settings")));
|
||||
btnGameSettings_->OnClick.Handle(this, &GameScreen::OnGameSettings);
|
||||
|
Loading…
Reference in New Issue
Block a user