bltblt is hacked now. but it draw a yellow surface now

svn path=/trunk/; revision=25134
This commit is contained in:
Magnus Olsen 2006-12-12 19:34:33 +00:00
parent 0d5961e9e4
commit fe01bb3090

View file

@ -73,59 +73,45 @@ HRESULT WINAPI Main_DDrawSurface_Blt(LPDIRECTDRAWSURFACE7 iface, LPRECT rdst,
LPDDRAWI_DDRAWSURFACE_INT ThisDest = (LPDDRAWI_DDRAWSURFACE_INT)iface; LPDDRAWI_DDRAWSURFACE_INT ThisDest = (LPDDRAWI_DDRAWSURFACE_INT)iface;
LPDDRAWI_DDRAWSURFACE_INT ThisSrc = (LPDDRAWI_DDRAWSURFACE_INT)src; LPDDRAWI_DDRAWSURFACE_INT ThisSrc = (LPDDRAWI_DDRAWSURFACE_INT)src;
DDHAL_BLTDATA BltData; DDHAL_BLTDATA mDdBlt;
DX_WINDBG_trace(); DX_WINDBG_trace();
RtlZeroMemory(&BltData,sizeof(DDHAL_BLTDATA));
BltData.ddRVal = DDERR_GENERIC;
if (ThisDest->lpLcl->lpGbl->lpDD->lpDDCBtmp->cbDDSurfaceCallbacks.dwFlags & DDHAL_SURFCB32_BLT)
{
BltData.lpDD = ThisDest->lpLcl->lpGbl->lpDD;
BltData.Blt = ThisDest->lpLcl->lpGbl->lpDD->lpDDCBtmp->cbDDSurfaceCallbacks.Blt;
BltData.lpDDDestSurface = ThisDest->lpLcl;
BltData.lpDDSrcSurface = ThisSrc ? ThisSrc->lpLcl : 0;
BltData.dwFlags = dwFlags;
if (rdst != NULL) mDdBlt.lpDDDestSurface = ThisDest->lpLcl->lpSurfMore->slist[0];
{ if (!DdResetVisrgn( ThisDest->lpLcl->lpSurfMore->slist[0], NULL))
memmove (&BltData.rSrc, rdst, sizeof (RECTL)); {
} // derr(L"DirectDrawImpl[%08x]::_clear DdResetVisrgn failed", this);
}
if (rsrc != NULL) ZeroMemory(&mDdBlt, sizeof(DDHAL_BLTDATA));
{ ZeroMemory(&mDdBlt.bltFX, sizeof(DDBLTFX));
memmove (&BltData.rDest, rsrc, sizeof (RECTL)); mDdBlt.bltFX.dwSize = sizeof(DDBLTFX);
}
if (lpbltfx != NULL) mDdBlt.lpDD = ThisDest->lpLcl->lpSurfMore->lpDD_lcl->lpGbl;
{ mDdBlt.Blt = ThisDest->lpLcl->lpSurfMore->lpDD_lcl->lpDDCB->cbDDSurfaceCallbacks.Blt;
memmove (&BltData.bltFX, lpbltfx, sizeof (DDBLTFX)); mDdBlt.lpDDDestSurface = ThisDest->lpLcl->lpSurfMore->slist[0];
}
ThisDest->lpLcl->lpSurfMore->slist[0]->hDC = ThisDest->lpLcl->lpSurfMore->lpDD_lcl->hDC; // This->lpLcl->hWnd;
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)
{
//printf("Fail to mDdBlt = DDHAL_DRIVER_HANDLED\n");
return DDHAL_DRIVER_HANDLED;
}
DX_STUB_str("FIXME : Fill the BltData member dwRectCnt, dwROPFlags, IsClipped, prDestRects, rOrigDest, rOrigSrc before calling Blt\n"); if (mDdBlt.ddRVal!=DD_OK)
{
/* FIXME //printf("Fail to mDdBlt mDdBlt.ddRVal = %d:%s\n",(int)mDdBlt.ddRVal,DDErrorString(mDdBlt.ddRVal));
return mDdBlt.ddRVal;
// BltData.dwRectCnt }
// BltData.dwROPFlags
// BltData.IsClipped
// BltData.prDestRects
// BltData.rOrigDest
// BltData.rOrigSrc
*/
if (!DdResetVisrgn( ThisDest->lpLcl, NULL))
{
return DDERR_NOGDI;
}
if (BltData.Blt(&BltData) == DDHAL_DRIVER_HANDLED)
{
return BltData.ddRVal;
}
}
return DDERR_GENERIC; return DDERR_GENERIC;
} }