From b7f485d935479f6d47d1ef203a7758c9fc177a2b Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Sat, 24 Apr 2021 08:14:48 +0200 Subject: [PATCH] #83 fix surface lock with rect --- src/ddsurface.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/ddsurface.c b/src/ddsurface.c index aef009e..17aa4a4 100644 --- a/src/ddsurface.c +++ b/src/ddsurface.c @@ -690,7 +690,15 @@ HRESULT dds_Lock(IDirectDrawSurfaceImpl *This, LPRECT lpDestRect, LPDDSURFACEDES { dbg_dump_dds_lock_flags(dwFlags); - return dds_GetSurfaceDesc(This, lpDDSurfaceDesc); + HRESULT ret = dds_GetSurfaceDesc(This, lpDDSurfaceDesc); + + if (lpDestRect && lpDDSurfaceDesc && lpDestRect->left >= 0 && lpDestRect->top >= 0) + { + lpDDSurfaceDesc->lpSurface = + (char*)This->surface + (lpDestRect->left * This->lx_pitch) + (lpDestRect->top * This->l_pitch); + } + + return ret; } HRESULT dds_SetColorKey(IDirectDrawSurfaceImpl *This, DWORD flags, LPDDCOLORKEY colorKey)