* in startup and do a cache of it
* to save time ??
*/
+
mDdCanCreateSurface.lpDD = This->lpLcl->lpGbl;
mDdCanCreateSurface.bIsDifferentPixelFormat = FALSE; //isDifferentPixelFormat;
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)
{
This->lpLcl->lpPrimary = That;
-
if (mDdCanCreateSurface.CanCreateSurface(&mDdCanCreateSurface)== DDHAL_DRIVER_NOTHANDLED)
{
return DDERR_NOTINITIALIZED;
HRESULT WINAPI
Main_DDrawSurface_GetPixelFormat(LPDIRECTDRAWSURFACE7 iface,
- LPDDPIXELFORMAT pDDPixelFormat)
+ LPDDPIXELFORMAT pDDPixelFormat)
{
LPDDRAWI_DDRAWSURFACE_INT This = (LPDDRAWI_DDRAWSURFACE_INT)iface;
HRESULT retVale = DDERR_INVALIDPARAMS;
DX_WINDBG_trace();
- /* FIXME is this right ?? */
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));
-
+ }
retVale = DD_OK;
}
+
return retVale;
}