This->hdc = GetDC(hwnd);
This->cooperative_level = cooplevel;
- if((ret = Hel_DirectDraw_SetCooperativeLevel (iface)) != DD_OK)
- return ret;
+
if((ret = Hal_DirectDraw_SetCooperativeLevel (iface)) != DD_OK)
return ret;
+ if((ret = Hel_DirectDraw_SetCooperativeLevel (iface)) != DD_OK)
+ return ret;
+
return DD_OK;
}
HRESULT WINAPI Main_DirectDraw_SetDisplayMode (LPDIRECTDRAW7 iface, DWORD dwWidth, DWORD dwHeight,
DWORD dwBPP, DWORD dwRefreshRate, DWORD dwFlags)
{
- IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
-
- // this only for exclusive mode
- if(!(This->cooperative_level & DDSCL_EXCLUSIVE))
- return DDERR_NOEXCLUSIVEMODE;
-
- // change the resolution using normal WinAPI function
- DEVMODE mode;
- mode.dmSize = sizeof(mode);
- mode.dmPelsWidth = dwWidth;
- mode.dmPelsHeight = dwHeight;
- mode.dmBitsPerPel = dwBPP;
- mode.dmDisplayFrequency = dwRefreshRate;
- mode.dmFields = 0;
-
- if(dwWidth)
- mode.dmFields |= DM_PELSWIDTH;
- if(dwHeight)
- mode.dmFields |= DM_PELSHEIGHT;
- if(dwBPP)
- mode.dmFields |= DM_BITSPERPEL;
- if(dwRefreshRate)
- mode.dmFields |= DM_DISPLAYFREQUENCY;
-
- if (ChangeDisplaySettings(&mode, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL)
- return DDERR_UNSUPPORTEDMODE;
-
- // TODO: reactivate ddraw object, maximize window, set it in foreground
- // and set excluive mode (if implemented by the driver)
-
- if(dwWidth)
- This->Height = dwWidth;
- if(dwHeight)
- This->Width = dwHeight;
- if(dwBPP)
- This->Bpp = dwBPP;
-
- return DD_OK;
-}
-
-HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDESC2 pDDSD,
- LPDIRECTDRAWSURFACE7 *ppSurf, IUnknown *pUnkOuter)
-{
- if (pUnkOuter!=NULL)
- return DDERR_INVALIDPARAMS;
-
- if(sizeof(DDSURFACEDESC2)!=pDDSD->dwSize)
- return DDERR_UNSUPPORTED;
-
- // the nasty com stuff
- IDirectDrawSurfaceImpl* That;
-
- That = (IDirectDrawSurfaceImpl*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectDrawSurfaceImpl));
-
- if (That == NULL)
- return E_OUTOFMEMORY;
-
- That->lpVtbl = &DirectDrawSurface7_Vtable;
- That->lpVtbl_v3 = &DDRAW_IDDS3_Thunk_VTable;
+ DWORD ret;
+ if((ret = Hal_DirectDraw_SetDisplayMode(iface, dwWidth, dwHeight,
+ dwBPP, dwRefreshRate, dwFlags)) == DD_OK)
+ {
+ return ret;
+ }
- That->ref = 1;
- *ppSurf = (LPDIRECTDRAWSURFACE7)That;
+ ret = Hel_DirectDraw_SetDisplayMode(iface, dwWidth, dwHeight, dwBPP, dwRefreshRate, dwFlags);
- // the real surface object creation
- return That->lpVtbl->Initialize (*ppSurf, (LPDIRECTDRAW)iface, pDDSD);
+ return ret;
}
ULONG WINAPI Main_DirectDraw_AddRef (LPDIRECTDRAW7 iface)
return S_OK;
}
-/**** Stubs ****/
-
-HRESULT WINAPI Main_DirectDraw_Compact(LPDIRECTDRAW7 iface)
+HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDESC2 pDDSD,
+ LPDIRECTDRAWSURFACE7 *ppSurf, IUnknown *pUnkOuter)
{
- DX_STUB;
+ if (pUnkOuter!=NULL)
+ return DDERR_INVALIDPARAMS;
+
+ if(sizeof(DDSURFACEDESC2)!=pDDSD->dwSize)
+ return DDERR_UNSUPPORTED;
+
+ // the nasty com stuff
+ IDirectDrawSurfaceImpl* That;
+
+ That = (IDirectDrawSurfaceImpl*)HeapAlloc(GetProcessHeap(), 0, sizeof(IDirectDrawSurfaceImpl));
+
+ if (That == NULL)
+ return E_OUTOFMEMORY;
+
+ ZeroMemory(That, sizeof(IDirectDrawSurfaceImpl));
+
+ That->lpVtbl = &DirectDrawSurface7_Vtable;
+ That->lpVtbl_v3 = &DDRAW_IDDS3_Thunk_VTable;
+ That->ref = 1;
+
+ *ppSurf = (LPDIRECTDRAWSURFACE7)That;
+
+ // the real surface object creation
+ return That->lpVtbl->Initialize (*ppSurf, (LPDIRECTDRAW)iface, pDDSD);
}
HRESULT WINAPI Main_DirectDraw_CreateClipper(LPDIRECTDRAW7 iface, DWORD dwFlags,
LPDIRECTDRAWCLIPPER *ppClipper, IUnknown *pUnkOuter)
{
- DX_STUB;
+ if (pUnkOuter!=NULL)
+ return DDERR_INVALIDPARAMS;
+
+ IDirectDrawClipperImpl* That;
+ That = (IDirectDrawClipperImpl*)HeapAlloc(GetProcessHeap(), 0, sizeof(IDirectDrawClipperImpl));
+
+ if (That == NULL)
+ return E_OUTOFMEMORY;
+
+ ZeroMemory(That, sizeof(IDirectDrawClipperImpl));
+
+ That->lpVtbl = &DirectDrawClipper_Vtable;
+ That->ref = 1;
+ *ppClipper = (LPDIRECTDRAWCLIPPER)That;
+
+ return That->lpVtbl->Initialize (*ppClipper, (LPDIRECTDRAW)iface, dwFlags);
+}
+
+// This function is exported by the dll
+HRESULT WINAPI DirectDrawCreateClipper (DWORD dwFlags,
+ LPDIRECTDRAWCLIPPER* lplpDDClipper, LPUNKNOWN pUnkOuter)
+{
+ return Main_DirectDraw_CreateClipper(NULL, dwFlags, lplpDDClipper, pUnkOuter);
}
+
HRESULT WINAPI Main_DirectDraw_CreatePalette(LPDIRECTDRAW7 iface, DWORD dwFlags,
- LPPALETTEENTRY palent,LPDIRECTDRAWPALETTE* ppPalette,LPUNKNOWN pUnknown)
+ LPPALETTEENTRY palent, LPDIRECTDRAWPALETTE* ppPalette, LPUNKNOWN pUnkOuter)
{
- DX_STUB;
+ if (pUnkOuter!=NULL)
+ return DDERR_INVALIDPARAMS;
+
+ IDirectDrawPaletteImpl* That;
+ That = (IDirectDrawPaletteImpl*)HeapAlloc(GetProcessHeap(), 0, sizeof(IDirectDrawPaletteImpl));
+
+ if (That == NULL)
+ return E_OUTOFMEMORY;
+
+ ZeroMemory(That, sizeof(IDirectDrawPaletteImpl));
+
+ That->lpVtbl = &DirectDrawPalette_Vtable;
+ That->ref = 1;
+ *ppPalette = (LPDIRECTDRAWPALETTE)That;
+
+ return That->lpVtbl->Initialize (*ppPalette, (LPDIRECTDRAW)iface, dwFlags, palent);
+}
+
+/**** Stubs ****/
+
+HRESULT WINAPI Main_DirectDraw_Compact(LPDIRECTDRAW7 iface)
+{
+ DX_STUB;
}
HRESULT WINAPI Main_DirectDraw_DuplicateSurface(LPDIRECTDRAW7 iface, LPDIRECTDRAWSURFACE7 src,
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,
DDCOLORKEY ddckCKSrcOverlay;
DDCOLORKEY ddckCKSrcBlt;
*/
-
+
+
RtlCopyMemory(&pDDSD->ddpfPixelFormat,&This->DirectDrawGlobal.vmiData.ddpfDisplay,sizeof(DDPIXELFORMAT));
RtlCopyMemory(&pDDSD->ddsCaps,&This->DirectDrawGlobal.ddCaps,sizeof(DDCORECAPS));
HRESULT WINAPI Main_DirectDraw_GetScanLine(LPDIRECTDRAW7 iface, LPDWORD lpdwScanLine)
{
- DX_STUB;
+ DWORD ret;
+
+ if((ret = Hal_DirectDraw_GetScanLine( iface, lpdwScanLine)) == DD_OK)
+ return ret;
+
+ if((ret = Hel_DirectDraw_GetScanLine( iface, lpdwScanLine)) == DD_OK)
+ return ret;
+
+ return DDERR_NOTINITIALIZED;
}
HRESULT WINAPI Main_DirectDraw_GetVerticalBlankStatus(LPDIRECTDRAW7 iface, LPBOOL status)
HRESULT WINAPI Main_DirectDraw_WaitForVerticalBlank(LPDIRECTDRAW7 iface, DWORD dwFlags,
HANDLE h)
{
-
- DX_STUB;
+ DWORD ret;
+
+ if((ret = Hal_DirectDraw_WaitForVerticalBlank( iface, dwFlags, h)) == DD_OK)
+ return ret;
+
+ if((ret = Hel_DirectDraw_WaitForVerticalBlank( iface, dwFlags, h)) == DD_OK)
+ return ret;
+
+ return DDERR_NOTINITIALIZED;
}
HRESULT WINAPI Main_DirectDraw_GetAvailableVidMem(LPDIRECTDRAW7 iface, LPDDSCAPS2 ddscaps,
LPDWORD total, LPDWORD free)
-{
-
- DX_STUB;
+{
+ DWORD ret;
+
+ if((ret = Hal_DirectDraw_GetAvailableVidMem (iface,ddscaps,total,free)) == DD_OK)
+ return ret;
+
+ if((ret = Hel_DirectDraw_GetAvailableVidMem (iface,ddscaps,total,free)) == DD_OK)
+ return ret;
+
+
+ return DDERR_NOTINITIALIZED;
+
}
HRESULT WINAPI Main_DirectDraw_GetSurfaceFromDC(LPDIRECTDRAW7 iface, HDC hdc,