Implement Surface_GetDC

svn path=/trunk/; revision=21516
This commit is contained in:
Magnus Olsen 2006-04-08 09:04:42 +00:00
parent d574bdb7c7
commit 988d7a9c98
4 changed files with 69 additions and 11 deletions

View file

@ -69,10 +69,13 @@ HRESULT Hal_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDESC2 pDDS
That->Surf->mPrimaryLocal.ddsCaps.dwCaps = That->Surf->mddsdPrimary.ddsCaps.dwCaps;
That->Surf->mpPrimaryLocals[0] = &That->Surf->mPrimaryLocal;
mDdCreateSurface.lpDDSurfaceDesc = &That->Surf->mddsdPrimary;
mDdCreateSurface.lplpSList = That->Surf->mpPrimaryLocals;
mDdCreateSurface.dwSCnt = This->mDDrawGlobal.dsList->dwIntRefCnt ;
if (This->mHALInfo.lpDDCallbacks->CreateSurface(&mDdCreateSurface) == DDHAL_DRIVER_NOTHANDLED)
{
return DDERR_NOTINITIALIZED;
@ -82,12 +85,15 @@ HRESULT Hal_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDESC2 pDDS
{
return mDdCreateSurface.ddRVal;
}
return DD_OK;
}
else if (pDDSD->ddsCaps.dwCaps & DDSCAPS_OVERLAY)
{
DX_STUB_str( "Can not create overlay surface");
////memset(&This->mddsdOverlay, 0, sizeof(DDSURFACEDESC));
//memcpy(&This->mddsdOverlay,pDDSD,sizeof(DDSURFACEDESC));
//This->mddsdOverlay.dwSize = sizeof(DDSURFACEDESC);
@ -208,19 +214,19 @@ HRESULT Hal_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDESC2 pDDS
}
else if (pDDSD->ddsCaps.dwCaps & DDSCAPS_BACKBUFFER)
{
DX_STUB;
DX_STUB_str( "Can not create backbuffer surface");
}
else if (pDDSD->ddsCaps.dwCaps & DDSCAPS_TEXTURE)
{
DX_STUB;
DX_STUB_str( "Can not create texture surface");
}
else if (pDDSD->ddsCaps.dwCaps & DDSCAPS_ZBUFFER)
{
DX_STUB;
DX_STUB_str( "Can not create zbuffer surface");
}
else if (pDDSD->ddsCaps.dwCaps & DDSCAPS_OFFSCREENPLAIN)
{
DX_STUB;
DX_STUB_str( "Can not create offscreenplain surface");
}
return DDERR_INVALIDSURFACETYPE;
@ -289,6 +295,7 @@ HRESULT Hal_DDrawSurface_Blt(LPDIRECTDRAWSURFACE7 iface, LPRECT rDest,
// This->Surf->mpPrimaryLocals[0]->hDC = This->owner->mDDrawGlobal.lpExclusiveOwner->hDC;
// FIXME dectect if it clipped or not
DX_STUB_str( "Can not create offscreenplain surface");
mDdBlt.IsClipped = FALSE;
if (mDdBlt.Blt(&mDdBlt) != DDHAL_DRIVER_HANDLED)
@ -304,3 +311,9 @@ HRESULT Hal_DDrawSurface_Blt(LPDIRECTDRAWSURFACE7 iface, LPRECT rDest,
return DD_OK;
}
HRESULT Hal_DDrawSurface_Lock(LPDIRECTDRAWSURFACE7 iface, LPRECT prect, LPDDSURFACEDESC2
pDDSD, DWORD flags, HANDLE event)
{
DX_STUB;
}

View file

@ -61,16 +61,15 @@ HRESULT WINAPI Main_DDrawSurface_Blt(LPDIRECTDRAWSURFACE7 iface, LPRECT rdst,
HRESULT WINAPI Main_DDrawSurface_Lock (LPDIRECTDRAWSURFACE7 iface, LPRECT prect,
LPDDSURFACEDESC2 pDDSD, DWORD flags, HANDLE event)
{ /*
IDirectDrawSurfaceImpl* That = (IDirectDrawSurfaceImpl*)iface;
{
IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
if (This->mDDrawGlobal.lpDDCBtmp->HALDD.dwFlags & DDHAL_CB32_CREATESURFACE)
if (This->owner->mDDrawGlobal.lpDDCBtmp->HALDD.dwFlags & DDHAL_CB32_CREATESURFACE)
{
return Hal_DDrawSurface_Lock( iiface, LPRECT prect, pDDSD, flags, event);
return Hal_DDrawSurface_Lock( iface, prect, pDDSD, flags, event);
}
return Hel_DDrawSurface_Lock( iiface, LPRECT prect, pDDSD, flags, event);*/
DX_STUB;
return Hel_DDrawSurface_Lock( iface, prect, pDDSD, flags, event);
}
HRESULT WINAPI Main_DDrawSurface_Unlock (LPDIRECTDRAWSURFACE7 iface, LPRECT pRect)
@ -224,7 +223,30 @@ Main_DDrawSurface_GetColorKey(LPDIRECTDRAWSURFACE7 iface, DWORD dwFlags,
HRESULT WINAPI
Main_DDrawSurface_GetDC(LPDIRECTDRAWSURFACE7 iface, HDC *phDC)
{
DX_STUB;
IDirectDrawSurfaceImpl* This;
if (iface == NULL)
{
return DDERR_INVALIDOBJECT;
}
if (phDC == NULL)
{
return DDERR_INVALIDPARAMS;
}
This = (IDirectDrawSurfaceImpl*)iface;
if ((HDC)This->Surf->mPrimaryLocal.hDC == NULL)
{
*phDC = (HDC)This->owner->mDDrawGlobal.lpExclusiveOwner->hDC;
}
else
{
*phDC = (HDC)This->Surf->mpPrimaryLocals[0]->hDC;
}
return DD_OK;
}
HRESULT WINAPI

View file

@ -147,8 +147,11 @@ HRESULT Hal_DirectDraw_FlipToGDISurface(LPDIRECTDRAW7 );
HRESULT Hal_DirectDraw_SetDisplayMode (LPDIRECTDRAW7, DWORD, DWORD, DWORD, DWORD, DWORD );
HRESULT Hal_DDrawSurface_Blt(LPDIRECTDRAWSURFACE7, LPRECT, LPDIRECTDRAWSURFACE7, LPRECT, DWORD, LPDDBLTFX );
HRESULT Hal_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDESC2 pDDSD, IDirectDrawSurfaceImpl *ppSurf, IUnknown *pUnkOuter);
HRESULT Hal_DDrawSurface_Lock(LPDIRECTDRAWSURFACE7 iface, LPRECT prect, LPDDSURFACEDESC2 pDDSD, DWORD flags, HANDLE event);
HRESULT Hel_DirectDraw_Initialize (LPDIRECTDRAW7 );
HRESULT Hel_DirectDraw_SetCooperativeLevel (LPDIRECTDRAW7 );
VOID Hel_DirectDraw_Release (LPDIRECTDRAW7 );
@ -159,6 +162,7 @@ HRESULT Hel_DirectDraw_FlipToGDISurface(LPDIRECTDRAW7 );
HRESULT Hel_DirectDraw_SetDisplayMode (LPDIRECTDRAW7 , DWORD , DWORD ,DWORD , DWORD , DWORD );
HRESULT Hel_DDrawSurface_Blt(LPDIRECTDRAWSURFACE7, LPRECT, LPDIRECTDRAWSURFACE7, LPRECT, DWORD, LPDDBLTFX );
HRESULT Hel_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDESC2 pDDSD, LPDIRECTDRAWSURFACE7 *ppSurf, IUnknown *pUnkOuter);
HRESULT Hel_DDrawSurface_Lock(LPDIRECTDRAWSURFACE7 iface, LPRECT prect, LPDDSURFACEDESC2 pDDSD, DWORD flags, HANDLE event);
/* Setting for HEL should be move to ros special reg key ? */
@ -178,4 +182,14 @@ HRESULT Hel_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDESC2 pDDS
} \
return DDERR_UNSUPPORTED;
#define DX_STUB_str(x) \
static BOOL firstcall = TRUE; \
if (firstcall) \
{ \
char buffer[1024]; \
sprintf ( buffer, "Function %s %s (%s:%d)\n", __FUNCTION__,x,__FILE__,__LINE__ ); \
OutputDebugStringA(buffer); \
firstcall = FALSE; \
}
#endif /* __DDRAW_PRIVATE */

View file

@ -21,3 +21,12 @@ HRESULT Hel_DDrawSurface_Blt(LPDIRECTDRAWSURFACE7 iface, LPRECT rdst,
{
DX_STUB;
}
HRESULT Hel_DDrawSurface_Lock(LPDIRECTDRAWSURFACE7 iface, LPRECT prect, LPDDSURFACEDESC2
pDDSD, DWORD flags, HANDLE event)
{
DX_STUB;
}