1. Clean up Hal_DirectDraw_CreateSurface

2. Start implemenr createsurface overlay base on Steffen Schulze code. 


svn path=/trunk/; revision=21485
This commit is contained in:
Magnus Olsen
2006-04-07 08:12:13 +00:00
parent fea7d8e806
commit a8c093ce5a
+213 -236
View File
@@ -13,286 +13,263 @@
HRESULT Hal_DirectDraw_CreateSurface (LPDIRECTDRAW7 iface, LPDDSURFACEDESC2 pDDSD, LPDIRECTDRAWSURFACE7 *ppSurf, IUnknown *pUnkOuter)
{
// UINT i;
IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
UINT i;
IDirectDrawImpl* This = (IDirectDrawImpl*)iface;
DDHAL_CREATESURFACEDATA mDdCreateSurface;
DDHAL_CREATESURFACEDATA mDdCreateSurface;
DDHAL_CANCREATESURFACEDATA mDdCanCreateSurface;
mDdCanCreateSurface.lpDD = &This->mDDrawGlobal;
mDdCanCreateSurface.CanCreateSurface = This->mCallbacks.HALDD.CanCreateSurface;
mDdCanCreateSurface.lpDD = &This->mDDrawGlobal;
mDdCanCreateSurface.CanCreateSurface = This->mCallbacks.HALDD.CanCreateSurface;
mDdCreateSurface.lpDD = &This->mDDrawGlobal;
mDdCreateSurface.CreateSurface = This->mCallbacks.HALDD.CreateSurface;
mDdCreateSurface.lpDD = &This->mDDrawGlobal;
mDdCreateSurface.CreateSurface = This->mCallbacks.HALDD.CreateSurface;
/* create primare surface now */
if (pDDSD->ddsCaps.dwCaps & DDSCAPS_PRIMARYSURFACE)
{
memset(&This->mddsdPrimary, 0, sizeof(DDSURFACEDESC));
This->mddsdPrimary.dwSize = sizeof(DDSURFACEDESC);
This->mddsdPrimary.dwFlags = pDDSD->dwFlags;
This->mddsdPrimary.ddsCaps.dwCaps = pDDSD->ddsCaps.dwCaps;
/* create primare surface now */
if (pDDSD->ddsCaps.dwCaps & DDSCAPS_PRIMARYSURFACE)
{
memset(&This->mddsdPrimary, 0, sizeof(DDSURFACEDESC));
This->mddsdPrimary.dwSize = sizeof(DDSURFACEDESC);
This->mddsdPrimary.dwFlags = pDDSD->dwFlags;
This->mddsdPrimary.ddsCaps.dwCaps = pDDSD->ddsCaps.dwCaps;
mDdCanCreateSurface.bIsDifferentPixelFormat = FALSE; //isDifferentPixelFormat;
mDdCanCreateSurface.lpDDSurfaceDesc = &This->mddsdPrimary; // pDDSD;
mDdCanCreateSurface.lpDDSurfaceDesc = &This->mddsdPrimary; // pDDSD;
if (This->mHALInfo.lpDDCallbacks->CanCreateSurface(&mDdCanCreateSurface)== DDHAL_DRIVER_NOTHANDLED)
{
return DDERR_NOTINITIALIZED;
}
{
return DDERR_NOTINITIALIZED;
}
if (mDdCanCreateSurface.ddRVal != DD_OK)
{
return DDERR_NOTINITIALIZED;
}
memset(&This->mPrimaryGlobal, 0, sizeof(DDRAWI_DDRAWSURFACE_GBL));
This->mPrimaryGlobal.dwGlobalFlags = DDRAWISURFGBL_ISGDISURFACE;
This->mPrimaryGlobal.lpDD = &This->mDDrawGlobal;
This->mPrimaryGlobal.lpDDHandle = &This->mDDrawGlobal;
This->mPrimaryGlobal.wWidth = (WORD)This->mpModeInfos[0].dwWidth;
This->mPrimaryGlobal.wHeight = (WORD)This->mpModeInfos[0].dwHeight;
This->mPrimaryGlobal.lPitch = This->mpModeInfos[0].lPitch;
if (mDdCanCreateSurface.ddRVal != DD_OK)
{
return DDERR_NOTINITIALIZED;
}
memset(&This->mPrimaryMore, 0, sizeof(DDRAWI_DDRAWSURFACE_MORE));
This->mPrimaryMore.dwSize = sizeof(DDRAWI_DDRAWSURFACE_MORE);
memset(&This->mPrimaryGlobal, 0, sizeof(DDRAWI_DDRAWSURFACE_GBL));
This->mPrimaryGlobal.dwGlobalFlags = DDRAWISURFGBL_ISGDISURFACE;
This->mPrimaryGlobal.lpDD = &This->mDDrawGlobal;
This->mPrimaryGlobal.lpDDHandle = &This->mDDrawGlobal;
This->mPrimaryGlobal.wWidth = (WORD)This->mpModeInfos[0].dwWidth;
This->mPrimaryGlobal.wHeight = (WORD)This->mpModeInfos[0].dwHeight;
This->mPrimaryGlobal.lPitch = This->mpModeInfos[0].lPitch;
memset(&This->mPrimaryLocal, 0, sizeof(DDRAWI_DDRAWSURFACE_LCL));
This->mPrimaryLocal.lpGbl = &This->mPrimaryGlobal;
This->mPrimaryLocal.lpSurfMore = &This->mPrimaryMore;
This->mPrimaryLocal.dwProcessId = GetCurrentProcessId();
memset(&This->mPrimaryMore, 0, sizeof(DDRAWI_DDRAWSURFACE_MORE));
This->mPrimaryMore.dwSize = sizeof(DDRAWI_DDRAWSURFACE_MORE);
memset(&This->mPrimaryLocal, 0, sizeof(DDRAWI_DDRAWSURFACE_LCL));
This->mPrimaryLocal.lpGbl = &This->mPrimaryGlobal;
This->mPrimaryLocal.lpSurfMore = &This->mPrimaryMore;
This->mPrimaryLocal.dwProcessId = GetCurrentProcessId();
// FIXME Check the flags if we shall create a primaresurface for overlay or something else
This->mPrimaryLocal.dwFlags = DDRAWISURF_PARTOFPRIMARYCHAIN|DDRAWISURF_HASOVERLAYDATA|DDRAWISURF_HASDC;
This->mPrimaryLocal.ddsCaps.dwCaps = This->mddsdPrimary.ddsCaps.dwCaps;
This->mpPrimaryLocals[0] = &This->mPrimaryLocal;
/*
FIXME Check the flags if we shall create a primaresurface for overlay or something else
Examine windows which flags are being set for we assume this is right
*/
mDdCreateSurface.lpDDSurfaceDesc = &This->mddsdPrimary;//pDDSD;
mDdCreateSurface.lplpSList = This->mpPrimaryLocals; //cSurfaces;
mDdCreateSurface.dwSCnt = This->mDDrawGlobal.dsList->dwIntRefCnt ; //ppSurfaces;
if (This->mHALInfo.lpDDCallbacks->CreateSurface(&mDdCreateSurface) == DDHAL_DRIVER_NOTHANDLED)
{
return DDERR_NOTINITIALIZED;
}
This->mPrimaryLocal.dwFlags = DDRAWISURF_PARTOFPRIMARYCHAIN|DDRAWISURF_HASOVERLAYDATA;
This->mPrimaryLocal.ddsCaps.dwCaps = This->mddsdPrimary.ddsCaps.dwCaps;
This->mpPrimaryLocals[0] = &This->mPrimaryLocal;
if (mDdCreateSurface.ddRVal != DD_OK)
{
return mDdCreateSurface.ddRVal;
}
}
else if (pDDSD->ddsCaps.dwCaps & DDSCAPS_BACKBUFFER)
{
DX_STUB;
}
else if (pDDSD->ddsCaps.dwCaps & DDSCAPS_TEXTURE)
{
DX_STUB;
}
else if (pDDSD->ddsCaps.dwCaps & DDSCAPS_ZBUFFER)
{
DX_STUB;
}
else if (pDDSD->ddsCaps.dwCaps & DDSCAPS_OFFSCREENPLAIN)
{
DX_STUB;
}
// return DDERR_INVALIDSURFACETYPE;
mDdCreateSurface.lpDDSurfaceDesc = &This->mddsdPrimary;
mDdCreateSurface.lplpSList = This->mpPrimaryLocals;
mDdCreateSurface.dwSCnt = This->mDDrawGlobal.dsList->dwIntRefCnt ;
/*
*
*
*
*/
if (This->mHALInfo.lpDDCallbacks->CreateSurface(&mDdCreateSurface) == DDHAL_DRIVER_NOTHANDLED)
{
return DDERR_NOTINITIALIZED;
}
/* create overlay surface now */
/*
memset(&This->mddsdOverlay, 0, sizeof(DDSURFACEDESC));
This->mddsdOverlay.dwSize = sizeof(DDSURFACEDESC);
This->mddsdOverlay.dwFlags = DDSD_CAPS | DDSD_PIXELFORMAT | DDSD_BACKBUFFERCOUNT | DDSD_WIDTH | DDSD_HEIGHT;
if (mDdCreateSurface.ddRVal != DD_OK)
{
return mDdCreateSurface.ddRVal;
}
This->mddsdOverlay.ddsCaps.dwCaps = DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM | DDSCAPS_COMPLEX | DDSCAPS_FLIP;
return DD_OK;
This->mddsdOverlay.dwWidth = 100; //pels;
This->mddsdOverlay.dwHeight = 100; // lines;
This->mddsdOverlay.dwBackBufferCount = 1; //cBuffers;
}
else if (pDDSD->ddsCaps.dwCaps & DDSCAPS_OVERLAY)
{
memset(&This->mddsdOverlay, 0, sizeof(DDSURFACEDESC));
This->mddsdOverlay.dwSize = sizeof(DDSURFACEDESC);
This->mddsdOverlay.dwFlags = DDSD_CAPS | DDSD_PIXELFORMAT | DDSD_BACKBUFFERCOUNT | DDSD_WIDTH | DDSD_HEIGHT;
This->mddsdOverlay.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
This->mddsdOverlay.ddpfPixelFormat.dwFlags = DDPF_RGB;
This->mddsdOverlay.ddpfPixelFormat.dwRGBBitCount = 32;
This->mddsdOverlay.ddsCaps.dwCaps = DDSCAPS_OVERLAY | DDSCAPS_VIDEOMEMORY | DDSCAPS_LOCALVIDMEM | DDSCAPS_COMPLEX | DDSCAPS_FLIP;
//DDHAL_CANCREATESURFACEDATA mDdCanCreateSurface;
mDdCanCreateSurface.lpDD = &This->mDDrawGlobal;
mDdCanCreateSurface.CanCreateSurface = This->mCallbacks.HALDD.CanCreateSurface;
mDdCanCreateSurface.bIsDifferentPixelFormat = TRUE; //isDifferentPixelFormat;
mDdCanCreateSurface.lpDDSurfaceDesc = &This->mddsdOverlay; // pDDSD;
This->mddsdOverlay.dwWidth = 100; //pels;
This->mddsdOverlay.dwHeight = 100; // lines;
This->mddsdOverlay.dwBackBufferCount = 1; //cBuffers;
This->mddsdOverlay.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
This->mddsdOverlay.ddpfPixelFormat.dwFlags = DDPF_RGB;
This->mddsdOverlay.ddpfPixelFormat.dwRGBBitCount = 32;
mDdCanCreateSurface.lpDD = &This->mDDrawGlobal;
mDdCanCreateSurface.CanCreateSurface = This->mCallbacks.HALDD.CanCreateSurface;
mDdCanCreateSurface.bIsDifferentPixelFormat = TRUE; //isDifferentPixelFormat;
mDdCanCreateSurface.lpDDSurfaceDesc = &This->mddsdOverlay; // pDDSD;
if (This->mHALInfo.lpDDCallbacks->CanCreateSurface(&mDdCanCreateSurface)== DDHAL_DRIVER_NOTHANDLED)
{
return DDERR_NOTINITIALIZED;
}
if (This->mHALInfo.lpDDCallbacks->CanCreateSurface(&mDdCanCreateSurface)== DDHAL_DRIVER_NOTHANDLED)
{
return DDERR_NOTINITIALIZED;
}
if (mDdCanCreateSurface.ddRVal != DD_OK)
{
return DDERR_NOTINITIALIZED;
}
if (mDdCanCreateSurface.ddRVal != DD_OK)
{
return DDERR_NOTINITIALIZED;
}
memset(&This->mOverlayGlobal, 0, sizeof(DDRAWI_DDRAWSURFACE_GBL));
This->mOverlayGlobal.dwGlobalFlags = 0;
This->mOverlayGlobal.lpDD = &This->mDDrawGlobal;
This->mOverlayGlobal.lpDDHandle = &This->mDDrawGlobal;
This->mOverlayGlobal.wWidth = (WORD)This->mddsdOverlay.dwWidth;
This->mOverlayGlobal.wHeight = (WORD)This->mddsdOverlay.dwHeight;
This->mOverlayGlobal.lPitch = -1;
This->mOverlayGlobal.ddpfSurface = This->mddsdOverlay.ddpfPixelFormat;
memset(&This->mOverlayGlobal, 0, sizeof(DDRAWI_DDRAWSURFACE_GBL));
This->mOverlayGlobal.dwGlobalFlags = 0;
This->mOverlayGlobal.lpDD = &This->mDDrawGlobal;
This->mOverlayGlobal.lpDDHandle = &This->mDDrawGlobal;
This->mOverlayGlobal.wWidth = (WORD)This->mddsdOverlay.dwWidth;
This->mOverlayGlobal.wHeight = (WORD)This->mddsdOverlay.dwHeight;
This->mOverlayGlobal.lPitch = -1;
This->mOverlayGlobal.ddpfSurface = This->mddsdOverlay.ddpfPixelFormat;
// setup front- and backbuffer surfaces
UINT cSurfaces = This->mddsdOverlay.dwBackBufferCount + 1;
for (i = 0; i < cSurfaces; i++)
{
memset(&This->mOverlayMore[i], 0, sizeof(DDRAWI_DDRAWSURFACE_MORE));
This->mOverlayMore[i].dwSize = sizeof(DDRAWI_DDRAWSURFACE_MORE);
// setup front- and backbuffer surfaces
UINT cSurfaces = This->mddsdOverlay.dwBackBufferCount + 1;
for (i = 0; i < cSurfaces; i++)
{
memset(&This->mOverlayMore[i], 0, sizeof(DDRAWI_DDRAWSURFACE_MORE));
This->mOverlayMore[i].dwSize = sizeof(DDRAWI_DDRAWSURFACE_MORE);
memset(&This->mOverlayLocal[i], 0, sizeof(DDRAWI_DDRAWSURFACE_LCL));
This->mOverlayLocal[i].lpGbl = &This->mOverlayGlobal;
This->mOverlayLocal[i].lpSurfMore = &This->mOverlayMore[i];
This->mOverlayLocal[i].dwProcessId = GetCurrentProcessId();
This->mOverlayLocal[i].dwFlags = (i == 0) ?
(DDRAWISURF_IMPLICITROOT|DDRAWISURF_FRONTBUFFER):
(DDRAWISURF_IMPLICITCREATE|DDRAWISURF_BACKBUFFER);
memset(&This->mOverlayLocal[i], 0, sizeof(DDRAWI_DDRAWSURFACE_LCL));
This->mOverlayLocal[i].lpGbl = &This->mOverlayGlobal;
This->mOverlayLocal[i].lpSurfMore = &This->mOverlayMore[i];
This->mOverlayLocal[i].dwProcessId = GetCurrentProcessId();
This->mOverlayLocal[i].dwFlags = (i == 0) ?
(DDRAWISURF_IMPLICITROOT|DDRAWISURF_FRONTBUFFER):
(DDRAWISURF_IMPLICITCREATE|DDRAWISURF_BACKBUFFER);
This->mOverlayLocal[i].dwFlags |=
DDRAWISURF_ATTACHED|DDRAWISURF_ATTACHED_FROM|
DDRAWISURF_HASPIXELFORMAT|
DDRAWISURF_HASOVERLAYDATA;
This->mOverlayLocal[i].dwFlags |= DDRAWISURF_ATTACHED|DDRAWISURF_ATTACHED_FROM| DDRAWISURF_HASPIXELFORMAT| DDRAWISURF_HASOVERLAYDATA;
This->mOverlayLocal[i].ddsCaps.dwCaps = This->mddsdOverlay.ddsCaps.dwCaps;
This->mpOverlayLocals[i] = &This->mOverlayLocal[i];
}
This->mOverlayLocal[i].ddsCaps.dwCaps = This->mddsdOverlay.ddsCaps.dwCaps;
This->mpOverlayLocals[i] = &This->mOverlayLocal[i];
}
for ( i = 0; i < cSurfaces; i++)
{
UINT j = (i + 1) % cSurfaces;
if (!DdAttachSurface(This->mpOverlayLocals[i], This->mpOverlayLocals[j]))
{
// derr(L"DirectDrawImpl[%08x]::__setupDevice DdAttachSurface(%d, %d) failed", this, i, j);
return DD_FALSE;
}
}
// DDHAL_CREATESURFACEDATA mDdCreateSurface;
mDdCreateSurface.lpDD = &This->mDDrawGlobal;
mDdCreateSurface.CreateSurface = This->mCallbacks.HALDD.CreateSurface;
mDdCreateSurface.lpDDSurfaceDesc = &This->mddsdOverlay;//pDDSD;
mDdCreateSurface.lplpSList = This->mpOverlayLocals; //cSurfaces;
mDdCreateSurface.dwSCnt = 1 ; //ppSurfaces;
if (This->mHALInfo.lpDDCallbacks->CreateSurface(&mDdCreateSurface) == DDHAL_DRIVER_NOTHANDLED)
{
return DDERR_NOTINITIALIZED;
}
for (i = 0; i < cSurfaces; i++)
{
UINT j = (i + 1) % cSurfaces;
if (!DdAttachSurface(This->mpOverlayLocals[i], This->mpOverlayLocals[j]))
{
// derr(L"DirectDrawImpl[%08x]::__setupDevice DdAttachSurface(%d, %d) failed", this, i, j);
return DD_FALSE;
}
}
mDdCreateSurface.lpDD = &This->mDDrawGlobal;
mDdCreateSurface.CreateSurface = This->mCallbacks.HALDD.CreateSurface;
mDdCreateSurface.lpDDSurfaceDesc = &This->mddsdOverlay;//pDDSD;
mDdCreateSurface.lplpSList = This->mpOverlayLocals; //cSurfaces;
mDdCreateSurface.dwSCnt = 1 ; //ppSurfaces;
if (mDdCreateSurface.ddRVal != DD_OK)
{
return mDdCreateSurface.ddRVal;
}
//mSrcRect.w = mddsdOverlay.dwWidth;
//mSrcRect.h = mddsdOverlay.dwHeight;
//__alignBounds();
DDHAL_UPDATEOVERLAYDATA mDdUpdateOverlay;
mDdUpdateOverlay.lpDD = &This->mDDrawGlobal;
mDdUpdateOverlay.UpdateOverlay = This->mCallbacks.HALDDSurface.UpdateOverlay;
mDdUpdateOverlay.lpDDDestSurface = This->mpPrimaryLocals[0];
mDdUpdateOverlay.lpDDSrcSurface = This->mpOverlayLocals[0];//pDDSurface;
mDdUpdateOverlay.dwFlags = DDOVER_SHOW;
if (This->mHALInfo.lpDDCallbacks->CreateSurface(&mDdCreateSurface) == DDHAL_DRIVER_NOTHANDLED)
{
return DDERR_NOTINITIALIZED;
}
mDdUpdateOverlay.rDest.top = 0;
mDdUpdateOverlay.rDest.left = 0;
mDdUpdateOverlay.rDest.right = 50;
mDdUpdateOverlay.rDest.bottom = 50;
mDdUpdateOverlay.rSrc.top = 0;
mDdUpdateOverlay.rSrc.left = 0;
mDdUpdateOverlay.rSrc.right = 50;
mDdUpdateOverlay.rSrc.bottom = 50;
if ( mDdUpdateOverlay.UpdateOverlay(&mDdUpdateOverlay) == DDHAL_DRIVER_NOTHANDLED)
{
return DDERR_NOTINITIALIZED;
}
if (mDdCreateSurface.ddRVal != DD_OK)
{
return mDdCreateSurface.ddRVal;
}
DDHAL_UPDATEOVERLAYDATA mDdUpdateOverlay;
mDdUpdateOverlay.lpDD = &This->mDDrawGlobal;
mDdUpdateOverlay.UpdateOverlay = This->mCallbacks.HALDDSurface.UpdateOverlay;
mDdUpdateOverlay.lpDDDestSurface = This->mpPrimaryLocals[0];
mDdUpdateOverlay.lpDDSrcSurface = This->mpOverlayLocals[0];//pDDSurface;
mDdUpdateOverlay.dwFlags = DDOVER_SHOW;
mDdUpdateOverlay.rDest.top = 0;
mDdUpdateOverlay.rDest.left = 0;
mDdUpdateOverlay.rDest.right = 50;
mDdUpdateOverlay.rDest.bottom = 50;
if (mDdUpdateOverlay.ddRVal != DD_OK)
{
return mDdUpdateOverlay.ddRVal;
}
*/
mDdUpdateOverlay.rSrc.top = 0;
mDdUpdateOverlay.rSrc.left = 0;
mDdUpdateOverlay.rSrc.right = 50;
mDdUpdateOverlay.rSrc.bottom = 50;
if (mDdUpdateOverlay.UpdateOverlay(&mDdUpdateOverlay) == DDHAL_DRIVER_NOTHANDLED)
{
return DDERR_NOTINITIALIZED;
}
if (mDdUpdateOverlay.ddRVal != DD_OK)
{
return mDdUpdateOverlay.ddRVal;
}
DDHAL_BLTDATA mDdBlt;
mDdBlt.lpDDDestSurface = This->mpPrimaryLocals[0];
if (!DdResetVisrgn(This->mpPrimaryLocals[0], NULL))
{
// derr(L"DirectDrawImpl[%08x]::_clear DdResetVisrgn failed", this);
return DDERR_NOGDI;
}
memset(&mDdBlt, 0, sizeof(DDHAL_BLTDATA));
memset(&mDdBlt.bltFX, 0, sizeof(DDBLTFX));
mDdBlt.bltFX.dwSize = sizeof(DDBLTFX);
mDdBlt.lpDD = &This->mDDrawGlobal;
mDdBlt.Blt = This->mCallbacks.HALDDSurface.Blt;
mDdBlt.lpDDDestSurface = This->mpPrimaryLocals[0];
This->mpPrimaryLocals[0]->hDC = (ULONG_PTR)GetDC(This->CooperativeHWND);
mDdBlt.rDest.top = 50;
mDdBlt.rDest.bottom = 100;
mDdBlt.rDest.left = 0;
mDdBlt.rDest.right = 100;
mDdBlt.lpDDSrcSurface = NULL;
mDdBlt.IsClipped = FALSE;
mDdBlt.bltFX.dwFillColor = 0xFFFF00;
mDdBlt.dwFlags = DDBLT_COLORFILL | DDBLT_WAIT;
if (mDdBlt.Blt(&mDdBlt) != DDHAL_DRIVER_HANDLED)
return DD_OK;
}
else if (pDDSD->ddsCaps.dwCaps & DDSCAPS_BACKBUFFER)
{
return DDHAL_DRIVER_HANDLED;
}
if (mDdBlt.ddRVal!=DD_OK)
DX_STUB;
}
else if (pDDSD->ddsCaps.dwCaps & DDSCAPS_TEXTURE)
{
return mDdBlt.ddRVal;
}
return DD_OK;
DX_STUB;
}
else if (pDDSD->ddsCaps.dwCaps & DDSCAPS_ZBUFFER)
{
DX_STUB;
}
else if (pDDSD->ddsCaps.dwCaps & DDSCAPS_OFFSCREENPLAIN)
{
DX_STUB;
}
return DDERR_INVALIDSURFACETYPE;
}
HRESULT Hal_DDrawSurface_Blt(LPDIRECTDRAWSURFACE7 iface, LPRECT rDest,
LPDIRECTDRAWSURFACE7 src, LPRECT rSrc, DWORD dwFlags, LPDDBLTFX lpbltfx)
{
DX_STUB;
// DDHAL_BLTDATA mDdBlt;
// mDdBlt.lpDDDestSurface = This->mpPrimaryLocals[0];
// if (!DdResetVisrgn(This->mpPrimaryLocals[0], NULL))
// {
// // derr(L"DirectDrawImpl[%08x]::_clear DdResetVisrgn failed", this);
// return DDERR_NOGDI;
// }
// memset(&mDdBlt, 0, sizeof(DDHAL_BLTDATA));
// memset(&mDdBlt.bltFX, 0, sizeof(DDBLTFX));
// mDdBlt.bltFX.dwSize = sizeof(DDBLTFX);
// mDdBlt.lpDD = &This->mDDrawGlobal;
// mDdBlt.Blt = This->mCallbacks.HALDDSurface.Blt;
// mDdBlt.lpDDDestSurface = This->mpPrimaryLocals[0];
//
// This->mpPrimaryLocals[0]->hDC = (ULONG_PTR)GetDC(This->CooperativeHWND);
// mDdBlt.rDest.top = 50;
// mDdBlt.rDest.bottom = 100;
// mDdBlt.rDest.left = 0;
// mDdBlt.rDest.right = 100;
// mDdBlt.lpDDSrcSurface = NULL;
// mDdBlt.IsClipped = FALSE;
// mDdBlt.bltFX.dwFillColor = 0xFFFF00;
// mDdBlt.dwFlags = DDBLT_COLORFILL | DDBLT_WAIT;
// if (mDdBlt.Blt(&mDdBlt) != DDHAL_DRIVER_HANDLED)
//{
// return DDHAL_DRIVER_HANDLED;
// }
//
// if (mDdBlt.ddRVal!=DD_OK)
//{
// return mDdBlt.ddRVal;
// }
IDirectDrawSurfaceImpl* This = (IDirectDrawSurfaceImpl*)iface;
IDirectDrawSurfaceImpl* That = (IDirectDrawSurfaceImpl*)src;