From 262cbcdb096eb6c4e17c9e7f96cacd2d92de2ec7 Mon Sep 17 00:00:00 2001 From: Lionel Ulmer Date: Fri, 2 Aug 2002 19:10:16 +0000 Subject: [PATCH] Be less strict on parameter checking in the SetSurfaceDesc function. --- dlls/ddraw/dsurface/dib.c | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/dlls/ddraw/dsurface/dib.c b/dlls/ddraw/dsurface/dib.c index e8b88a20b98..35e01962651 100644 --- a/dlls/ddraw/dsurface/dib.c +++ b/dlls/ddraw/dsurface/dib.c @@ -1014,13 +1014,28 @@ DIB_DirectDrawSurface_SetSurfaceDesc(LPDIRECTDRAWSURFACE7 iface, ICOM_THIS(IDirectDrawSurfaceImpl,iface); DIB_PRIV_VAR(priv, This); HRESULT hr = DD_OK; + DWORD flags = pDDSD->dwFlags; - TRACE("(%p)->(%p,%08lx)\n",iface,pDDSD,dwFlags); - if (pDDSD->dwFlags == DDSD_LPSURFACE) { + if (TRACE_ON(ddraw)) { + TRACE("(%p)->(%p,%08lx)\n",iface,pDDSD,dwFlags); + DDRAW_dump_surface_desc(pDDSD); + } + + if (pDDSD->dwFlags & DDSD_PIXELFORMAT) { + flags &= ~DDSD_PIXELFORMAT; + if (flags & DDSD_LPSURFACE) { + This->surface_desc.u4.ddpfPixelFormat = pDDSD->u4.ddpfPixelFormat; + } else { + FIXME("Change of pixel format without surface re-allocation is not supported !\n"); + } + } + if (pDDSD->dwFlags & DDSD_LPSURFACE) { HBITMAP oldbmp = priv->dib.DIBsection; LPVOID oldsurf = This->surface_desc.lpSurface; BOOL oldc = priv->dib.client_memory; + flags &= ~DDSD_LPSURFACE; + TRACE("new lpSurface=%p\n",pDDSD->lpSurface); This->surface_desc.lpSurface = pDDSD->lpSurface; priv->dib.client_memory = TRUE; @@ -1038,13 +1053,9 @@ DIB_DirectDrawSurface_SetSurfaceDesc(LPDIRECTDRAWSURFACE7 iface, if (!oldc) VirtualFree(oldsurf, 0, MEM_RELEASE); - - return hr; } - else { - FIXME("flags=%08lx\n",pDDSD->dwFlags); - abort(); - hr = E_FAIL; + if (flags) { + WARN("Unhandled flags : %08lx\n", flags); } return hr; }