ddraw: Improve GetScanLine stub so it's usable for timing related tasks.
This commit is contained in:
parent
6f9e330838
commit
5c85f96f33
@ -1964,8 +1964,8 @@ static HRESULT WINAPI ddraw7_GetScanLine(IDirectDraw7 *iface, DWORD *Scanline)
|
|||||||
{
|
{
|
||||||
struct ddraw *ddraw = impl_from_IDirectDraw7(iface);
|
struct ddraw *ddraw = impl_from_IDirectDraw7(iface);
|
||||||
struct wined3d_display_mode mode;
|
struct wined3d_display_mode mode;
|
||||||
static DWORD cur_scanline;
|
|
||||||
static BOOL hide = FALSE;
|
static BOOL hide = FALSE;
|
||||||
|
DWORD time, frame_progress, lines;
|
||||||
|
|
||||||
TRACE("iface %p, line %p.\n", iface, Scanline);
|
TRACE("iface %p, line %p.\n", iface, Scanline);
|
||||||
|
|
||||||
@ -1982,11 +1982,20 @@ static HRESULT WINAPI ddraw7_GetScanLine(IDirectDraw7 *iface, DWORD *Scanline)
|
|||||||
|
|
||||||
/* Fake the line sweeping of the monitor */
|
/* Fake the line sweeping of the monitor */
|
||||||
/* FIXME: We should synchronize with a source to keep the refresh rate */
|
/* FIXME: We should synchronize with a source to keep the refresh rate */
|
||||||
*Scanline = cur_scanline++;
|
|
||||||
/* Assume 20 scan lines in the vertical blank */
|
|
||||||
if (cur_scanline >= mode.height + 20)
|
|
||||||
cur_scanline = 0;
|
|
||||||
|
|
||||||
|
/* Simulate a 60Hz display */
|
||||||
|
time = GetTickCount();
|
||||||
|
frame_progress = time & 15; /* time % (1000 / 60) */
|
||||||
|
if (!frame_progress)
|
||||||
|
{
|
||||||
|
*Scanline = 0;
|
||||||
|
return DDERR_VERTICALBLANKINPROGRESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Convert frame_progress to estimated scan line. Return any line from
|
||||||
|
* block determined by time. Some lines may be never returned */
|
||||||
|
lines = mode.height / 15;
|
||||||
|
*Scanline = (frame_progress - 1) * lines + time % lines;
|
||||||
return DD_OK;
|
return DD_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user