diff --git a/reactos/dll/directx/ddraw/Ddraw/ddraw_main.c b/reactos/dll/directx/ddraw/Ddraw/ddraw_main.c index 34c862c17d3..93fecb075fc 100644 --- a/reactos/dll/directx/ddraw/Ddraw/ddraw_main.c +++ b/reactos/dll/directx/ddraw/Ddraw/ddraw_main.c @@ -9,7 +9,7 @@ */ -#include "../rosdraw.h" +#include "rosdraw.h" HRESULT WINAPI @@ -117,6 +117,65 @@ Main_DirectDraw_Compact(LPDIRECTDRAW7 iface) return DD_OK; } +HRESULT WINAPI +Main_DirectDraw_SetDisplayMode (LPDIRECTDRAW7 iface, DWORD dwWidth, DWORD dwHeight, + DWORD dwBPP, DWORD dwRefreshRate, DWORD dwFlags) +{ + LPDDRAWI_DIRECTDRAW_INT This = (LPDDRAWI_DIRECTDRAW_INT)iface; + DX_WINDBG_trace(); + + // FIXME: Check primary if surface is locked / busy etc. + + // Check Parameter + if(dwFlags != 0) + { + return DDERR_INVALIDPARAMS; + } + + if ((!dwHeight || This->lpLcl->lpGbl->vmiData.dwDisplayHeight == dwHeight) && + (!dwWidth || This->lpLcl->lpGbl->vmiData.dwDisplayWidth == dwWidth) && + (!dwBPP || This->lpLcl->lpGbl->vmiData.ddpfDisplay.dwRGBBitCount == dwBPP) && + (!dwRefreshRate || This->lpLcl->lpGbl->dwMonitorFrequency == dwRefreshRate)) + { + return DD_OK; // nothing to do here for us + } + + // Here we go + DEVMODE DevMode; + DevMode.dmFields = 0; + if(dwHeight) + DevMode.dmFields |= DM_PELSHEIGHT; + if(dwWidth) + DevMode.dmFields |= DM_PELSWIDTH; + if(dwBPP) + DevMode.dmFields |= DM_BITSPERPEL; + if(dwRefreshRate) + DevMode.dmFields |= DM_DISPLAYFREQUENCY; + + DevMode.dmPelsHeight = dwHeight; + DevMode.dmPelsWidth = dwWidth; + DevMode.dmBitsPerPel = dwBPP; + DevMode.dmDisplayFrequency = dwRefreshRate; + + LONG retval = ChangeDisplaySettings(&DevMode, CDS_FULLSCREEN /* | CDS_SET_PRIMARY ? */); + DbgPrint("%d\n", retval); + + if(retval == DISP_CHANGE_BADMODE) + { + return DDERR_UNSUPPORTED; + } + else if(retval != DISP_CHANGE_SUCCESSFUL) + { + return DDERR_GENERIC; + } + + // Update Interals + BOOL ModeChanged; + DdReenableDirectDrawObject(This->lpLcl->lpGbl, &ModeChanged); + StartDirectDraw((LPDIRECTDRAW)iface, 0, TRUE); + + return DD_OK; +} /* */ diff --git a/reactos/dll/directx/ddraw/Ddraw/ddraw_stubs.c b/reactos/dll/directx/ddraw/Ddraw/ddraw_stubs.c index 246b0c4f925..ffb3b759109 100644 --- a/reactos/dll/directx/ddraw/Ddraw/ddraw_stubs.c +++ b/reactos/dll/directx/ddraw/Ddraw/ddraw_stubs.c @@ -8,7 +8,7 @@ * */ -#include "../rosdraw.h" +#include "rosdraw.h" /* * Status: Implentation removed due to rewrite @@ -144,17 +144,6 @@ Main_DirectDraw_RestoreDisplayMode(LPDIRECTDRAW7 iface) DX_STUB; } -/* - * Status: Implentation removed due to rewrite - */ -HRESULT WINAPI -Main_DirectDraw_SetDisplayMode (LPDIRECTDRAW7 iface, DWORD dwWidth, DWORD dwHeight, - DWORD dwBPP, DWORD dwRefreshRate, DWORD dwFlags) -{ - DX_WINDBG_trace(); - DX_STUB; -} - /* * Status: Implentation removed due to rewrite */ diff --git a/reactos/dll/directx/ddraw/Surface/callbacks_surf_hel.c b/reactos/dll/directx/ddraw/Surface/callbacks_surf_hel.c index 2f0b186a4b1..60bdc452189 100644 --- a/reactos/dll/directx/ddraw/Surface/callbacks_surf_hel.c +++ b/reactos/dll/directx/ddraw/Surface/callbacks_surf_hel.c @@ -8,11 +8,7 @@ * */ -#include #include "rosdraw.h" -#include "d3dhal.h" -#include "ddrawgdi.h" - DWORD CALLBACK HelDdSurfAddAttachedSurface(LPDDHAL_ADDATTACHEDSURFACEDATA lpDestroySurface) { diff --git a/reactos/dll/directx/ddraw/Surface/createsurface.c b/reactos/dll/directx/ddraw/Surface/createsurface.c index 0fa36801c78..6d913ab69b9 100644 --- a/reactos/dll/directx/ddraw/Surface/createsurface.c +++ b/reactos/dll/directx/ddraw/Surface/createsurface.c @@ -94,7 +94,6 @@ void CopyDDSurfDescToDDSurfDesc2(LPDDSURFACEDESC2 dst_pDesc, LPDDSURFACEDESC src dst_pDesc->dwSize = sizeof(DDSURFACEDESC2); } - HRESULT CreatePrimarySurface(LPDDRAWI_DIRECTDRAW_INT This, LPDDRAWI_DDRAWSURFACE_INT *That, diff --git a/reactos/dll/directx/ddraw/Surface/surface_main.c b/reactos/dll/directx/ddraw/Surface/surface_main.c index cc3fd934cf5..1102de29b6b 100644 --- a/reactos/dll/directx/ddraw/Surface/surface_main.c +++ b/reactos/dll/directx/ddraw/Surface/surface_main.c @@ -8,7 +8,7 @@ * */ -#include "../rosdraw.h" +#include "rosdraw.h" /* FIXME adding hal and hel stub diff --git a/reactos/dll/directx/ddraw/Surface/surface_stubs.c b/reactos/dll/directx/ddraw/Surface/surface_stubs.c index 36805ea9472..094667cc086 100644 --- a/reactos/dll/directx/ddraw/Surface/surface_stubs.c +++ b/reactos/dll/directx/ddraw/Surface/surface_stubs.c @@ -8,7 +8,7 @@ * */ -#include "../rosdraw.h" +#include "rosdraw.h" HRESULT WINAPI Main_DDrawSurface_QueryInterface(LPDIRECTDRAWSURFACE7 iface, REFIID riid, diff --git a/reactos/dll/directx/ddraw/startup.c b/reactos/dll/directx/ddraw/startup.c index d3ccff0bdbe..198cb0c9e01 100644 --- a/reactos/dll/directx/ddraw/startup.c +++ b/reactos/dll/directx/ddraw/startup.c @@ -358,7 +358,6 @@ HRESULT WINAPI StartDirectDrawHal(LPDIRECTDRAW* iface, BOOL reenable) { - LPDWORD mpFourCC; DDHALINFO mHALInfo; BOOL newmode = FALSE; @@ -368,6 +367,8 @@ StartDirectDrawHal(LPDIRECTDRAW* iface, BOOL reenable) DDHAL_DDEXEBUFCALLBACKS mD3dBufferCallbacks; LPDDRAWI_DIRECTDRAW_INT This = (LPDDRAWI_DIRECTDRAW_INT)iface; + DX_WINDBG_trace(); + RtlZeroMemory(&mHALInfo, sizeof(DDHALINFO)); RtlZeroMemory(&mD3dCallbacks, sizeof(D3DHAL_CALLBACKS)); RtlZeroMemory(&mD3dDriverData, sizeof(D3DHAL_GLOBALDRIVERDATA));