Implement full support for GetPixelFormat
authorMagnus Olsen <magnus@greatlord.com>
Thu, 14 Dec 2006 08:22:17 +0000 (08:22 +0000)
committerMagnus Olsen <magnus@greatlord.com>
Thu, 14 Dec 2006 08:22:17 +0000 (08:22 +0000)
svn path=/trunk/; revision=25153

reactos/dll/directx/ddraw/main/ddraw_main.c
reactos/dll/directx/ddraw/main/surface_main.c

index d575eb7..fa9aa25 100644 (file)
@@ -286,6 +286,7 @@ HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDE
      * in startup and do a cache of it
      * to save time ??
      */
+    
 
     mDdCanCreateSurface.lpDD = This->lpLcl->lpGbl;
     mDdCanCreateSurface.bIsDifferentPixelFormat = FALSE; //isDifferentPixelFormat;
@@ -301,11 +302,18 @@ HRESULT WINAPI Main_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDE
 
     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;
index 186f093..1a8dc95 100644 (file)
@@ -540,21 +540,27 @@ Main_DDrawSurface_GetPalette(LPDIRECTDRAWSURFACE7 iface,
 
 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;
 }