Check if CanCreateSurface is implemented by the driver before calling
it.
Modified: trunk/reactos/lib/ddraw/main/surface.c
_____
Modified: trunk/reactos/lib/ddraw/main/surface.c
--- trunk/reactos/lib/ddraw/main/surface.c 2005-10-30 08:41:19 UTC
(rev 18871)
+++ trunk/reactos/lib/ddraw/main/surface.c 2005-10-30 08:46:46 UTC
(rev 18872)
@@ -26,17 +26,20 @@
This->owner = (IDirectDrawImpl*)pDD;
- /* can the driver create the surface */
- DDHAL_CANCREATESURFACEDATA CanCreateData;
- memset(&CanCreateData, 0, sizeof(DDHAL_CANCREATESURFACEDATA));
- CanCreateData.lpDD = &This->owner->DirectDrawGlobal;
- CanCreateData.lpDDSurfaceDesc = (DDSURFACEDESC*)pDDSD;
+ if (This->owner->DirectDrawGlobal.lpDDCBtmp->HALDD.dwFlags &
DDHAL_CB32_CANCREATESURFACE)
+ {
+ /* can the driver create the surface */
+ DDHAL_CANCREATESURFACEDATA CanCreateData;
+ memset(&CanCreateData, 0,
sizeof(DDHAL_CANCREATESURFACEDATA));
+ CanCreateData.lpDD = &This->owner->DirectDrawGlobal;
+ CanCreateData.lpDDSurfaceDesc = (DDSURFACEDESC*)pDDSD;
+
+ if
(This->owner->DirectDrawGlobal.lpDDCBtmp->HALDD.CanCreateSurface(&CanCre
ateData) == DDHAL_DRIVER_NOTHANDLED)
+ return DDERR_INVALIDPARAMS;
- if
(This->owner->DirectDrawGlobal.lpDDCBtmp->HALDD.CanCreateSurface(&CanCre
ateData) == DDHAL_DRIVER_NOTHANDLED)
- return DDERR_INVALIDPARAMS;
-
- if(CanCreateData.ddRVal != DD_OK)
- return CanCreateData.ddRVal;
+ if(CanCreateData.ddRVal != DD_OK)
+ return CanCreateData.ddRVal;
+ }
/* down here we got a crach */
@@ -81,6 +84,7 @@
CreateData.lplpSList = pLocal;
/* this is the call we were waiting for */
+ MessageBox(0,0,0,0);
if(This->owner->DirectDrawGlobal.lpDDCBtmp->HALDD.CreateSurface(&CreateD
ata) == DDHAL_DRIVER_NOTHANDLED)
return DDERR_INVALIDPARAMS;