Implement full support for GetPixelFormat

svn path=/trunk/; revision=25153
This commit is contained in:
Magnus Olsen 2006-12-14 08:22:17 +00:00
parent ac78b1e624
commit fc31996a7d
2 changed files with 19 additions and 5 deletions

View file

@ -287,6 +287,7 @@ HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDE
* to save time ?? * to save time ??
*/ */
mDdCanCreateSurface.lpDD = This->lpLcl->lpGbl; mDdCanCreateSurface.lpDD = This->lpLcl->lpGbl;
mDdCanCreateSurface.bIsDifferentPixelFormat = FALSE; //isDifferentPixelFormat; mDdCanCreateSurface.bIsDifferentPixelFormat = FALSE; //isDifferentPixelFormat;
mDdCanCreateSurface.lpDDSurfaceDesc = (LPDDSURFACEDESC) pDDSD; mDdCanCreateSurface.lpDDSurfaceDesc = (LPDDSURFACEDESC) pDDSD;
@ -301,11 +302,18 @@ HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDE
mDdCreateSurface.lplpSList = That->lpLcl->lpSurfMore->slist; mDdCreateSurface.lplpSList = That->lpLcl->lpSurfMore->slist;
/* setup DDSD */
if (pDDSD->dwFlags & DDSD_PIXELFORMAT)
{
That->lpLcl->dwFlags |= DDRAWISURF_HASPIXELFORMAT;
memcpy(&That->lpLcl->lpGbl->ddpfSurface,&pDDSD->ddpfPixelFormat, sizeof(DDPIXELFORMAT));
}
/* Create the surface */
if (pDDSD->ddsCaps.dwCaps & DDSCAPS_PRIMARYSURFACE) if (pDDSD->ddsCaps.dwCaps & DDSCAPS_PRIMARYSURFACE)
{ {
This->lpLcl->lpPrimary = That; This->lpLcl->lpPrimary = That;
if (mDdCanCreateSurface.CanCreateSurface(&mDdCanCreateSurface)== DDHAL_DRIVER_NOTHANDLED) if (mDdCanCreateSurface.CanCreateSurface(&mDdCanCreateSurface)== DDHAL_DRIVER_NOTHANDLED)
{ {
return DDERR_NOTINITIALIZED; return DDERR_NOTINITIALIZED;

View file

@ -540,21 +540,27 @@ Main_DDrawSurface_GetPalette(LPDIRECTDRAWSURFACE7 iface,
HRESULT WINAPI HRESULT WINAPI
Main_DDrawSurface_GetPixelFormat(LPDIRECTDRAWSURFACE7 iface, Main_DDrawSurface_GetPixelFormat(LPDIRECTDRAWSURFACE7 iface,
LPDDPIXELFORMAT pDDPixelFormat) LPDDPIXELFORMAT pDDPixelFormat)
{ {
LPDDRAWI_DDRAWSURFACE_INT This = (LPDDRAWI_DDRAWSURFACE_INT)iface; LPDDRAWI_DDRAWSURFACE_INT This = (LPDDRAWI_DDRAWSURFACE_INT)iface;
HRESULT retVale = DDERR_INVALIDPARAMS; HRESULT retVale = DDERR_INVALIDPARAMS;
DX_WINDBG_trace(); DX_WINDBG_trace();
/* FIXME is this right ?? */
if (pDDPixelFormat != NULL) if (pDDPixelFormat != NULL)
{ {
memcpy(pDDPixelFormat,&This->lpLcl->lpSurfMore-> if (This->lpLcl->dwFlags & DDRAWISURF_HASPIXELFORMAT)
{
memcpy(pDDPixelFormat,&This->lpLcl->lpGbl->ddpfSurface,sizeof(DDPIXELFORMAT));
}
else
{
memcpy(pDDPixelFormat,&This->lpLcl->lpSurfMore->
lpDD_lcl->lpGbl->vmiData.ddpfDisplay,sizeof(DDPIXELFORMAT)); lpDD_lcl->lpGbl->vmiData.ddpfDisplay,sizeof(DDPIXELFORMAT));
}
retVale = DD_OK; retVale = DD_OK;
} }
return retVale; return retVale;
} }