perf(engine): eliminate frame jitter using timeBeginPeriod(1) and timeGetTime

This commit is contained in:
Игорь Федосеев 2026-10-14 00:00:05 +03:00
parent 5997849f75
commit 4c89864afb
4 changed files with 8 additions and 3 deletions

Binary file not shown.

View file

@ -38,6 +38,9 @@ CreateThread PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD
CreateEventA PROTO :DWORD,:DWORD,:DWORD,:DWORD CreateEventA PROTO :DWORD,:DWORD,:DWORD,:DWORD
SetEvent PROTO :DWORD SetEvent PROTO :DWORD
WaitForSingleObject PROTO :DWORD,:DWORD WaitForSingleObject PROTO :DWORD,:DWORD
timeBeginPeriod PROTO :DWORD
timeEndPeriod PROTO :DWORD
timeGetTime PROTO
C3D_POINT STRUCT C3D_POINT STRUCT
x dd ? x dd ?
@ -4691,6 +4694,7 @@ Init3DEngine PROC
push esi push esi
push edi push edi
invoke timeBeginPeriod, 1
call LoadDisplaySettings3D call LoadDisplaySettings3D
call Create3DWindow call Create3DWindow
test eax, eax test eax, eax
@ -5008,7 +5012,7 @@ StartCasino3D PROC uses ebx esi edi
call Init3DEngine call Init3DEngine
test eax, eax test eax, eax
jz engine_shutdown jz engine_shutdown
invoke GetTickCount invoke timeGetTime
mov rngSeed3D, eax mov rngSeed3D, eax
mov previousTick3D, eax mov previousTick3D, eax
engine_loop: engine_loop:
@ -5022,7 +5026,7 @@ engine_loop:
jmp engine_loop jmp engine_loop
dispatch_frame: dispatch_frame:
invoke GetTickCount invoke timeGetTime
mov frameStart3D, eax mov frameStart3D, eax
sub eax, previousTick3D sub eax, previousTick3D
cmp eax, 50 cmp eax, 50
@ -5321,7 +5325,7 @@ present_frame:
xor eax, eax xor eax, eax
mov ecx, 64 mov ecx, 64
rep stosd rep stosd
invoke GetTickCount invoke timeGetTime
sub eax, frameStart3D sub eax, frameStart3D
mov ecx, 16 mov ecx, 16
cmp settingsLowSpec, 1 cmp settingsLowSpec, 1
@ -5373,6 +5377,7 @@ engine_shutdown:
invoke DestroyWindow, h3DWnd invoke DestroyWindow, h3DWnd
mov h3DWnd, 0 mov h3DWnd, 0
@@: @@:
invoke timeEndPeriod, 1
ret ret
StartCasino3D ENDP StartCasino3D ENDP

BIN
poker.exe

Binary file not shown.

BIN
poker.obj

Binary file not shown.