diff --git a/inc/dd.h b/inc/dd.h index 750825d..9ee8049 100644 --- a/inc/dd.h +++ b/inc/dd.h @@ -15,15 +15,15 @@ typedef HRESULT(WINAPI* DIRECTDRAWCREATEPROC)(GUID FAR*, LPDIRECTDRAW FAR*, IUnk ULONG dd_AddRef(); ULONG dd_Release(); HRESULT dd_EnumDisplayModes(DWORD dwFlags, LPDDSURFACEDESC lpDDSurfaceDesc, LPVOID lpContext, LPDDENUMMODESCALLBACK lpEnumModesCallback); -HRESULT dd_WaitForVerticalBlank(DWORD dwFlags, HANDLE hEvent); -HRESULT dd_SetDisplayMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwFlags); -HRESULT dd_SetCooperativeLevel(HWND hwnd, DWORD dwFlags); -HRESULT dd_RestoreDisplayMode(); HRESULT dd_GetCaps(LPDDCAPS_DX1 lpDDDriverCaps, LPDDCAPS_DX1 lpDDEmulCaps); HRESULT dd_GetDisplayMode(LPDDSURFACEDESC lpDDSurfaceDesc); HRESULT dd_GetMonitorFrequency(LPDWORD lpdwFreq); -HRESULT dd_GetAvailableVidMem(LPDDSCAPS lpDDCaps, LPDWORD lpdwTotal, LPDWORD lpdwFree); HRESULT dd_GetVerticalBlankStatus(LPBOOL lpbIsInVB); +HRESULT dd_RestoreDisplayMode(); +HRESULT dd_SetCooperativeLevel(HWND hwnd, DWORD dwFlags); +HRESULT dd_SetDisplayMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwFlags); +HRESULT dd_WaitForVerticalBlank(DWORD dwFlags, HANDLE hEvent); +HRESULT dd_GetAvailableVidMem(LPDDSCAPS lpDDCaps, LPDWORD lpdwTotal, LPDWORD lpdwFree); HRESULT dd_TestCooperativeLevel(); HRESULT dd_GetDeviceIdentifier(LPDDDEVICEIDENTIFIER pDDDI, DWORD dwFlags, REFIID riid); HRESULT dd_CreateEx(GUID* lpGuid, LPVOID* lplpDD, REFIID iid, IUnknown* pUnkOuter); diff --git a/src/dd.c b/src/dd.c index b64c320..1be2ec9 100644 --- a/src/dd.c +++ b/src/dd.c @@ -587,6 +587,27 @@ HRESULT dd_GetMonitorFrequency(LPDWORD lpdwFreq) return DD_OK; } +HRESULT dd_GetVerticalBlankStatus(LPBOOL lpbIsInVB) +{ + if (!lpbIsInVB) + return DDERR_INVALIDPARAMS; + + static DWORD last_vb; + DWORD tick = GetTickCount(); + + if (last_vb + 16 > tick) + { + *lpbIsInVB = FALSE; + } + else + { + last_vb = tick; + *lpbIsInVB = TRUE; + } + + return DD_OK; +} + HRESULT dd_RestoreDisplayMode() { if (!g_ddraw.render.run) @@ -1685,14 +1706,6 @@ HRESULT dd_GetAvailableVidMem(LPDDSCAPS lpDDCaps, LPDWORD lpdwTotal, LPDWORD lpd return DD_OK; } -HRESULT dd_GetVerticalBlankStatus(LPBOOL lpbIsInVB) -{ - if (lpbIsInVB) - *lpbIsInVB = TRUE; - - return DD_OK; -} - HRESULT dd_TestCooperativeLevel() { if (g_config.limiter_type == LIMIT_TESTCOOP && g_ddraw.ticks_limiter.tick_length > 0)