mirror of
https://github.com/reactos/reactos.git
synced 2024-08-04 10:30:59 +00:00
StretchBlt:
- Pixel size depends on the type of the destination surface, so don't always write ULONG values - Use PutPixel and remove now unneeded position code - Fixes high red zone overwrites, see bug #812 (vlc) and bug #3807 (ccleaner) - Enable dprints for unhandled sources - Add a parameter dprint for 24bpp svn path=/trunk/; revision=36997
This commit is contained in:
parent
8fb42ca34d
commit
5a80a9a5c6
|
@ -740,8 +740,6 @@ BOOLEAN DIB_16BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
|
|||
LONG sy = 0;
|
||||
LONG DesX;
|
||||
LONG DesY;
|
||||
PULONG DestBits;
|
||||
LONG DifflDelta;
|
||||
|
||||
LONG SrcZoomXHight;
|
||||
LONG SrcZoomXLow;
|
||||
|
@ -753,6 +751,7 @@ BOOLEAN DIB_16BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
|
|||
|
||||
LONG sx_dec = 0;
|
||||
LONG sx_max;
|
||||
ULONG color;
|
||||
|
||||
DPRINT("DIB_16BPP_StretchBlt: Source BPP: %u, srcRect: (%d,%d)-(%d,%d), dstRect: (%d,%d)-(%d,%d)\n",
|
||||
BitsPerFormat(SourceSurf->iBitmapFormat), SourceRect->left, SourceRect->top, SourceRect->right, SourceRect->bottom,
|
||||
|
@ -782,11 +781,6 @@ BOOLEAN DIB_16BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
|
|||
sy_max = DesSizeY;
|
||||
sy = SourceRect->top;
|
||||
|
||||
DestBits = (PULONG)((PBYTE)DestSurf->pvScan0 + (DestRect->left << 1) +
|
||||
DestRect->top * DestSurf->lDelta);
|
||||
|
||||
DifflDelta = DestSurf->lDelta - (DesSizeX << 1);
|
||||
|
||||
switch(SourceSurf->iBitmapFormat)
|
||||
{
|
||||
|
||||
|
@ -801,10 +795,10 @@ BOOLEAN DIB_16BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
|
|||
|
||||
for (DesX=0; DesX<DesSizeX; DesX++)
|
||||
{
|
||||
*DestBits = XLATEOBJ_iXlate(ColorTranslation,
|
||||
DIB_1BPP_GetPixel(SourceSurf, sx, sy));
|
||||
color = XLATEOBJ_iXlate(ColorTranslation,
|
||||
DIB_1BPP_GetPixel(SourceSurf, sx, sy));
|
||||
|
||||
DestBits = (PULONG)((ULONG_PTR)DestBits + 2);
|
||||
DIB_16BPP_PutPixel(DestSurf, DesX, DesY, color);
|
||||
|
||||
sx += SrcZoomXHight;
|
||||
sx_dec += SrcZoomXLow;
|
||||
|
@ -815,8 +809,6 @@ BOOLEAN DIB_16BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
|
|||
}
|
||||
}
|
||||
|
||||
DestBits = (PULONG)((ULONG_PTR)DestBits + DifflDelta);
|
||||
|
||||
sy += SrcZoomYHight;
|
||||
sy_dec += SrcZoomYLow;
|
||||
if (sy_dec >= sy_max)
|
||||
|
@ -838,10 +830,10 @@ BOOLEAN DIB_16BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
|
|||
|
||||
for (DesX=0; DesX<DesSizeX; DesX++)
|
||||
{
|
||||
*DestBits = XLATEOBJ_iXlate(ColorTranslation,
|
||||
color = XLATEOBJ_iXlate(ColorTranslation,
|
||||
DIB_4BPP_GetPixel(SourceSurf, sx, sy));
|
||||
|
||||
DestBits = (PULONG)((ULONG_PTR)DestBits + 2);
|
||||
DIB_16BPP_PutPixel(DestSurf, DesX, DesY, color);
|
||||
|
||||
sx += SrcZoomXHight;
|
||||
sx_dec += SrcZoomXLow;
|
||||
|
@ -852,8 +844,6 @@ BOOLEAN DIB_16BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
|
|||
}
|
||||
}
|
||||
|
||||
DestBits = (PULONG)((ULONG_PTR)DestBits + DifflDelta);
|
||||
|
||||
sy += SrcZoomYHight;
|
||||
sy_dec += SrcZoomYLow;
|
||||
if (sy_dec >= sy_max)
|
||||
|
@ -875,10 +865,10 @@ BOOLEAN DIB_16BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
|
|||
|
||||
for (DesX=0; DesX<DesSizeX; DesX++)
|
||||
{
|
||||
*DestBits = XLATEOBJ_iXlate(ColorTranslation,
|
||||
DIB_8BPP_GetPixel(SourceSurf, sx, sy));
|
||||
color = XLATEOBJ_iXlate(ColorTranslation,
|
||||
DIB_8BPP_GetPixel(SourceSurf, sx, sy));
|
||||
|
||||
DestBits = (PULONG)((ULONG_PTR)DestBits + 2);
|
||||
DIB_16BPP_PutPixel(DestSurf, DesX, DesY, color);
|
||||
|
||||
sx += SrcZoomXHight;
|
||||
sx_dec += SrcZoomXLow;
|
||||
|
@ -889,8 +879,6 @@ BOOLEAN DIB_16BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
|
|||
}
|
||||
}
|
||||
|
||||
DestBits = (PULONG)((ULONG_PTR)DestBits + DifflDelta);
|
||||
|
||||
sy += SrcZoomYHight;
|
||||
sy_dec += SrcZoomYLow;
|
||||
if (sy_dec >= sy_max)
|
||||
|
@ -906,11 +894,6 @@ BOOLEAN DIB_16BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
|
|||
/* FIXME : MaskOrigin, BrushOrigin, ClipRegion, Mode ? */
|
||||
/* This is a reference implementation, it hasn't been optimized for speed */
|
||||
|
||||
DestBits = (PULONG)((PBYTE)DestSurf->pvScan0 + (DestRect->left << 1) +
|
||||
DestRect->top * DestSurf->lDelta);
|
||||
|
||||
DifflDelta = DestSurf->lDelta - (DesSizeX << 1);
|
||||
|
||||
for (DesY=0; DesY<DesSizeY; DesY++)
|
||||
{
|
||||
sx = SourceRect->left;
|
||||
|
@ -918,10 +901,10 @@ BOOLEAN DIB_16BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
|
|||
|
||||
for (DesX=0; DesX<DesSizeX; DesX++)
|
||||
{
|
||||
*DestBits = XLATEOBJ_iXlate(ColorTranslation,
|
||||
color = XLATEOBJ_iXlate(ColorTranslation,
|
||||
DIB_24BPP_GetPixel(SourceSurf, sx, sy));
|
||||
|
||||
DestBits = (PULONG)((ULONG_PTR)DestBits + 2);
|
||||
DIB_16BPP_PutPixel(DestSurf, DesX, DesY, color);
|
||||
|
||||
sx += SrcZoomXHight;
|
||||
sx_dec += SrcZoomXLow;
|
||||
|
@ -932,8 +915,6 @@ BOOLEAN DIB_16BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
|
|||
}
|
||||
}
|
||||
|
||||
DestBits = (PULONG)((ULONG_PTR)DestBits + DifflDelta);
|
||||
|
||||
sy += SrcZoomYHight;
|
||||
sy_dec += SrcZoomYLow;
|
||||
if (sy_dec >= sy_max)
|
||||
|
@ -955,10 +936,10 @@ BOOLEAN DIB_16BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
|
|||
|
||||
for (DesX=0; DesX<DesSizeX; DesX++)
|
||||
{
|
||||
*DestBits = XLATEOBJ_iXlate(ColorTranslation,
|
||||
color = XLATEOBJ_iXlate(ColorTranslation,
|
||||
DIB_32BPP_GetPixel(SourceSurf, sx, sy));
|
||||
|
||||
DestBits = (PULONG)((ULONG_PTR)DestBits + 2);
|
||||
DIB_16BPP_PutPixel(DestSurf, DesX, DesY, color);
|
||||
|
||||
sx += SrcZoomXHight;
|
||||
sx_dec += SrcZoomXLow;
|
||||
|
@ -968,7 +949,6 @@ BOOLEAN DIB_16BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
|
|||
sx_dec -= sx_max;
|
||||
}
|
||||
}
|
||||
DestBits = (PULONG)((ULONG_PTR)DestBits + DifflDelta);
|
||||
|
||||
sy += SrcZoomYHight;
|
||||
sy_dec += SrcZoomYLow;
|
||||
|
|
|
@ -420,6 +420,9 @@ BOOLEAN DIB_24BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
|
|||
LONG DesY;
|
||||
LONG color;
|
||||
|
||||
DPRINT("DIB_24BPP_StretchBlt: Source BPP: %u, srcRect: (%d,%d)-(%d,%d), dstRect: (%d,%d)-(%d,%d)\n",
|
||||
BitsPerFormat(SourceSurf->iBitmapFormat), SourceRect->left, SourceRect->top, SourceRect->right, SourceRect->bottom,
|
||||
DestRect->left, DestRect->top, DestRect->right, DestRect->bottom);
|
||||
SrcSizeY = SourceRect->bottom - SourceRect->top;
|
||||
SrcSizeX = SourceRect->right - SourceRect->left;
|
||||
|
||||
|
@ -539,7 +542,7 @@ BOOLEAN DIB_24BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
|
|||
break;
|
||||
|
||||
default:
|
||||
//DPRINT1("DIB_24BPP_StretchBlt: Unhandled Source BPP: %u\n", BitsPerFormat(SourceSurf->iBitmapFormat));
|
||||
DPRINT1("DIB_24BPP_StretchBlt: Unhandled Source BPP: %u\n", BitsPerFormat(SourceSurf->iBitmapFormat));
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
|
|
@ -726,7 +726,7 @@ BOOLEAN DIB_32BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
|
|||
break;
|
||||
|
||||
default:
|
||||
//DPRINT1("DIB_32BPP_StretchBlt: Unhandled Source BPP: %u\n", BitsPerFormat(SourceSurf->iBitmapFormat));
|
||||
DPRINT1("DIB_32BPP_StretchBlt: Unhandled Source BPP: %u\n", BitsPerFormat(SourceSurf->iBitmapFormat));
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
|
|
@ -475,8 +475,6 @@ BOOLEAN DIB_8BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
|
|||
LONG sy = 0;
|
||||
LONG DesX;
|
||||
LONG DesY;
|
||||
PULONG DestBits;
|
||||
LONG DifflDelta;
|
||||
|
||||
LONG SrcZoomXHight;
|
||||
LONG SrcZoomXLow;
|
||||
|
@ -489,6 +487,8 @@ BOOLEAN DIB_8BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
|
|||
LONG sx_dec = 0;
|
||||
LONG sx_max;
|
||||
|
||||
ULONG color;
|
||||
|
||||
DPRINT("DIB_8BPP_StretchBlt: Source BPP: %u, srcRect: (%d,%d)-(%d,%d), dstRect: (%d,%d)-(%d,%d)\n",
|
||||
BitsPerFormat(SourceSurf->iBitmapFormat), SourceRect->left, SourceRect->top, SourceRect->right, SourceRect->bottom,
|
||||
DestRect->left, DestRect->top, DestRect->right, DestRect->bottom);
|
||||
|
@ -517,11 +517,6 @@ BOOLEAN DIB_8BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
|
|||
sy_max = DesSizeY;
|
||||
sy = SourceRect->top;
|
||||
|
||||
DestBits = (PULONG)((PBYTE)DestSurf->pvScan0 + (DestRect->left) +
|
||||
DestRect->top * DestSurf->lDelta);
|
||||
|
||||
DifflDelta = DestSurf->lDelta - DesSizeX ;
|
||||
|
||||
switch(SourceSurf->iBitmapFormat)
|
||||
{
|
||||
case BMF_1BPP:
|
||||
|
@ -533,10 +528,10 @@ BOOLEAN DIB_8BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
|
|||
sx_dec = 0;
|
||||
for (DesX=0; DesX<DesSizeX; DesX++)
|
||||
{
|
||||
*DestBits = XLATEOBJ_iXlate(ColorTranslation,
|
||||
DIB_1BPP_GetPixel(SourceSurf, sx, sy));
|
||||
color = XLATEOBJ_iXlate(ColorTranslation,
|
||||
DIB_1BPP_GetPixel(SourceSurf, sx, sy));
|
||||
|
||||
DestBits = (PULONG)((ULONG_PTR)DestBits + 1);
|
||||
DIB_8BPP_PutPixel(DestSurf, DesX, DesY, color);
|
||||
|
||||
sx += SrcZoomXHight;
|
||||
sx_dec += SrcZoomXLow;
|
||||
|
@ -547,8 +542,6 @@ BOOLEAN DIB_8BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
|
|||
}
|
||||
}
|
||||
|
||||
DestBits = (PULONG)((ULONG_PTR)DestBits + DifflDelta);
|
||||
|
||||
sy += SrcZoomYHight;
|
||||
sy_dec += SrcZoomYLow;
|
||||
if (sy_dec >= sy_max)
|
||||
|
@ -568,10 +561,10 @@ BOOLEAN DIB_8BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
|
|||
sx_dec = 0;
|
||||
for (DesX=0; DesX<DesSizeX; DesX++)
|
||||
{
|
||||
*DestBits = XLATEOBJ_iXlate(ColorTranslation,
|
||||
DIB_4BPP_GetPixel(SourceSurf, sx, sy));
|
||||
color = XLATEOBJ_iXlate(ColorTranslation,
|
||||
DIB_4BPP_GetPixel(SourceSurf, sx, sy));
|
||||
|
||||
DestBits = (PULONG)((ULONG_PTR)DestBits + 1);
|
||||
DIB_8BPP_PutPixel(DestSurf, DesX, DesY, color);
|
||||
|
||||
sx += SrcZoomXHight;
|
||||
sx_dec += SrcZoomXLow;
|
||||
|
@ -582,8 +575,6 @@ BOOLEAN DIB_8BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
|
|||
}
|
||||
}
|
||||
|
||||
DestBits = (PULONG)((ULONG_PTR)DestBits + DifflDelta);
|
||||
|
||||
sy += SrcZoomYHight;
|
||||
sy_dec += SrcZoomYLow;
|
||||
if (sy_dec >= sy_max)
|
||||
|
@ -608,10 +599,10 @@ BOOLEAN DIB_8BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
|
|||
sx_dec = 0;
|
||||
for (DesX=0; DesX<DesSizeX; DesX++)
|
||||
{
|
||||
*DestBits = XLATEOBJ_iXlate(ColorTranslation,
|
||||
DIB_16BPP_GetPixel(SourceSurf, sx, sy));
|
||||
color = XLATEOBJ_iXlate(ColorTranslation,
|
||||
DIB_16BPP_GetPixel(SourceSurf, sx, sy));
|
||||
|
||||
DestBits = (PULONG)((ULONG_PTR)DestBits + 1);
|
||||
DIB_8BPP_PutPixel(DestSurf, DesX, DesY, color);
|
||||
|
||||
sx += SrcZoomXHight;
|
||||
sx_dec += SrcZoomXLow;
|
||||
|
@ -622,8 +613,6 @@ BOOLEAN DIB_8BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
|
|||
}
|
||||
}
|
||||
|
||||
DestBits = (PULONG)((ULONG_PTR)DestBits + DifflDelta);
|
||||
|
||||
sy += SrcZoomYHight;
|
||||
sy_dec += SrcZoomYLow;
|
||||
if (sy_dec >= sy_max)
|
||||
|
@ -641,10 +630,10 @@ BOOLEAN DIB_8BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
|
|||
sx_dec = 0;
|
||||
for (DesX=0; DesX<DesSizeX; DesX++)
|
||||
{
|
||||
*DestBits = XLATEOBJ_iXlate(ColorTranslation,
|
||||
DIB_24BPP_GetPixel(SourceSurf, sx, sy));
|
||||
color = XLATEOBJ_iXlate(ColorTranslation,
|
||||
DIB_24BPP_GetPixel(SourceSurf, sx, sy));
|
||||
|
||||
DestBits = (PULONG)((ULONG_PTR)DestBits + 1);
|
||||
DIB_8BPP_PutPixel(DestSurf, DesX, DesY, color);
|
||||
|
||||
sx += SrcZoomXHight;
|
||||
sx_dec += SrcZoomXLow;
|
||||
|
@ -655,8 +644,6 @@ BOOLEAN DIB_8BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
|
|||
}
|
||||
}
|
||||
|
||||
DestBits = (PULONG)((ULONG_PTR)DestBits + DifflDelta);
|
||||
|
||||
sy += SrcZoomYHight;
|
||||
sy_dec += SrcZoomYLow;
|
||||
if (sy_dec >= sy_max)
|
||||
|
@ -676,10 +663,10 @@ BOOLEAN DIB_8BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
|
|||
sx_dec = 0;
|
||||
for (DesX=0; DesX<DesSizeX; DesX++)
|
||||
{
|
||||
*DestBits = XLATEOBJ_iXlate(ColorTranslation,
|
||||
color = XLATEOBJ_iXlate(ColorTranslation,
|
||||
DIB_32BPP_GetPixel(SourceSurf, sx, sy));
|
||||
|
||||
DestBits = (PULONG)((ULONG_PTR)DestBits + 1);
|
||||
DIB_8BPP_PutPixel(DestSurf, DesX, DesY, color);
|
||||
|
||||
sx += SrcZoomXHight;
|
||||
sx_dec += SrcZoomXLow;
|
||||
|
@ -690,8 +677,6 @@ BOOLEAN DIB_8BPP_StretchBlt(SURFOBJ *DestSurf, SURFOBJ *SourceSurf,
|
|||
}
|
||||
}
|
||||
|
||||
DestBits = (PULONG)((ULONG_PTR)DestBits + DifflDelta);
|
||||
|
||||
sy += SrcZoomYHight;
|
||||
sy_dec += SrcZoomYLow;
|
||||
if (sy_dec >= sy_max)
|
||||
|
|
Loading…
Reference in a new issue