Some formatting and implement SetDisplayMode.

svn path=/trunk/; revision=26793
This commit is contained in:
Maarten Bosma 2007-05-15 16:18:30 +00:00
parent 149c5b1cae
commit ada941267c
7 changed files with 65 additions and 21 deletions

View file

@ -9,7 +9,7 @@
*/ */
#include "../rosdraw.h" #include "rosdraw.h"
HRESULT HRESULT
WINAPI WINAPI
@ -117,6 +117,65 @@ Main_DirectDraw_Compact(LPDIRECTDRAW7 iface)
return DD_OK; 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;
}
/* /*
*/ */

View file

@ -8,7 +8,7 @@
* *
*/ */
#include "../rosdraw.h" #include "rosdraw.h"
/* /*
* Status: Implentation removed due to rewrite * Status: Implentation removed due to rewrite
@ -144,17 +144,6 @@ Main_DirectDraw_RestoreDisplayMode(LPDIRECTDRAW7 iface)
DX_STUB; 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 * Status: Implentation removed due to rewrite
*/ */

View file

@ -8,11 +8,7 @@
* *
*/ */
#include <windows.h>
#include "rosdraw.h" #include "rosdraw.h"
#include "d3dhal.h"
#include "ddrawgdi.h"
DWORD CALLBACK HelDdSurfAddAttachedSurface(LPDDHAL_ADDATTACHEDSURFACEDATA lpDestroySurface) DWORD CALLBACK HelDdSurfAddAttachedSurface(LPDDHAL_ADDATTACHEDSURFACEDATA lpDestroySurface)
{ {

View file

@ -94,7 +94,6 @@ void CopyDDSurfDescToDDSurfDesc2(LPDDSURFACEDESC2 dst_pDesc, LPDDSURFACEDESC src
dst_pDesc->dwSize = sizeof(DDSURFACEDESC2); dst_pDesc->dwSize = sizeof(DDSURFACEDESC2);
} }
HRESULT HRESULT
CreatePrimarySurface(LPDDRAWI_DIRECTDRAW_INT This, CreatePrimarySurface(LPDDRAWI_DIRECTDRAW_INT This,
LPDDRAWI_DDRAWSURFACE_INT *That, LPDDRAWI_DDRAWSURFACE_INT *That,

View file

@ -8,7 +8,7 @@
* *
*/ */
#include "../rosdraw.h" #include "rosdraw.h"
/* FIXME adding hal and hel stub /* FIXME adding hal and hel stub

View file

@ -8,7 +8,7 @@
* *
*/ */
#include "../rosdraw.h" #include "rosdraw.h"
HRESULT WINAPI HRESULT WINAPI
Main_DDrawSurface_QueryInterface(LPDIRECTDRAWSURFACE7 iface, REFIID riid, Main_DDrawSurface_QueryInterface(LPDIRECTDRAWSURFACE7 iface, REFIID riid,

View file

@ -358,7 +358,6 @@ HRESULT WINAPI
StartDirectDrawHal(LPDIRECTDRAW* iface, BOOL reenable) StartDirectDrawHal(LPDIRECTDRAW* iface, BOOL reenable)
{ {
LPDWORD mpFourCC; LPDWORD mpFourCC;
DDHALINFO mHALInfo; DDHALINFO mHALInfo;
BOOL newmode = FALSE; BOOL newmode = FALSE;
@ -368,6 +367,8 @@ StartDirectDrawHal(LPDIRECTDRAW* iface, BOOL reenable)
DDHAL_DDEXEBUFCALLBACKS mD3dBufferCallbacks; DDHAL_DDEXEBUFCALLBACKS mD3dBufferCallbacks;
LPDDRAWI_DIRECTDRAW_INT This = (LPDDRAWI_DIRECTDRAW_INT)iface; LPDDRAWI_DIRECTDRAW_INT This = (LPDDRAWI_DIRECTDRAW_INT)iface;
DX_WINDBG_trace();
RtlZeroMemory(&mHALInfo, sizeof(DDHALINFO)); RtlZeroMemory(&mHALInfo, sizeof(DDHALINFO));
RtlZeroMemory(&mD3dCallbacks, sizeof(D3DHAL_CALLBACKS)); RtlZeroMemory(&mD3dCallbacks, sizeof(D3DHAL_CALLBACKS));
RtlZeroMemory(&mD3dDriverData, sizeof(D3DHAL_GLOBALDRIVERDATA)); RtlZeroMemory(&mD3dDriverData, sizeof(D3DHAL_GLOBALDRIVERDATA));