From 47409766bfed5a0a1ef5b0a6c01953f88e47d86b Mon Sep 17 00:00:00 2001 From: Magnus Olsen Date: Sat, 8 Apr 2006 23:01:04 +0000 Subject: [PATCH] parly implement surface_Lock it does not work yet but here is the code almost complete for HAL svn path=/trunk/; revision=21520 --- reactos/dll/directx/ddraw/hal/surface_hal.c | 32 ++++++++++++++++++- reactos/dll/directx/ddraw/main/surface_main.c | 5 +++ reactos/dll/directx/ddraw/rosdraw.h | 16 ++++++++++ 3 files changed, 52 insertions(+), 1 deletion(-) diff --git a/reactos/dll/directx/ddraw/hal/surface_hal.c b/reactos/dll/directx/ddraw/hal/surface_hal.c index cce30a05198..ae92639f312 100644 --- a/reactos/dll/directx/ddraw/hal/surface_hal.c +++ b/reactos/dll/directx/ddraw/hal/surface_hal.c @@ -315,7 +315,37 @@ HRESULT Hal_DDrawSurface_Blt(LPDIRECTDRAWSURFACE7 iface, LPRECT rDest, HRESULT Hal_DDrawSurface_Lock(LPDIRECTDRAWSURFACE7 iface, LPRECT prect, LPDDSURFACEDESC2 pDDSD, DWORD flags, HANDLE event) { - DX_STUB; + + IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface; + + + DDHAL_LOCKDATA Lock; + + if (prect!=NULL) + { + Lock.bHasRect = TRUE; + memcpy(&Lock.rArea,prect,sizeof(RECTL)); + } + else + { + Lock.bHasRect = FALSE; + } + + Lock.ddRVal = DDERR_NOTPALETTIZED; + Lock.Lock = This->owner->mCallbacks.HALDDSurface.Lock; + Lock.dwFlags = flags; + Lock.lpDDSurface = This->Surf->mpPrimaryLocals[0]; + Lock.lpDD = &This->owner->mDDrawGlobal; + // FIXME lpSurfData + //Lock.lpSurfData = + + if (This->owner->mCallbacks.HALDDSurface.Lock(&Lock)!= DDHAL_DRIVER_NOTHANDLED) + { + return Lock.ddRVal; + } + // FIXME LPDDSURFACEDESC2 + + return DD_OK; } HRESULT Hal_DDrawSurface_Unlock(LPDIRECTDRAWSURFACE7 iface, LPRECT pRect) { diff --git a/reactos/dll/directx/ddraw/main/surface_main.c b/reactos/dll/directx/ddraw/main/surface_main.c index a51665b083d..91c35829a1a 100644 --- a/reactos/dll/directx/ddraw/main/surface_main.c +++ b/reactos/dll/directx/ddraw/main/surface_main.c @@ -82,6 +82,11 @@ HRESULT WINAPI Main_DDrawSurface_Lock (LPDIRECTDRAWSURFACE7 iface, LPRECT prect, IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface; + if (event != NULL) + { + return DDERR_INVALIDPARAMS; + } + if (This->owner->mCallbacks.HALDDSurface.dwFlags & DDHAL_SURFCB32_LOCK) { return Hal_DDrawSurface_Lock( iface, prect, pDDSD, flags, event); diff --git a/reactos/dll/directx/ddraw/rosdraw.h b/reactos/dll/directx/ddraw/rosdraw.h index ecd5ae0cc33..178865ed992 100644 --- a/reactos/dll/directx/ddraw/rosdraw.h +++ b/reactos/dll/directx/ddraw/rosdraw.h @@ -10,6 +10,22 @@ #include #include + +/* this sturct are not longer in DDK + I did recrate it by looking diffent betwin DD_xx struct and _DDHAL strucrt + only diffent I found was the global pointer have been change from LPDDRAWI_DDRAWSURFACE_GBL + to DD_DIRECTDRAW_GLOBAL +*/ + +typedef struct _DDHAL_MAPMEMORYDATA +{ + LPDDRAWI_DDRAWSURFACE_GBL lpDD; + BOOL bMap; + HANDLE hProcess; + FLATPTR fpProcess; + HRESULT ddRVal; +} DDHAL_MAPMEMORYDATA; + /* own macro to alloc memmory */ #define DxHeapMemAlloc(m) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, m) #define DxHeapMemFree(p) HeapFree(GetProcessHeap(), 0, p);