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:
{
Show replies by date