mirror of
https://github.com/hrydgard/ppsspp.git
synced 2025-04-02 11:01:50 -04:00
UI: Keep rendering UI even while stepping.
This makes it possible to "get out" on mobile.
This commit is contained in:
parent
4cfc6ee272
commit
ca8677d262
3 changed files with 21 additions and 7 deletions
|
@ -225,7 +225,7 @@ void Core_RunLoop(GraphicsContext *ctx) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
while (!coreState && GetUIState() == UISTATE_INGAME) {
|
while ((coreState == CORE_RUNNING || coreState == CORE_STEPPING) && GetUIState() == UISTATE_INGAME) {
|
||||||
time_update();
|
time_update();
|
||||||
UpdateRunLoop();
|
UpdateRunLoop();
|
||||||
if (!windowHidden && !Core_IsStepping()) {
|
if (!windowHidden && !Core_IsStepping()) {
|
||||||
|
@ -264,8 +264,9 @@ void Core_SingleStep() {
|
||||||
|
|
||||||
static inline bool Core_WaitStepping() {
|
static inline bool Core_WaitStepping() {
|
||||||
std::unique_lock<std::mutex> guard(m_hStepMutex);
|
std::unique_lock<std::mutex> guard(m_hStepMutex);
|
||||||
|
// We only wait 16ms so that we can still draw UI or react to events.
|
||||||
if (!singleStepPending && coreState == CORE_STEPPING)
|
if (!singleStepPending && coreState == CORE_STEPPING)
|
||||||
m_StepCond.wait(guard);
|
m_StepCond.wait_for(guard, std::chrono::milliseconds(16));
|
||||||
|
|
||||||
bool result = singleStepPending;
|
bool result = singleStepPending;
|
||||||
singleStepPending = false;
|
singleStepPending = false;
|
||||||
|
@ -285,9 +286,13 @@ void Core_ProcessStepping() {
|
||||||
GPUStepping::SingleStep();
|
GPUStepping::SingleStep();
|
||||||
|
|
||||||
// We're not inside jit now, so it's safe to clear the breakpoints.
|
// We're not inside jit now, so it's safe to clear the breakpoints.
|
||||||
|
static int lastSteppingCounter = -1;
|
||||||
|
if (lastSteppingCounter != steppingCounter) {
|
||||||
CBreakPoints::ClearTemporaryBreakPoints();
|
CBreakPoints::ClearTemporaryBreakPoints();
|
||||||
host->UpdateDisassembly();
|
host->UpdateDisassembly();
|
||||||
host->UpdateMemView();
|
host->UpdateMemView();
|
||||||
|
lastSteppingCounter = steppingCounter;
|
||||||
|
}
|
||||||
|
|
||||||
// Need to check inside the lock to avoid races.
|
// Need to check inside the lock to avoid races.
|
||||||
bool doStep = Core_WaitStepping();
|
bool doStep = Core_WaitStepping();
|
||||||
|
|
|
@ -442,6 +442,10 @@ void PSP_RunLoopWhileState() {
|
||||||
// Run until CORE_NEXTFRAME
|
// Run until CORE_NEXTFRAME
|
||||||
while (coreState == CORE_RUNNING || coreState == CORE_STEPPING) {
|
while (coreState == CORE_RUNNING || coreState == CORE_STEPPING) {
|
||||||
PSP_RunLoopFor(blockTicks);
|
PSP_RunLoopFor(blockTicks);
|
||||||
|
if (coreState == CORE_STEPPING) {
|
||||||
|
// Keep the UI responsive.
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1230,8 +1230,13 @@ void EmuScreen::render() {
|
||||||
// set back to running for the next frame
|
// set back to running for the next frame
|
||||||
coreState = CORE_RUNNING;
|
coreState = CORE_RUNNING;
|
||||||
} else if (coreState == CORE_STEPPING) {
|
} else if (coreState == CORE_STEPPING) {
|
||||||
// If we're stepping, it's convenient not to clear the screen.
|
// If we're stepping, it's convenient not to clear the screen entirely, so we copy display to output.
|
||||||
thin3d->BindFramebufferAsRenderTarget(nullptr, { RPAction::KEEP, RPAction::DONT_CARE, RPAction::DONT_CARE });
|
// This won't work in non-buffered, but that's fine.
|
||||||
|
thin3d->BindFramebufferAsRenderTarget(nullptr, { RPAction::CLEAR, RPAction::DONT_CARE, RPAction::DONT_CARE });
|
||||||
|
// Just to make sure.
|
||||||
|
if (PSP_IsInited()) {
|
||||||
|
gpu->CopyDisplayToOutput();
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// Didn't actually reach the end of the frame, ran out of the blockTicks cycles.
|
// Didn't actually reach the end of the frame, ran out of the blockTicks cycles.
|
||||||
// In this case we need to bind and wipe the backbuffer, at least.
|
// In this case we need to bind and wipe the backbuffer, at least.
|
||||||
|
|
Loading…
Add table
Reference in a new issue