improve fps limiter for vsync and maxfps=-1
This commit is contained in:
parent
d2903413a0
commit
a6f85fbd73
11 changed files with 223 additions and 217 deletions
52
inc/fps_limiter.h
Normal file
52
inc/fps_limiter.h
Normal file
|
@ -0,0 +1,52 @@
|
|||
#ifndef FPS_LIMITER_H
|
||||
#define FPS_LIMITER_H
|
||||
|
||||
#include <windows.h>
|
||||
#include <dwmapi.h>
|
||||
|
||||
|
||||
typedef struct _D3DKMT_WAITFORVERTICALBLANKEVENT {
|
||||
UINT hAdapter;
|
||||
UINT hDevice;
|
||||
UINT VidPnSourceId;
|
||||
} D3DKMT_WAITFORVERTICALBLANKEVENT;
|
||||
|
||||
typedef struct _D3DKMT_OPENADAPTERFROMHDC {
|
||||
HDC hDc;
|
||||
UINT hAdapter;
|
||||
LUID AdapterLuid;
|
||||
UINT VidPnSourceId;
|
||||
} D3DKMT_OPENADAPTERFROMHDC;
|
||||
|
||||
typedef struct _D3DKMT_CLOSEADAPTER {
|
||||
UINT hAdapter;
|
||||
} D3DKMT_CLOSEADAPTER;
|
||||
|
||||
typedef struct fps_limiter
|
||||
{
|
||||
DWORD tick_start;
|
||||
DWORD tick_end;
|
||||
DWORD tick_length;
|
||||
LONGLONG tick_length_ns;
|
||||
HANDLE htimer;
|
||||
LARGE_INTEGER due_time;
|
||||
D3DKMT_WAITFORVERTICALBLANKEVENT vblank_event;
|
||||
D3DKMT_OPENADAPTERFROMHDC adapter;
|
||||
D3DKMT_CLOSEADAPTER close_adapter;
|
||||
HRESULT(WINAPI* DwmFlush)(VOID);
|
||||
HRESULT(WINAPI* DwmIsCompositionEnabled)(BOOL*);
|
||||
NTSTATUS(WINAPI* D3DKMTWaitForVerticalBlankEvent)(const D3DKMT_WAITFORVERTICALBLANKEVENT* Arg1);
|
||||
NTSTATUS(WINAPI* D3DKMTOpenAdapterFromHdc)(D3DKMT_OPENADAPTERFROMHDC* Arg1);
|
||||
NTSTATUS(WINAPI* D3DKMTCloseAdapter)(D3DKMT_CLOSEADAPTER* Arg1);
|
||||
BOOL got_adapter;
|
||||
} fps_limiter;
|
||||
|
||||
extern fps_limiter g_fpsl;
|
||||
|
||||
void fpsl_init();
|
||||
BOOL fpsl_wait_for_vblank();
|
||||
BOOL fpsl_dwn_is_enabled();
|
||||
void fpsl_frame_start();
|
||||
void fpsl_frame_end();
|
||||
|
||||
#endif
|
Loading…
Add table
Add a link
Reference in a new issue