From: Magnus Olsen Date: Sun, 30 Oct 2005 09:21:03 +0000 (+0000) Subject: implment Hal FlipToGDISurface X-Git-Tag: backups/ros-branch-0_2_9@19949~1012 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=97e6b6a1007cbbbc3fa6922a0b8381c6c7cf086f implment Hal FlipToGDISurface svn path=/trunk/; revision=18873 --- diff --git a/reactos/lib/ddraw/hal/ddraw.c b/reactos/lib/ddraw/hal/ddraw.c index de875ac1129..a8e6c0ef4d2 100644 --- a/reactos/lib/ddraw/hal/ddraw.c +++ b/reactos/lib/ddraw/hal/ddraw.c @@ -393,7 +393,7 @@ HRESULT Hal_DirectDraw_WaitForVerticalBlank(LPDIRECTDRAW7 iface, DWORD dwFlags,H DDHAL_WAITFORVERTICALBLANKDATA WaitVectorData; - if (!(This->DirectDrawGlobal.lpDDCBtmp->HALDDMiscellaneous.dwFlags & DDHAL_CB32_WAITFORVERTICALBLANK)) + if (!(This->DirectDrawGlobal.lpDDCBtmp->HALDD.dwFlags & DDHAL_CB32_WAITFORVERTICALBLANK)) { return DDERR_NODRIVERSUPPORT; } @@ -417,7 +417,7 @@ HRESULT Hal_DirectDraw_GetScanLine(LPDIRECTDRAW7 iface, LPDWORD lpdwScanLine) DDHAL_GETSCANLINEDATA GetScan; - if (!(This->DirectDrawGlobal.lpDDCBtmp->HALDDMiscellaneous.dwFlags & DDHAL_CB32_GETSCANLINE)) + if (!(This->DirectDrawGlobal.lpDDCBtmp->HALDD.dwFlags & DDHAL_CB32_GETSCANLINE)) { return DDERR_NODRIVERSUPPORT; } @@ -433,3 +433,26 @@ HRESULT Hal_DirectDraw_GetScanLine(LPDIRECTDRAW7 iface, LPDWORD lpdwScanLine) *lpdwScanLine = GetScan.ddRVal; return GetScan.ddRVal; } + +HRESULT Hal_DirectDraw_FlipToGDISurface(LPDIRECTDRAW7 iface) +{ + IDirectDrawImpl* This = (IDirectDrawImpl*)iface; + + DDHAL_FLIPTOGDISURFACEDATA FlipGdi; + + if (!(This->DirectDrawGlobal.lpDDCBtmp->HALDD.dwFlags & DDHAL_CB32_FLIPTOGDISURFACE)) + { + return DDERR_NODRIVERSUPPORT; + } + + FlipGdi.lpDD = &This->DirectDrawGlobal; + FlipGdi.ddRVal = DDERR_NOTPALETTIZED; + + if (This->DirectDrawGlobal.lpDDCBtmp->HALDD.FlipToGDISurface(&FlipGdi) != DDHAL_DRIVER_HANDLED) + { + return DDERR_NODRIVERSUPPORT; + } + + /* FIXME where should FlipGdi.dwToGDI be fill in */ + return FlipGdi.ddRVal; +} diff --git a/reactos/lib/ddraw/main/ddraw.c b/reactos/lib/ddraw/main/ddraw.c index ce80dfa429e..4c5765f0b01 100644 --- a/reactos/lib/ddraw/main/ddraw.c +++ b/reactos/lib/ddraw/main/ddraw.c @@ -287,7 +287,15 @@ HRESULT WINAPI Main_DirectDraw_EnumSurfaces(LPDIRECTDRAW7 iface, DWORD dwFlags, HRESULT WINAPI Main_DirectDraw_FlipToGDISurface(LPDIRECTDRAW7 iface) { - DX_STUB; + DWORD ret; + + if((ret = Hal_DirectDraw_FlipToGDISurface( iface)) == DD_OK) + return ret; + + if((ret = Hel_DirectDraw_FlipToGDISurface( iface)) == DD_OK) + return ret; + + return DDERR_NOTINITIALIZED; } HRESULT WINAPI Main_DirectDraw_GetCaps(LPDIRECTDRAW7 iface, LPDDCAPS pDriverCaps, diff --git a/reactos/lib/ddraw/rosdraw.h b/reactos/lib/ddraw/rosdraw.h index 50ec596a245..e6eccbec4fb 100644 --- a/reactos/lib/ddraw/rosdraw.h +++ b/reactos/lib/ddraw/rosdraw.h @@ -95,6 +95,9 @@ HRESULT Hal_DirectDraw_WaitForVerticalBlank(LPDIRECTDRAW7 iface, DWORD dwFlags, HANDLE h); HRESULT Hal_DirectDraw_GetScanLine(LPDIRECTDRAW7 iface, LPDWORD lpdwScanLine); +HRESULT Hal_DirectDraw_FlipToGDISurface(LPDIRECTDRAW7 iface); + + HRESULT Hel_DirectDraw_Initialize (LPDIRECTDRAW7 iface); @@ -108,7 +111,7 @@ HRESULT Hel_DirectDraw_WaitForVerticalBlank(LPDIRECTDRAW7 iface, DWORD dwFlags, HANDLE h); HRESULT Hel_DirectDraw_GetScanLine(LPDIRECTDRAW7 iface, LPDWORD lpdwScanLine); - +HRESULT Hel_DirectDraw_FlipToGDISurface(LPDIRECTDRAW7 iface); /*********** Macros ***********/ diff --git a/reactos/lib/ddraw/soft/ddraw.c b/reactos/lib/ddraw/soft/ddraw.c index 786690b59a2..31724257f4b 100644 --- a/reactos/lib/ddraw/soft/ddraw.c +++ b/reactos/lib/ddraw/soft/ddraw.c @@ -42,3 +42,9 @@ HRESULT Hel_DirectDraw_GetScanLine(LPDIRECTDRAW7 iface, LPDWORD lpdwScanLine) { DX_STUB; } + +HRESULT Hel_DirectDraw_FlipToGDISurface(LPDIRECTDRAW7 iface) +{ + DX_STUB; +} +