parly implement surface_Lock it does not work yet but here is the code almost complete for HAL

svn path=/trunk/; revision=21520
This commit is contained in:
Magnus Olsen 2006-04-08 23:01:04 +00:00
parent 7fde42e8fd
commit 47409766bf
3 changed files with 52 additions and 1 deletions

View file

@ -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)
{

View file

@ -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);

View file

@ -10,6 +10,22 @@
#include <d3dhal.h>
#include <ddrawgdi.h>
/* 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);