Ignore:
Timestamp:
Jul 3, 2002, 5:44:39 PM (23 years ago)
Author:
sandervl
Message:

MoveRect fixes (src & dest surfaces the same + overlap); fill fixes + optimizations

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/ddraw/OS2SURFACE.CPP

    r8821 r8830  
    1 /* $Id: OS2SURFACE.CPP,v 1.45 2002-07-02 09:55:12 sandervl Exp $ */
     1/* $Id: OS2SURFACE.CPP,v 1.46 2002-07-03 15:44:37 sandervl Exp $ */
    22
    33/*
     
    59755975  static char Scanline[6400];  // sufficient for 1600 at 32 bit
    59765976
     5977  if(sizeof(Scanline) < lPitch) {
     5978      DebugInt3();      //oh, oh
     5979      return;
     5980  }
    59775981  // Bridge, we may got a problem ;)
    59785982  // Check for Overlapping Rects
     
    59815985  pSrcPos = pBuffer;
    59825986
    5983   if(lpDestRect->top <= lpSrcRect->top)
     5987  if(lpDestRect->top > lpSrcRect->top)
    59845988  {
    59855989    //  +-------+     +-------+      +-------+
    5986     //  |S      |     |S      |      |S      |  +---+---+---+
    5987     //  |   +---|---+ +-------+  +---|---+   |  |S/D|D/S|   |
    5988     //  |   | D |   | | D     |  | D |   |   |  |   |   |   |
    5989     //  +-------+   | +-------+  |   +-------+  |   |   |   |
    5990     //      |       | |       |  |       |      +---+---+---+
     5990    //  |S      |     |S      |      |S      | 
     5991    //  |   +---|---+ +-------+  +---|---+   | 
     5992    //  |   | D |   | | D     |  | D |   |   | 
     5993    //  +-------+   | +-------+  |   +-------+ 
     5994    //      |       | |       |  |       |     
    59915995    //      +-------+ +-------+  +-------+
    59925996    //
    59935997    // We got one of the above cases (or no overlapping) so copy from bottom up
    59945998
    5995     pBltPos += (lpDestRect->left * bpp) + lPitch * lpDestRect->top;
     5999    pBltPos += (lpDestRect->left * bpp) + lPitch * (lpDestRect->bottom-1);
    59966000    pSrcPos += (lpSrcRect->left * bpp)  + lPitch * (lpSrcRect->bottom-1);
    59976001    BlitHeight = lpDestRect->bottom - lpDestRect->top;
     
    60026006      memcpy(Scanline,pSrcPos,BlitWidth);
    60036007      memcpy(pBltPos,Scanline,BlitWidth);
    6004       pBltPos += lPitch;
     6008      pBltPos -= lPitch;
    60056009      pSrcPos -= lPitch;
    60066010      if(! (--BlitHeight))
     
    60126016    //  +-------+     +-------+      +-------+
    60136017    //  | D     |     | D     |      | D     |
    6014     //  |   +---|---+ +-------+  +---|---+   |
    6015     //  |   |S  |   | |S      |  |S  |   |   |
    6016     //  +-------+   | +-------+  |   +-------+
    6017     //      |       | |       |  |       |
    6018     //      +-------+ +-------+  +-------+
     6018    //  |   +---|---+ +-------+  +---|---+   |  +---+---+---+
     6019    //  |   |S  |   | |S      |  |S  |   |   |  |S  |S/D| D |
     6020    //  +-------+   | +-------+  |   +-------+  |   |   |   |
     6021    //      |       | |       |  |       |      |   |   |   |
     6022    //      +-------+ +-------+  +-------+      +---+---+---+
    60196023    //
    60206024    // We got one of the above cases so copy top down
Note: See TracChangeset for help on using the changeset viewer.