1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
|
bool CopySxyToSxy(int xsrc, int ysrc, int x1src, int y1src, DWORD xdest, DWORD ydest,
LPDIRECTDRAWSURFACE lpDDSSource, // source surface
LPDIRECTDRAWSURFACE lpDDSDest // destination surface
)
{
// Je n'utilise pas bltfast !!!
HRESULT hr; // Valeur retounée par DirectX
RECT rcSource, rcDest;
DDBLTFX ddbltfx;
ZeroMemory(&ddbltfx, sizeof(ddbltfx));
ddbltfx.dwSize = sizeof(ddbltfx);
ddbltfx.dwDDFX = NULL; //DDBLTFX_MIRRORLEFTRIGHT;
rcSource.top = ysrc;
rcSource.left = xsrc;
rcSource.bottom = y1src;
rcSource.right = x1src;
rcDest.top = ydest;
rcDest.left = xdest;
rcDest.bottom = ydest + (y1src - ysrc);
rcDest.right = xdest + (x1src - xsrc);
hr = lpDDSDest->Blt(&rcDest,
lpDDSSource,
&rcSource,
DDBLT_KEYSRCOVERRIDE | DDBLT_WAIT /*| DDBLT_DDFX Effet miroir de gauche à droite */,
&ddbltfx);
/*if (DDCtrlDD(hr, "CopySxyToSxy: Echec de Blt"))
return false;*/
return true;
}
void HeartBeat()
{
// Check for lost surfaces
CheckSurfaces();
// Clear the back buffer
DDClear( g_pDDSBack, 0, 0, w, h );
IDirectDrawSurface *gd = (IDirectDrawSurface*)HSURFACEDRAW;
if (gd->IsLost() != DD_OK)
gd->Restore();
CopySxyToSxy(0, 0, w, h, w, h, gd,g_pDDSBack);
// Blit the back buffer to the front buffer
DDFlip();
} |
Partager