From bffd1491c348b0f8f5ca0086e7547d925c4ffa5f Mon Sep 17 00:00:00 2001 From: Elisha Riedlinger Date: Wed, 21 Aug 2024 14:23:35 -0700 Subject: [PATCH] Don't fully load DDrawCompat when using Dd7to9 --- DDrawCompat/DDrawCompatExternal.cpp | 3 ++- DDrawCompat/v0.3.1/Dll/DllMain.cpp | 23 ++++++++++++++++++----- Dllmain/BuildNo.rc | 2 +- Dllmain/Dllmain.cpp | 22 ++++++++++++++++------ 4 files changed, 37 insertions(+), 13 deletions(-) diff --git a/DDrawCompat/DDrawCompatExternal.cpp b/DDrawCompat/DDrawCompatExternal.cpp index 49784470..63e23717 100644 --- a/DDrawCompat/DDrawCompatExternal.cpp +++ b/DDrawCompat/DDrawCompatExternal.cpp @@ -88,7 +88,8 @@ namespace DDrawCompat void Start(HINSTANCE hinstDLL, DWORD fdwReason) { - IsDDrawEnabled = RunStart(hinstDLL, fdwReason); + bool ret = RunStart(hinstDLL, fdwReason); + IsDDrawEnabled = Config.Dd7to9 ? false : ret; } bool IsEnabled() diff --git a/DDrawCompat/v0.3.1/Dll/DllMain.cpp b/DDrawCompat/v0.3.1/Dll/DllMain.cpp index 6ce05de9..a6bf8b6a 100644 --- a/DDrawCompat/v0.3.1/Dll/DllMain.cpp +++ b/DDrawCompat/v0.3.1/Dll/DllMain.cpp @@ -203,6 +203,7 @@ namespace Compat32 static bool RunOnce = true; if (RunOnce && !DDrawCompat::IsEnabled()) { + RunOnce = false; Time::init(); Compat32::Log() << "Installing memory management hooks"; Win32::MemoryManagement::installHooks(); @@ -210,12 +211,21 @@ namespace Compat32 Win32::MsgHooks::installHooks(); Compat32::Log() << "Installing display mode hooks"; Win32::DisplayMode::installHooks(); + if (Config.DDrawCompat) + { + Compat32::Log() << "Installing Direct3D driver hooks"; + D3dDdi::installHooks(); + } Compat32::Log() << "Installing registry hooks"; Win32::Registry::installHooks(); Compat32::Log() << "Installing Win32 hooks"; Win32::WaitFunctions::installHooks(); + if (Config.DDrawCompat && !Config.DDrawCompatDisableGDIHook) + { + Compat32::Log() << "Installing GDI hooks"; + Gdi::installHooks(); + } Compat32::closeDbgEng(); - RunOnce = false; } } //********** End Edit *************** @@ -307,10 +317,13 @@ namespace Compat32 timeBeginPeriod(1); setDpiAwareness(); SetThemeAppProperties(0); - Win32::MemoryManagement::installHooks(); - Win32::MsgHooks::installHooks(); - Time::init(); - Compat32::closeDbgEng(); + if (!Config.Dd7to9) + { + Win32::MemoryManagement::installHooks(); + Win32::MsgHooks::installHooks(); + Time::init(); + Compat32::closeDbgEng(); + } //********** Begin Edit ************* if (Config.DisableMaxWindowedModeNotSet) diff --git a/Dllmain/BuildNo.rc b/Dllmain/BuildNo.rc index 3b800f80..bd7c641f 100644 --- a/Dllmain/BuildNo.rc +++ b/Dllmain/BuildNo.rc @@ -1 +1 @@ -#define BUILD_NUMBER 7100 +#define BUILD_NUMBER 7101 diff --git a/Dllmain/Dllmain.cpp b/Dllmain/Dllmain.cpp index 4b6656d3..85ea8fe4 100644 --- a/Dllmain/Dllmain.cpp +++ b/Dllmain/Dllmain.cpp @@ -410,10 +410,9 @@ BOOL APIENTRY DllMain(HMODULE hModule, DWORD fdwReason, LPVOID lpReserved) } } - // Start Dd7to9 + // Add Dd7to9 to the chain if (Config.Dd7to9) { - InitDDraw(); using namespace ddraw; using namespace DdrawWrapper; VISIT_PROCS_DDRAW(SET_WRAPPED_PROC); @@ -424,7 +423,7 @@ BOOL APIENTRY DllMain(HMODULE hModule, DWORD fdwReason, LPVOID lpReserved) #ifdef DDRAWCOMPAT // Add DDrawCompat to the chain - if (Config.DDrawCompat) + else if (Config.DDrawCompat) { Logging::Log() << "Enabling DDrawCompat"; using namespace ddraw; @@ -532,20 +531,31 @@ BOOL APIENTRY DllMain(HMODULE hModule, DWORD fdwReason, LPVOID lpReserved) Utils::LoadPlugins(); } + bool DDrawCompatEnabed = false; +#ifdef DDRAWCOMPAT + DDrawCompatEnabed = DDrawCompat::IsEnabled(); +#endif // DDRAWCOMPAT + // Set timer - if (!Config.DDrawCompat) + if (!DDrawCompatEnabed) { timeBeginPeriod(1); } #ifdef DDRAWCOMPAT // Extra compatibility hooks from DDrawCompat - if (!DDrawCompat::IsEnabled() && (Config.Dd7to9 || Config.D3d8to9)) + if (!DDrawCompatEnabed && (Config.Dd7to9 || Config.D3d8to9)) { DDrawCompat::InstallDd7to9Hooks(); } #endif // DDRAWCOMPAT + // Start Dd7to9 + if (Config.Dd7to9) + { + InitDDraw(); + } + // Start fullscreen thread if (Config.FullScreen || Config.ForceTermination) { @@ -600,7 +610,7 @@ BOOL APIENTRY DllMain(HMODULE hModule, DWORD fdwReason, LPVOID lpReserved) #ifdef DDRAWCOMPAT // Unload and Unhook DDrawCompat - if (DDrawCompat::IsEnabled()) + if (DDrawCompat::IsEnabled() || Config.Dd7to9) { DDrawCompat::Start(nullptr, DLL_PROCESS_DETACH); }