From 5a2cbdf365c1c5bfbe4609ea1f498a5a0131f7ad Mon Sep 17 00:00:00 2001 From: Magnus Olsen Date: Fri, 3 Jun 2005 16:57:55 +0000 Subject: [PATCH] bitblt srcpy optimze it can be more optimze svn path=/trunk/; revision=15750 --- reactos/subsys/win32k/dib/dib32bpp.c | 31 ++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/reactos/subsys/win32k/dib/dib32bpp.c b/reactos/subsys/win32k/dib/dib32bpp.c index d191abfd55a..a3f8444a918 100644 --- a/reactos/subsys/win32k/dib/dib32bpp.c +++ b/reactos/subsys/win32k/dib/dib32bpp.c @@ -308,6 +308,7 @@ DIB_32BPP_BitBlt(PBLTINFO BltInfo) switch (BltInfo->Rop4) { + case ROP4_BLACKNESS: //return(0x00000000); @@ -376,17 +377,39 @@ DIB_32BPP_BitBlt(PBLTINFO BltInfo) #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; DestYDestRect.bottom; DestY++) + { + + if (SourceY > BltInfo->SourceSurface->sizlBitmap.cy) break; + + SourceX = BltInfo->SourcePoint.x; + + for (DestX=BltInfo->DestRect.left; DestXDestRect.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: {