[ros-diffs] [greatlrd] 18908: Fix some crach in ddraw.dll startup
process for surface,
we still got crach and surface are being setup wrong. working on
this.
greatlrd at svn.reactos.com
greatlrd at svn.reactos.com
Mon Oct 31 02:22:34 CET 2005
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)
{
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.reactos.org/pipermail/ros-diffs/attachments/20051031/6f494f14/attachment.html
More information about the Ros-diffs
mailing list