From acd719448e1fc4f439e731c221d848e904daa555 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Sat, 30 Dec 2023 15:18:56 +0100 Subject: [PATCH 1/3] Wrap g_Config.bRunBehindPauseMenu behind a function, so we can add conditions --- Core/Core.cpp | 4 ++++ Core/Core.h | 2 ++ UI/EmuScreen.cpp | 6 +++--- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/Core/Core.cpp b/Core/Core.cpp index ef7ca4e94d..8f91a41a4c 100644 --- a/Core/Core.cpp +++ b/Core/Core.cpp @@ -102,6 +102,10 @@ void Core_Stop() { } } +bool Core_ShouldRunBehind() { + return g_Config.bRunBehindPauseMenu; +} + bool Core_IsStepping() { return coreState == CORE_STEPPING || coreState == CORE_POWERDOWN; } diff --git a/Core/Core.h b/Core/Core.h index 42caf85996..dfa7a41a42 100644 --- a/Core/Core.h +++ b/Core/Core.h @@ -37,6 +37,8 @@ void Core_SetGraphicsContext(GraphicsContext *ctx); // called from gui void Core_EnableStepping(bool step, const char *reason = nullptr, u32 relatedAddress = 0); +bool Core_ShouldRunBehind(); + bool Core_NextFrame(); void Core_DoSingleStep(); void Core_UpdateSingleStep(); diff --git a/UI/EmuScreen.cpp b/UI/EmuScreen.cpp index 92a62d95a9..e9b95e2e29 100644 --- a/UI/EmuScreen.cpp +++ b/UI/EmuScreen.cpp @@ -1448,11 +1448,11 @@ static void DrawFPS(UIContext *ctx, const Bounds &bounds) { bool EmuScreen::canBeBackground(bool isTop) const { if (g_Config.bSkipBufferEffects) { - return isTop || (g_Config.bTransparentBackground && g_Config.bRunBehindPauseMenu); + return isTop || (g_Config.bTransparentBackground && Core_ShouldRunBehind()); } if (!g_Config.bTransparentBackground && !isTop) { - if (g_Config.bRunBehindPauseMenu || screenManager()->topScreen()->wantBrightBackground()) + if (Core_ShouldRunBehind() || screenManager()->topScreen()->wantBrightBackground()) return true; return false; } @@ -1513,7 +1513,7 @@ ScreenRenderFlags EmuScreen::render(ScreenRenderMode mode) { if (mode & ScreenRenderMode::TOP) { System_Notify(SystemNotification::KEEP_SCREEN_AWAKE); - } else if (!g_Config.bRunBehindPauseMenu && strcmp(screenManager()->topScreen()->tag(), "DevMenu") != 0) { + } else if (!Core_ShouldRunBehind() && strcmp(screenManager()->topScreen()->tag(), "DevMenu") != 0) { // Not on top. Let's not execute, only draw the image. draw->BindFramebufferAsRenderTarget(nullptr, { RPAction::CLEAR, RPAction::DONT_CARE, RPAction::DONT_CARE }, "EmuScreen_Stepping"); // Just to make sure. From 8228e594235de16d32489f63b6b1724b91ff2dfe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Sat, 30 Dec 2023 15:31:59 +0100 Subject: [PATCH 2/3] Check if multiplayer if connected, enforce run-behind if so --- Core/Core.cpp | 4 +++- Core/HLE/sceNetAdhoc.cpp | 3 +++ Core/HLE/sceNetAdhoc.h | 2 ++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/Core/Core.cpp b/Core/Core.cpp index 8f91a41a4c..ac73473663 100644 --- a/Core/Core.cpp +++ b/Core/Core.cpp @@ -41,6 +41,7 @@ #include "Core/Debugger/Breakpoints.h" #include "Core/HW/Display.h" #include "Core/MIPS/MIPS.h" +#include "Core/HLE/sceNetAdhoc.h" #include "GPU/Debugger/Stepping.h" #ifdef _WIN32 @@ -103,7 +104,8 @@ void Core_Stop() { } bool Core_ShouldRunBehind() { - return g_Config.bRunBehindPauseMenu; + // Enforce run-behind if ad-hoc connected + return g_Config.bRunBehindPauseMenu || __NetAdhocConnected(); } bool Core_IsStepping() { diff --git a/Core/HLE/sceNetAdhoc.cpp b/Core/HLE/sceNetAdhoc.cpp index 00b624a67b..f4016884ce 100644 --- a/Core/HLE/sceNetAdhoc.cpp +++ b/Core/HLE/sceNetAdhoc.cpp @@ -126,6 +126,9 @@ static int sceNetAdhocPdpCreate(const char* mac, int port, int bufferSize, u32 f static int sceNetAdhocPdpSend(int id, const char* mac, u32 port, void* data, int len, int timeout, int flag); static int sceNetAdhocPdpRecv(int id, void* addr, void* port, void* buf, void* dataLength, u32 timeout, int flag); +bool __NetAdhocConnected() { + return netAdhocInited && netAdhocctlInited && adhocctlState == ADHOCCTL_STATE_CONNECTED; +} void __NetAdhocShutdown() { // Kill AdhocServer Thread diff --git a/Core/HLE/sceNetAdhoc.h b/Core/HLE/sceNetAdhoc.h index db9bec3b33..1ea5421980 100644 --- a/Core/HLE/sceNetAdhoc.h +++ b/Core/HLE/sceNetAdhoc.h @@ -104,6 +104,8 @@ void __NetAdhocDoState(PointerWrap &p); void __UpdateAdhocctlHandlers(u32 flags, u32 error); void __UpdateMatchingHandler(const MatchingArgs ¶ms); +bool __NetAdhocConnected(); + // I have to call this from netdialog int sceNetAdhocctlGetState(u32 ptrToStatus); int sceNetAdhocctlCreate(const char * groupName); From 23a253dbb55e3358435c855f9e4917315d8e61e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Sat, 30 Dec 2023 21:50:10 +0100 Subject: [PATCH 3/3] Fix connected check --- Core/HLE/sceNetAdhoc.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Core/HLE/sceNetAdhoc.cpp b/Core/HLE/sceNetAdhoc.cpp index f4016884ce..0441b6f372 100644 --- a/Core/HLE/sceNetAdhoc.cpp +++ b/Core/HLE/sceNetAdhoc.cpp @@ -127,7 +127,7 @@ static int sceNetAdhocPdpSend(int id, const char* mac, u32 port, void* data, int static int sceNetAdhocPdpRecv(int id, void* addr, void* port, void* buf, void* dataLength, u32 timeout, int flag); bool __NetAdhocConnected() { - return netAdhocInited && netAdhocctlInited && adhocctlState == ADHOCCTL_STATE_CONNECTED; + return netAdhocInited && netAdhocctlInited && (adhocctlState == ADHOCCTL_STATE_CONNECTED || adhocctlState == ADHOCCTL_STATE_GAMEMODE); } void __NetAdhocShutdown() {