From c709116fa06b1105d9db73935798ea74f166e9ff Mon Sep 17 00:00:00 2001 From: Maarten Bosma Date: Sun, 30 Oct 2005 08:46:46 +0000 Subject: [PATCH] Check if CanCreateSurface is implemented by the driver before calling it. svn path=/trunk/; revision=18872 --- reactos/lib/ddraw/main/surface.c | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/reactos/lib/ddraw/main/surface.c b/reactos/lib/ddraw/main/surface.c index 1bc261a5ac8..0c47fc6421b 100644 --- a/reactos/lib/ddraw/main/surface.c +++ b/reactos/lib/ddraw/main/surface.c @@ -26,17 +26,20 @@ HRESULT WINAPI Main_DDrawSurface_Initialize (LPDIRECTDRAWSURFACE7 iface, LPDIREC 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(&CanCreateData) == DDHAL_DRIVER_NOTHANDLED) + return DDERR_INVALIDPARAMS; - if (This->owner->DirectDrawGlobal.lpDDCBtmp->HALDD.CanCreateSurface(&CanCreateData) == 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 @@ HRESULT WINAPI Main_DDrawSurface_Initialize (LPDIRECTDRAWSURFACE7 iface, LPDIREC CreateData.lplpSList = pLocal; /* this is the call we were waiting for */ + MessageBox(0,0,0,0); if(This->owner->DirectDrawGlobal.lpDDCBtmp->HALDD.CreateSurface(&CreateData) == DDHAL_DRIVER_NOTHANDLED) return DDERR_INVALIDPARAMS;