bitblt srcpy optimze it can be more optimze Modified: trunk/reactos/subsys/win32k/dib/dib32bpp.c _____
Modified: trunk/reactos/subsys/win32k/dib/dib32bpp.c --- trunk/reactos/subsys/win32k/dib/dib32bpp.c 2005-06-03 16:56:27 UTC (rev 15749) +++ trunk/reactos/subsys/win32k/dib/dib32bpp.c 2005-06-03 16:57:55 UTC (rev 15750) @@ -308,6 +308,7 @@
switch (BltInfo->Rop4) { + case ROP4_BLACKNESS: //return(0x00000000);
@@ -376,17 +377,39 @@ #endif return TRUE; break; + case ROP4_SRCCOPY: // return(Source); switch (BltInfo->SourceSurface->iBitmapFormat) { case BMF_1BPP: - break; - case BMF_4BPP: - break; + case BMF_4BPP: case BMF_16BPP: - break; case BMF_24BPP: + { + PBYTE byteaddr = BltInfo->SourceSurface->pvScan0 + BltInfo->DestRect.top * BltInfo->SourceSurface->lDelta; + PDWORD addr = (PDWORD)byteaddr + BltInfo->DestRect.left; + LONG xlDelta = BltInfo->SourceSurface->lDelta - (BltInfo->DestRect.right - BltInfo->DestRect.left) ; + + SourceY = BltInfo->SourcePoint.y; + + for (DestY=BltInfo->DestRect.top; DestY<BltInfo->DestRect.bottom; DestY++) + { + + if (SourceY > BltInfo->SourceSurface->sizlBitmap.cy) break; + + SourceX = BltInfo->SourcePoint.x; + + for (DestX=BltInfo->DestRect.left; DestX<BltInfo->DestRect.right; DestX++, SourceX++, addr++) + { + if (SourceX > BltInfo->SourceSurface->sizlBitmap.cx) break; + + *addr = DIB_GetSource(BltInfo->SourceSurface, SourceX, + SourceY, BltInfo->XlateSourceToDest); + } + } + addr+=xlDelta; + } break; case BMF_32BPP: {