1
0
mirror of https://github.com/narzoul/DDrawCompat synced 2024-12-30 08:55:36 +01:00

Disable application calls to timeBeginPeriod/timeEndPeriod

Fixes stuttering in Pacific General.
This commit is contained in:
narzoul 2022-08-08 23:33:02 +02:00
parent 3d958e5ef2
commit d4f5020e6f
5 changed files with 61 additions and 1 deletions

View File

@ -293,6 +293,7 @@
<ClInclude Include="Win32\Registry.h" />
<ClInclude Include="Win32\Thread.h" />
<ClInclude Include="Win32\Version.h" />
<ClInclude Include="Win32\Winmm.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="Common\Log.cpp" />
@ -405,6 +406,7 @@
<ClCompile Include="Win32\Registry.cpp" />
<ClCompile Include="Win32\Thread.cpp" />
<ClCompile Include="Win32\Version.cpp" />
<ClCompile Include="Win32\Winmm.cpp" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="DDrawCompat.rc" />

View File

@ -585,6 +585,9 @@
<ClInclude Include="Config\Settings\FontAntialiasing.h">
<Filter>Header Files\Config\Settings</Filter>
</ClInclude>
<ClInclude Include="Win32\Winmm.h">
<Filter>Header Files\Win32</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="Gdi\Gdi.cpp">
@ -917,6 +920,9 @@
<ClCompile Include="Config\Settings\FpsLimiter.cpp">
<Filter>Source Files\Config\Settings</Filter>
</ClCompile>
<ClCompile Include="Win32\Winmm.cpp">
<Filter>Source Files\Win32</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="DDrawCompat.rc">

View File

@ -26,6 +26,7 @@
#include <Win32/Registry.h>
#include <Win32/Thread.h>
#include <Win32/Version.h>
#include <Win32/Winmm.h>
HRESULT WINAPI SetAppCompatData(DWORD, DWORD);
@ -289,9 +290,10 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
Win32::MemoryManagement::installHooks();
Win32::Thread::installHooks();
Win32::Version::installHooks();
Win32::Winmm::installHooks();
Compat::closeDbgEng();
timeBeginPeriod(1);
CALL_ORIG_FUNC(timeBeginPeriod)(1);
setDpiAwareness();
SetThemeAppProperties(0);
Time::init();

View File

@ -0,0 +1,41 @@
#include <Windows.h>
#include <timeapi.h>
#include <Common/Hook.h>
#include <Common/Log.h>
#include <Win32/Winmm.h>
namespace
{
MMRESULT WINAPI TimeBeginPeriod(UINT uPeriod)
{
LOG_FUNC("timeBeginPeriod", uPeriod);
return LOG_RESULT(TIMERR_NOERROR);
}
MMRESULT WINAPI TimeEndPeriod(UINT uPeriod)
{
LOG_FUNC("timeEndPeriod", uPeriod);
return LOG_RESULT(TIMERR_NOERROR);
}
}
namespace Win32
{
namespace Winmm
{
void installHooks()
{
if (Compat::getProcAddress(GetModuleHandle("kernel32"), "timeBeginPeriod"))
{
HOOK_FUNCTION(kernel32, timeBeginPeriod, TimeBeginPeriod);
HOOK_FUNCTION(kernel32, timeEndPeriod, TimeEndPeriod);
}
else
{
HOOK_FUNCTION(winmm, timeBeginPeriod, TimeBeginPeriod);
HOOK_FUNCTION(winmm, timeEndPeriod, TimeEndPeriod);
}
}
}
}

View File

@ -0,0 +1,9 @@
#pragma once
namespace Win32
{
namespace Winmm
{
void installHooks();
}
}