Fix some crach in ddraw.dll startup process for surface, we still got crach and surface are being setup wrong. working on this. Modified: trunk/reactos/lib/ddraw/hal/surface_hal.c Modified: trunk/reactos/lib/ddraw/main/ddraw_main.c Modified: trunk/reactos/lib/ddraw/main/surface_main.c _____
Modified: trunk/reactos/lib/ddraw/hal/surface_hal.c --- trunk/reactos/lib/ddraw/hal/surface_hal.c 2005-10-31 00:53:00 UTC (rev 18907) +++ trunk/reactos/lib/ddraw/hal/surface_hal.c 2005-10-31 01:22:19 UTC (rev 18908) @@ -13,7 +13,8 @@
HRESULT Hal_DDrawSurface_Blt(LPDIRECTDRAWSURFACE7 iface, LPRECT rDest, LPDIRECTDRAWSURFACE7 src, LPRECT rSrc, DWORD dwFlags, LPDDBLTFX lpbltfx) { - IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface; + + IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface; IDirectDrawSurfaceImpl* That = (IDirectDrawSurfaceImpl*)src; if (!(This->owner->DirectDrawGlobal.lpDDCBtmp->HALDDSurface.dwFlags & DDHAL_SURFCB32_BLT)) _____
Modified: trunk/reactos/lib/ddraw/main/ddraw_main.c --- trunk/reactos/lib/ddraw/main/ddraw_main.c 2005-10-31 00:53:00 UTC (rev 18907) +++ trunk/reactos/lib/ddraw/main/ddraw_main.c 2005-10-31 01:22:19 UTC (rev 18908) @@ -38,7 +38,8 @@
// ... then overwrite with hal if((ret = Hel_DirectDraw_Initialize (iface)) != DD_OK) return ret; - + + return DD_OK; }
@@ -165,22 +166,30 @@ return DDERR_UNSUPPORTED;
// the nasty com stuff + IDirectDrawImpl* This = (IDirectDrawImpl*)iface; + IDirectDrawSurfaceImpl* That;
That = (IDirectDrawSurfaceImpl*)HeapAlloc(GetProcessHeap(), 0, sizeof(IDirectDrawSurfaceImpl)); - + if (That == NULL) return E_OUTOFMEMORY;
ZeroMemory(That, sizeof(IDirectDrawSurfaceImpl)); - + That->lpVtbl = &DirectDrawSurface7_Vtable; That->lpVtbl_v3 = &DDRAW_IDDS3_Thunk_VTable; - + + This->DirectDrawGlobal.dsList = (LPDDRAWI_DDRAWSURFACE_INT)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, + sizeof(DDRAWI_DDRAWSURFACE_INT)); + + That->owner = (IDirectDrawImpl *)This; + That->owner->DirectDrawGlobal.dsList->dwIntRefCnt =1;
/* we alwasy set to use the DirectDrawSurface7_Vtable as internel */ That->owner->DirectDrawGlobal.dsList->lpVtbl = (PVOID) &DirectDrawSurface7_Vtable; +
*ppSurf = (LPDIRECTDRAWSURFACE7)That;
_____
Modified: trunk/reactos/lib/ddraw/main/surface_main.c --- trunk/reactos/lib/ddraw/main/surface_main.c 2005-10-31 00:53:00 UTC (rev 18907) +++ trunk/reactos/lib/ddraw/main/surface_main.c 2005-10-31 01:22:19 UTC (rev 18908) @@ -14,17 +14,14 @@
HRESULT WINAPI Main_DDrawSurface_Initialize (LPDIRECTDRAWSURFACE7 iface, LPDIRECTDRAW pDD, LPDDSURFACEDESC2 pDDSD) { IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface; - - if (This->owner) - return DDERR_ALREADYINITIALIZED; - + if(sizeof(DDSURFACEDESC2) != pDDSD->dwSize) return DDERR_UNSUPPORTED;
if(!(pDDSD->dwFlags & DDSD_CAPS)) return DDERR_INVALIDPARAMS;
- This->owner = (IDirectDrawImpl*)pDD; + This->owner = (IDirectDrawImpl*)pDD;
if (This->owner->DirectDrawGlobal.lpDDCBtmp->HALDD.dwFlags & DDHAL_CB32_CANCREATESURFACE) {