Fix some crach in ddraw.dll startup process for surface, we still got crach and surfa...
[reactos.git] / reactos / lib / ddraw / hal / surface_hal.c
index e4654c5..d815ee0 100644 (file)
 
 #include "rosdraw.h"
 
-HRESULT Hal_DDrawSurface_Blt(LPDIRECTDRAWSURFACE7 iface, LPRECT rdst,
-                         LPDIRECTDRAWSURFACE7 src, LPRECT rsrc, DWORD dwFlags, LPDDBLTFX lpbltfx)
+HRESULT Hal_DDrawSurface_Blt(LPDIRECTDRAWSURFACE7 iface, LPRECT rDest,
+                         LPDIRECTDRAWSURFACE7 src, LPRECT rSrc, DWORD dwFlags, LPDDBLTFX lpbltfx)
 {
-  
-       DDHAL_BLTDATA BltData;
-    IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
+    
+       IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
+    IDirectDrawSurfaceImpl* That = (IDirectDrawSurfaceImpl*)src;
        
-       if (!(This->DirectDrawGlobal.lpDDCBtmp->HALDDSurface.dwFlags  & DDHAL_SURFCB32_BLT)) 
+       if (!(This->owner->DirectDrawGlobal.lpDDCBtmp->HALDDSurface.dwFlags  & DDHAL_SURFCB32_BLT)) 
        {
                return DDERR_NODRIVERSUPPORT;
        }
 
-       BltData.lpDD = &This->DirectDrawGlobal;
-       /* RtlCopyMemory( &BltData.bltFX, lpbltfx,sizeof(DDBLTFX)); */
-       BltData.dwFlags =  dwFlags;
-
-    /* FIXME blt is not complete */
+       DDHAL_BLTDATA BltData;
+       BltData.lpDD = &This->owner->DirectDrawGlobal;
+       BltData.dwFlags = dwFlags;
+       BltData.lpDDDestSurface = &This->Local;
+    if(rDest) BltData.rDest = *(RECTL*)rDest;
+    if(rSrc) BltData.rSrc = *(RECTL*)rSrc;
+    if(That) BltData.lpDDSrcSurface = &That->Local;
+       if(lpbltfx) BltData.bltFX = *lpbltfx;
 
-       if (This->DirectDrawGlobal.lpDDCBtmp->HALDDSurface.Blt(&BltData) != DDHAL_DRIVER_HANDLED)
+       if (This->owner->DirectDrawGlobal.lpDDCBtmp->HALDDSurface.Blt(&BltData) != DDHAL_DRIVER_HANDLED)
        {
           return DDERR_NODRIVERSUPPORT;
        }
        
        return BltData.ddRVal;
-
 }
-