1
0
mirror of https://github.com/FunkyFr3sh/cnc-ddraw.git synced 2025-03-24 17:49:52 +01:00

optional wait_for_vblank on flip

This commit is contained in:
FunkyFr3sh 2021-02-22 09:09:21 +01:00
parent 2784f83ddc
commit a6af34fbff
3 changed files with 18 additions and 15 deletions

View File

@ -53,7 +53,7 @@ typedef struct fps_limiter
extern fps_limiter g_fpsl; extern fps_limiter g_fpsl;
void fpsl_init(); void fpsl_init();
BOOL fpsl_wait_for_vblank(); BOOL fpsl_wait_for_vblank(BOOL open_adapter);
BOOL fpsl_dwm_flush(); BOOL fpsl_dwm_flush();
BOOL fpsl_dwm_is_enabled(); BOOL fpsl_dwm_is_enabled();
void fpsl_frame_start(); void fpsl_frame_start();

View File

@ -706,7 +706,7 @@ HRESULT dd_WaitForVerticalBlank(DWORD dwFlags, HANDLE h)
{ {
if (g_ddraw->maxgameticks == -2) if (g_ddraw->maxgameticks == -2)
{ {
if (fpsl_dwm_flush()) if (fpsl_dwm_flush() || fpsl_wait_for_vblank(FALSE))
return DD_OK; return DD_OK;
} }

View File

@ -76,22 +76,25 @@ void fpsl_init()
g_fpsl.initialized = TRUE; g_fpsl.initialized = TRUE;
} }
BOOL fpsl_wait_for_vblank() BOOL fpsl_wait_for_vblank(BOOL open_adapter)
{ {
if (g_fpsl.initialized && g_fpsl.D3DKMTOpenAdapterFromHdc && !g_fpsl.got_adapter) if (g_fpsl.initialized)
{ {
g_fpsl.adapter.hDc = g_ddraw->render.hdc; if (open_adapter && g_fpsl.D3DKMTOpenAdapterFromHdc && !g_fpsl.got_adapter)
if (g_fpsl.D3DKMTOpenAdapterFromHdc(&g_fpsl.adapter) == 0)
{ {
g_fpsl.vblank_event.hAdapter = g_fpsl.adapter.hAdapter; g_fpsl.adapter.hDc = g_ddraw->render.hdc;
g_fpsl.got_adapter = TRUE;
}
}
if (g_fpsl.got_adapter && g_fpsl.D3DKMTWaitForVerticalBlankEvent) if (g_fpsl.D3DKMTOpenAdapterFromHdc(&g_fpsl.adapter) == 0)
{ {
return g_fpsl.D3DKMTWaitForVerticalBlankEvent(&g_fpsl.vblank_event) == 0; g_fpsl.vblank_event.hAdapter = g_fpsl.adapter.hAdapter;
g_fpsl.got_adapter = TRUE;
}
}
if (g_fpsl.got_adapter && g_fpsl.D3DKMTWaitForVerticalBlankEvent)
{
return g_fpsl.D3DKMTWaitForVerticalBlankEvent(&g_fpsl.vblank_event) == 0;
}
} }
return FALSE; return FALSE;
@ -122,7 +125,7 @@ void fpsl_frame_end()
{ {
if (g_ddraw->render.maxfps < 0 || g_ddraw->vsync) if (g_ddraw->render.maxfps < 0 || g_ddraw->vsync)
{ {
if (fpsl_dwm_flush() || fpsl_wait_for_vblank()) if (fpsl_dwm_flush() || fpsl_wait_for_vblank(TRUE))
return; return;
} }