FullscreenUI: Fix blank screen flicker starting game
Also returns to whichever menu the system boot was initiated from.
This commit is contained in:
parent
17b0da7283
commit
9d4789e082
|
@ -256,7 +256,6 @@ static void DoStartPath(std::string path, std::string state = std::string(),
|
|||
static void DoResume();
|
||||
static void DoStartFile();
|
||||
static void DoStartBIOS();
|
||||
static void DoStartDisc(std::string path);
|
||||
static void DoStartDisc();
|
||||
static void DoToggleFastForward();
|
||||
static void ConfirmIfSavingMemoryCards(std::string action, std::function<void(bool)> callback);
|
||||
|
@ -922,7 +921,7 @@ void FullscreenUI::Render()
|
|||
ImGuiFullscreen::UploadAsyncTextures();
|
||||
|
||||
// draw background before any overlays
|
||||
if (!GPUThread::HasGPUBackend())
|
||||
if (!GPUThread::HasGPUBackend() && s_state.current_main_window != MainWindowType::None)
|
||||
DrawBackground();
|
||||
|
||||
ImGuiFullscreen::BeginLayout();
|
||||
|
@ -1100,28 +1099,31 @@ void FullscreenUI::DoStartPath(std::string path, std::string state, std::optiona
|
|||
return;
|
||||
|
||||
// Switch to nothing, we'll get called back via OnSystemDestroyed() if startup fails.
|
||||
s_state.current_main_window = MainWindowType::None;
|
||||
const MainWindowType prev_main_window = std::exchange(s_state.current_main_window, MainWindowType::None);
|
||||
QueueResetFocus(FocusResetType::ViewChanged);
|
||||
UpdateRunIdleState();
|
||||
GPUThread::SetRunIdleReason(GPUThread::RunIdleReason::FullscreenUIActive, false);
|
||||
|
||||
SystemBootParameters params;
|
||||
params.filename = std::move(path);
|
||||
params.save_state = std::move(state);
|
||||
params.override_fast_boot = std::move(fast_boot);
|
||||
Host::RunOnCPUThread([params = std::move(params)]() {
|
||||
Host::RunOnCPUThread([params = std::move(params), prev_main_window]() {
|
||||
if (System::IsValid())
|
||||
return;
|
||||
|
||||
Error error;
|
||||
if (!System::BootSystem(std::move(params), &error))
|
||||
{
|
||||
GPUThread::RunOnThread([error_desc = error.TakeDescription()]() {
|
||||
GPUThread::RunOnThread([error_desc = error.TakeDescription(), prev_main_window]() {
|
||||
if (!IsInitialized())
|
||||
return;
|
||||
|
||||
OpenInfoMessageDialog(TRANSLATE_STR("System", "Error"),
|
||||
fmt::format(TRANSLATE_FS("System", "Failed to boot system: {}"), error_desc));
|
||||
ReturnToPreviousWindow();
|
||||
// ReturnToPreviousWindow();
|
||||
s_state.current_main_window = prev_main_window;
|
||||
QueueResetFocus(FocusResetType::ViewChanged);
|
||||
UpdateRunIdleState();
|
||||
});
|
||||
}
|
||||
});
|
||||
|
@ -1161,30 +1163,7 @@ void FullscreenUI::DoStartFile()
|
|||
|
||||
void FullscreenUI::DoStartBIOS()
|
||||
{
|
||||
DoStartDisc(std::string());
|
||||
}
|
||||
|
||||
void FullscreenUI::DoStartDisc(std::string path)
|
||||
{
|
||||
Host::RunOnCPUThread([path = std::move(path)]() mutable {
|
||||
if (System::IsValid())
|
||||
return;
|
||||
|
||||
Error error;
|
||||
SystemBootParameters params;
|
||||
params.filename = std::move(path);
|
||||
if (!System::BootSystem(std::move(params), &error))
|
||||
{
|
||||
GPUThread::RunOnThread([error_desc = error.TakeDescription()]() {
|
||||
if (!IsInitialized())
|
||||
return;
|
||||
|
||||
OpenInfoMessageDialog(TRANSLATE_STR("System", "Error"),
|
||||
fmt::format(TRANSLATE_FS("System", "Failed to boot system: {}"), error_desc));
|
||||
ReturnToPreviousWindow();
|
||||
});
|
||||
}
|
||||
});
|
||||
DoStartPath(std::string(), std::string(), std::nullopt);
|
||||
}
|
||||
|
||||
void FullscreenUI::DoStartDisc()
|
||||
|
@ -1201,7 +1180,7 @@ void FullscreenUI::DoStartDisc()
|
|||
// if there's only one, select it automatically
|
||||
if (devices.size() == 1)
|
||||
{
|
||||
DoStartDisc(std::move(devices.front().first));
|
||||
DoStartPath(std::move(devices.front().first), std::string(), std::nullopt);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1219,7 +1198,7 @@ void FullscreenUI::DoStartDisc()
|
|||
if (index < 0)
|
||||
return;
|
||||
|
||||
DoStartDisc(std::move(paths[index]));
|
||||
DoStartPath(std::move(paths[index]), std::string(), std::nullopt);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue