mirror of
git://source.winehq.org/git/wine.git
synced 2024-10-31 10:13:56 +00:00
wined3d: BltFast dealing correctly with overlapping src and dest.
This commit is contained in:
parent
03f18eb425
commit
3bb1ea3d34
1 changed files with 18 additions and 3 deletions
|
@ -1613,13 +1613,28 @@ IWineD3DBaseSurfaceImpl_BltFast(IWineD3DSurface *iface,
|
|||
else
|
||||
{
|
||||
int width = w * bpp;
|
||||
INT sbufpitch, dbufpitch;
|
||||
|
||||
TRACE("NO color key copy\n");
|
||||
/* Handle overlapping surfaces */
|
||||
if (sbuf < dbuf)
|
||||
{
|
||||
sbuf += (h - 1) * slock.Pitch;
|
||||
dbuf += (h - 1) * dlock.Pitch;
|
||||
sbufpitch = -slock.Pitch;
|
||||
dbufpitch = -dlock.Pitch;
|
||||
}
|
||||
else
|
||||
{
|
||||
sbufpitch = slock.Pitch;
|
||||
dbufpitch = dlock.Pitch;
|
||||
}
|
||||
for (y = 0; y < h; y++)
|
||||
{
|
||||
/* This is pretty easy, a line for line memcpy */
|
||||
memcpy(dbuf, sbuf, width);
|
||||
sbuf += slock.Pitch;
|
||||
dbuf += dlock.Pitch;
|
||||
memmove(dbuf, sbuf, width);
|
||||
sbuf += sbufpitch;
|
||||
dbuf += dbufpitch;
|
||||
}
|
||||
TRACE("Copy done\n");
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue