Changeset 6935


Ignore:
Timestamp:
Oct 3, 2001, 3:49:41 PM (24 years ago)
Author:
sandervl
Message:

take clipping info into account when blitting

Location:
trunk/src/ddraw
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified trunk/src/ddraw/OS2CLIPPER.CPP

    r6901 r6935  
    1 /* $Id: OS2CLIPPER.CPP,v 1.13 2001-09-30 22:23:44 sandervl Exp $ */
     1/* $Id: OS2CLIPPER.CPP,v 1.14 2001-10-03 13:49:39 sandervl Exp $ */
    22
    33/*
    44 * DX clipper class routines
    55 *
    6  * Copyright 1998 Sander van Leeuwen
     6 * Copyright 1998-2001 Sander van Leeuwen
    77 * Copyright 1999 Markus Montkowski
    88 *
    99 * Project Odin Software License can be found in LICENSE.TXT
     10 *
     11 * TODO: This is NOT THREAD SAFE!!!
    1012 *
    1113 */
     
    4850  // lpDraw->Vtbl.AddRef(lpDraw);
    4951  // hDive                   = lpDirectDraw->GetDiveInstance();
     52
    5053}
    5154
     
    142145
    143146  if(!lpdwSize) {
    144         return DDERR_INVALIDPARAMS;
     147      return DDERR_INVALIDPARAMS;
     148  }
     149  if(lpRect) {
     150      dprintf(("WARNING: clipping the cliplist is not yet implemented"));
    145151  }
    146152  if(me->clipWindow)
     
    153159          return DDERR_NOCLIPLIST;
    154160      }
     161      //TODO: This is NOT THREAD SAFE!!!
    155162      regiondatasize = me->lpRgnData->rdh.dwSize + me->lpRgnData->rdh.nCount*sizeof(RECT);
    156163      if(lpClipList == NULL) {
  • TabularUnified trunk/src/ddraw/OS2CLIPPER.H

    r6901 r6935  
    1 /* $Id: OS2CLIPPER.H,v 1.9 2001-09-30 22:23:44 sandervl Exp $ */
     1/* $Id: OS2CLIPPER.H,v 1.10 2001-10-03 13:49:39 sandervl Exp $ */
    22
    33/*
     
    1313
    1414#include "divewrap.h"
     15
    1516#define FAR
    1617#undef THIS
     
    2930        int             Referenced;
    3031        inline  HRESULT       GetLastError() { return lastError; };
     32
    3133 private:
    3234
  • TabularUnified trunk/src/ddraw/OS2PALETTE.CPP

    r5326 r6935  
    1 /* $Id: OS2PALETTE.CPP,v 1.14 2001-03-18 21:44:42 mike Exp $ */
     1/* $Id: OS2PALETTE.CPP,v 1.15 2001-10-03 13:49:40 sandervl Exp $ */
    22
    33/*
    44 * DX palette class implementation
    55 *
    6  * Copyright 1998 Sander va Leeuwen
     6 * Copyright 1998 Sander van Leeuwen
    77 * Copyright 1999 Markus Montkowski
    88 *
  • TabularUnified trunk/src/ddraw/OS2SURFACE.CPP

    r6901 r6935  
    1 /* $Id: OS2SURFACE.CPP,v 1.33 2001-09-30 22:23:44 sandervl Exp $ */
     1/* $Id: OS2SURFACE.CPP,v 1.34 2001-10-03 13:49:40 sandervl Exp $ */
    22
    33/*
     
    66 * Copyright 1999 Markus Montkowski
    77 * Copyright 2000 Michal Necasek
     8 * Copyright 1998-2001 Sander van Leeuwen
    89 *
    910 * Project Odin Software License can be found in LICENSE.TXT
     
    21622163        LPRECT lpSrcRect, DWORD dwFlags, LPDDBLTFX lpDDBltFx)
    21632164{
     2165 OS2IDirectDrawSurface *dest = (OS2IDirectDrawSurface *)This;
     2166 OS2IDirectDrawSurface *src  = (OS2IDirectDrawSurface *)lpDDSrcSurface;
     2167
     2168 DDSURFACEDESC2  DestSurfaceDesc, SrcSurfaceDesc;
     2169 DDRectangle    *pIRectDest,*pIRectSrc,*pIRectTest;
     2170 RECT            DestRect, SrcRect;
     2171 BOOL            Found;
     2172 int             i;
     2173 HRESULT         ret = DD_OK;
     2174
     2175  #ifdef DEBUG
     2176    dprintf(("DDRAW: SurfBlt4 To Surf %08X, from Surf %08X\n",dest,src));
     2177    if ( (NULL!=lpDestRect)&& (NULL!=lpSrcRect))
     2178      dprintf(("DDRAW: SurfBlt4 to (%d,%d)(%d,%d) at %08X from (%d,%d)(%d,%d) at %08X\n", lpDestRect->left, lpDestRect->top,
     2179               lpDestRect->right, lpDestRect->bottom, dest, lpSrcRect->left, lpSrcRect->top,
     2180               lpSrcRect->right, lpSrcRect->bottom, src));
     2181
     2182    _dump_DDBLT(dwFlags);
     2183  #endif
     2184
     2185  if (NULL!=lpDestRect)
     2186  {
     2187    // HACK: RA does pass in negative values we might be better return an error,
     2188    //for now we clip
     2189#define RA_HACK 1
     2190
     2191#ifdef RA_HACK
     2192    int top,left,bottom,right;
     2193
     2194    top    = lpDestRect->top;
     2195    left   = lpDestRect->left;
     2196    bottom = lpDestRect->bottom;
     2197    right  = lpDestRect->right;
     2198
     2199    if(top<0)
     2200    {
     2201      bottom += top;
     2202      top = 0;
     2203    }
     2204
     2205    if(top > dest->height)
     2206      return DDERR_INVALIDPARAMS;
     2207
     2208    if(bottom<0)
     2209      return DDERR_INVALIDPARAMS;
     2210
     2211    if(bottom>dest->height)
     2212      bottom=dest->height;
     2213
     2214    if(left<0)
     2215    {
     2216      right += left;
     2217      left = 0;
     2218    }
     2219
     2220    if(left>dest->width)
     2221      return DDERR_INVALIDPARAMS;
     2222
     2223    if(right<0)
     2224      return DDERR_INVALIDPARAMS;
     2225
     2226    if(right>dest->width)
     2227       right = dest->width;
     2228#endif    // RA_HACK
     2229
     2230    pIRectDest = new DDRectangle( left, top, right, bottom);
     2231#ifdef RA_HACK
     2232    DestRect.top    = top;
     2233    DestRect.left   = left;
     2234    DestRect.bottom = bottom;
     2235    DestRect.right  = right;
     2236#else
     2237    memcpy(&DestRect,lpDestRect,sizeof(RECT) );
     2238#endif //RA_HACK
     2239  }
     2240  else
     2241  {
     2242    pIRectDest = new DDRectangle( 0, 0, dest->width, dest->height);
     2243    DestRect.top    = 0;
     2244    DestRect.left   = 0;
     2245    DestRect.bottom = dest->height;
     2246    DestRect.right  = dest->width;
     2247  }
     2248
     2249  if(dest->fLocked)
     2250  {
     2251    if (NULL==lpDestRect)
     2252    {
     2253      // If anything is locked we can't blit to the complete surface as
     2254      // a part is locked
     2255      Found = TRUE;
     2256    }
     2257    else
     2258    {
     2259      // If the dest Rectangle intersects with any of the locked rectangles
     2260      // we can't blit to it
     2261
     2262      Found = FALSE;
     2263      i=0;
     2264      while( (i<DPA_GetPtrCount(dest->DPA_LockedRects))  && !Found)
     2265      {
     2266        pIRectTest = (DDRectangle*) DPA_FastGetPtr(dest->DPA_LockedRects,i);
     2267        Found = pIRectDest->intersects(*pIRectTest);
     2268        i++;
     2269      }
     2270
     2271    }
     2272    if (Found)
     2273    {
     2274      delete pIRectDest;
     2275      dprintf(("DDRAW: Blt: Dest Surface partially locked\n"));
     2276      return(DDERR_SURFACEBUSY);
     2277    }
     2278  }
     2279  delete pIRectDest;
     2280
     2281  if (NULL!=lpSrcRect)
     2282  {
     2283#ifdef RA_HACK
     2284    // Same as for dest rectangle now for src
     2285
     2286    int top,left,bottom,right;
     2287
     2288    top    = lpSrcRect->top;
     2289    left   = lpSrcRect->left;
     2290    bottom = lpSrcRect->bottom;
     2291    right  = lpSrcRect->right;
     2292
     2293    if(top<0)
     2294    {
     2295      bottom += top;
     2296      top = 0;
     2297    }
     2298
     2299    if(top > src->height)
     2300      return DDERR_INVALIDPARAMS;
     2301
     2302    if(bottom<0)
     2303      return DDERR_INVALIDPARAMS;
     2304
     2305    if(bottom>src->height)
     2306      bottom=src->height;
     2307
     2308    if(left<0)
     2309    {
     2310      right += left;
     2311      left = 0;
     2312    }
     2313
     2314    if(left>src->width)
     2315      return DDERR_INVALIDPARAMS;
     2316
     2317    if(right<0)
     2318      return DDERR_INVALIDPARAMS;
     2319
     2320    if(right>src->width)
     2321       right = src->width;
     2322#endif    // RA_HACK
     2323
     2324    pIRectSrc = new DDRectangle( left, top, right, bottom );
     2325#ifdef RA_HACK
     2326    SrcRect.top    = top;
     2327    SrcRect.left   = left;
     2328    SrcRect.bottom = bottom;
     2329    SrcRect.right  = right;
     2330#else
     2331    memcpy(&SrcRect,lpSrcRect,sizeof(RECT) );
     2332#endif
     2333  }
     2334  else
     2335  {
     2336    pIRectSrc = new DDRectangle( 0, 0, src->width, src->height);
     2337    SrcRect.top    = 0;
     2338    SrcRect.left   = 0;
     2339    SrcRect.bottom = src->height;
     2340    SrcRect.right  = src->width;
     2341  }
     2342
     2343  if(src->fLocked)
     2344  {
     2345    if (NULL==lpSrcRect)
     2346    {
     2347      // If anything is locked we can't blit from the complete surface as
     2348      // a part is locked
     2349      Found = TRUE;
     2350    }
     2351    else
     2352    {
     2353      // If the src Rectangle intersects with any of the locked rectangles of the
     2354      // source surface we can't blit from it
     2355
     2356      Found = FALSE;
     2357      i=0;
     2358
     2359      while((i<DPA_GetPtrCount(src->DPA_LockedRects) ) && !Found)
     2360      {
     2361        pIRectTest = (DDRectangle*) DPA_FastGetPtr(src->DPA_LockedRects,i);
     2362        Found = pIRectDest->intersects(*pIRectTest);
     2363        i++;
     2364      }
     2365
     2366    }
     2367
     2368    if (Found)
     2369    {
     2370      delete pIRectSrc;
     2371      dprintf(("DDRAW: Blt: Src Surface partly locked\n"));
     2372
     2373      return(DDERR_SURFACEBUSY);
     2374    }
     2375  }
     2376  delete pIRectSrc;
     2377
     2378  //TODO: do we need to check the source for clipping information in case
     2379  //      the app wants to copy from the frame buffer?
     2380  if(dest->lpClipper)
     2381  {
     2382      DWORD rgnsize;
     2383      if(ClipGetClipList((IDirectDrawClipper*)dest->lpClipper, NULL, NULL, &rgnsize) == DD_OK)
     2384      {
     2385          LPRGNDATA lpRgnData = (LPRGNDATA)alloca(rgnsize);
     2386          if(lpRgnData == NULL) {
     2387              DebugInt3();
     2388              goto doblit;
     2389          }
     2390          if(ClipGetClipList((IDirectDrawClipper*)dest->lpClipper, NULL, lpRgnData, &rgnsize) == DD_OK)
     2391          {
     2392              RECT newdest, newsrc;
     2393              LPRECT lpClipRect = (LPRECT)&lpRgnData->Buffer;
     2394
     2395              for(i=0;i<lpRgnData->rdh.nCount;i++)
     2396              {
     2397                  if(IntersectRect(&newdest, &DestRect, &lpClipRect[i]) == TRUE)
     2398                  {
     2399                      //TODO: This is not correct for stretching blits
     2400                      newsrc.left   = SrcRect.left + (newdest.left - DestRect.left);
     2401                      newsrc.top    = SrcRect.top + (newdest.top - DestRect.top);
     2402                      newsrc.right  = newsrc.left + RECT_WIDTH(&newdest);
     2403                      newsrc.bottom = newsrc.top + RECT_HEIGHT(&newdest);
     2404
     2405                      ret = SurfDoBlt(This, &newdest, lpDDSrcSurface, &newsrc, dwFlags, lpDDBltFx);
     2406                      if(ret != DD_OK) {
     2407                          break;
     2408                      }
     2409                  }
     2410              }
     2411              return ret;
     2412          }
     2413      }
     2414  }
     2415doblit:
     2416  return SurfDoBlt(This, &DestRect, lpDDSrcSurface, &SrcRect, dwFlags, lpDDBltFx);
     2417}
     2418//******************************************************************************
     2419//******************************************************************************
     2420HRESULT WIN32API SurfDoBlt(THIS This, LPRECT lpDestRect, LPDIRECTDRAWSURFACE4 lpDDSrcSurface,
     2421                           LPRECT lpSrcRect, DWORD dwFlags, LPDDBLTFX lpDDBltFx)
     2422{
    21642423   // We have determine between 3 different blit senarios.
    21652424   // 1. Blitting between Divebuffers (Front/Backbuffer and primary surface)
     
    21782437
    21792438 int                    x, i, BlitWidth, BlitHeight;
    2180  PALETTEENTRY           SysPal[257];
    2181  PLOGPALETTE            pLogPal = (PLOGPALETTE) SysPal;
    2182  char                   *pBltPos, *pSrcPos;
     2439 char                  *pBltPos, *pSrcPos;
    21832440 DDSURFACEDESC2         DestSurfaceDesc, SrcSurfaceDesc;
    2184  DDRectangle             *pIRectDest,*pIRectSrc,*pIRectTest;
    2185  RECTL                  DestRect, SrcRect;
    21862441 BOOL Found;
    21872442 DWORD dwSrcColor, dwDestColor;
    21882443
    2189   #ifdef DEBUG
    2190     dprintf(("DDRAW: SurfBlt4 To Surf %08X, from Surf %08X\n",dest,src));
    2191     if ( (NULL!=lpDestRect)&& (NULL!=lpSrcRect))
    2192       dprintf(("DDRAW: SurfBlt4 to (%d,%d)(%d,%d) at %08X from (%d,%d)(%d,%d) at %08X\n", lpDestRect->left, lpDestRect->top,
     2444  dprintf(("DDRAW: SurfDoBlt To Surf %08X, from Surf %08X\n",dest,src));
     2445  if ( (NULL!=lpDestRect)&& (NULL!=lpSrcRect))
     2446      dprintf(("DDRAW: SurfDoBlt to (%d,%d)(%d,%d) at %08X from (%d,%d)(%d,%d) at %08X\n", lpDestRect->left, lpDestRect->top,
    21932447               lpDestRect->right, lpDestRect->bottom, dest, lpSrcRect->left, lpSrcRect->top,
    21942448               lpSrcRect->right, lpSrcRect->bottom, src));
    2195 
    2196     _dump_DDBLT(dwFlags);
    2197   #endif
    2198 
    2199 
    2200   if (NULL!=lpDestRect)
    2201   {
    2202     // HACK: RA does pss in negative values we might be better etrun an error,
    2203     //for now we clip
    2204 #define RA_HACK 1
    2205 
    2206 #ifdef RA_HACK
    2207     int top,left,bottom,right;
    2208 
    2209     top    = lpDestRect->top;
    2210     left   = lpDestRect->left;
    2211     bottom = lpDestRect->bottom;
    2212     right  = lpDestRect->right;
    2213 
    2214     if(top<0)
    2215     {
    2216       bottom += top;
    2217       top = 0;
    2218     }
    2219 
    2220     if(top > dest->height)
    2221       return DDERR_INVALIDPARAMS;
    2222 
    2223     if(bottom<0)
    2224       return DDERR_INVALIDPARAMS;
    2225 
    2226     if(bottom>dest->height)
    2227       bottom=dest->height;
    2228 
    2229     if(left<0)
    2230     {
    2231       right += left;
    2232       left = 0;
    2233     }
    2234 
    2235     if(left>dest->width)
    2236       return DDERR_INVALIDPARAMS;
    2237 
    2238     if(right<0)
    2239       return DDERR_INVALIDPARAMS;
    2240 
    2241     if(right>dest->width)
    2242        right = dest->width;
    2243 #endif    // RA_HACK
    2244 
    2245     pIRectDest = new DDRectangle( top,
    2246                                   left,
    2247                                   bottom,
    2248                                   right);
    2249 #ifdef RA_HACK
    2250     DestRect.top    = top;
    2251     DestRect.left   = left;
    2252     DestRect.bottom = bottom;
    2253     DestRect.right  = right;
    2254 #else
    2255     memcpy(&DestRect,lpDestRect,sizeof(RECTL) );
    2256 #endif //RA_HACK
    2257   }
    2258   else
    2259   {
    2260     pIRectDest = new DDRectangle( 0, 0, dest->height, dest->width);
    2261     DestRect.top    = 0;
    2262     DestRect.left   = 0;
    2263     DestRect.bottom = dest->height;
    2264     DestRect.right  = dest->width;
    2265   }
    2266 
    2267   if(dest->fLocked)
    2268   {
    2269     if (NULL==lpDestRect)
    2270     {
    2271       // If anything is locked we can't blit to the complete surface as
    2272       // a part is locked
    2273       Found = TRUE;
    2274     }
    2275     else
    2276     {
    2277       // If the dest Rectangle intersects with any of the locked rectangles
    2278       // we can't blit to it
    2279 
    2280       Found = FALSE;
    2281       i=0;
    2282       while( (i<DPA_GetPtrCount(dest->DPA_LockedRects))  && !Found)
    2283       {
    2284         pIRectTest = (DDRectangle*) DPA_FastGetPtr(dest->DPA_LockedRects,i);
    2285         Found = pIRectDest->intersects(*pIRectTest);
    2286         i++;
    2287       }
    2288 
    2289     }
    2290 
    2291     if (Found)
    2292     {
    2293       delete pIRectDest;
    2294       dprintf(("DDRAW: Blt: Dest Surface partially locked\n"));
    2295       return(DDERR_SURFACEBUSY);
    2296     }
    2297   }
    22982449
    22992450  DestSurfaceDesc.dwSize = sizeof(DDSURFACEDESC2);
     
    23792530  }
    23802531
    2381   if (NULL!=lpSrcRect)
    2382   {
    2383 #ifdef RA_HACK
    2384     // Same as for dest rectangle now for src
    2385 
    2386     int top,left,bottom,right;
    2387 
    2388     top    = lpSrcRect->top;
    2389     left   = lpSrcRect->left;
    2390     bottom = lpSrcRect->bottom;
    2391     right  = lpSrcRect->right;
    2392 
    2393     if(top<0)
    2394     {
    2395       bottom += top;
    2396       top = 0;
    2397     }
    2398 
    2399     if(top > src->height)
    2400       return DDERR_INVALIDPARAMS;
    2401 
    2402     if(bottom<0)
    2403       return DDERR_INVALIDPARAMS;
    2404 
    2405     if(bottom>src->height)
    2406       bottom=src->height;
    2407 
    2408     if(left<0)
    2409     {
    2410       right += left;
    2411       left = 0;
    2412     }
    2413 
    2414     if(left>src->width)
    2415       return DDERR_INVALIDPARAMS;
    2416 
    2417     if(right<0)
    2418       return DDERR_INVALIDPARAMS;
    2419 
    2420     if(right>src->width)
    2421        right = src->width;
    2422 #endif    // RA_HACK
    2423 
    2424     pIRectSrc = new DDRectangle( top,
    2425                                  left,
    2426                                  bottom,
    2427                                  right);
    2428 #ifdef RA_HACK
    2429     SrcRect.top    = top;
    2430     SrcRect.left   = left;
    2431     SrcRect.bottom = bottom;
    2432     SrcRect.right  = right;
    2433 #else
    2434     memcpy(&SrcRect,lpSrcRect,sizeof(RECTL) );
    2435 #endif
    2436   }
    2437   else
    2438   {
    2439     pIRectSrc = new DDRectangle( 0, 0, src->height, src->width);
    2440     SrcRect.top    = 0;
    2441     SrcRect.left   = 0;
    2442     SrcRect.bottom = src->height;
    2443     SrcRect.right  = src->width;
    2444   }
    2445 
    2446   if(src->fLocked)
    2447   {
    2448     if (NULL==lpSrcRect)
    2449     {
    2450       // If anything is locked we can't blit from the complete surface as
    2451       // a part is locked
    2452       Found = TRUE;
    2453     }
    2454     else
    2455     {
    2456       // If the src Rectangle intersects with any of the locked rectangles of the
    2457       // source surface we can't blit from it
    2458 
    2459       Found = FALSE;
    2460       i=0;
    2461 
    2462       while((i<DPA_GetPtrCount(src->DPA_LockedRects) ) && !Found)
    2463       {
    2464         pIRectTest = (DDRectangle*) DPA_FastGetPtr(src->DPA_LockedRects,i);
    2465         Found = pIRectDest->intersects(*pIRectTest);
    2466         i++;
    2467       }
    2468 
    2469     }
    2470 
    2471     if (Found)
    2472     {
    2473       delete pIRectSrc;
    2474       dprintf(("DDRAW: Blt: Src Surface partly locked\n"));
    2475 
    2476       return(DDERR_SURFACEBUSY);
    2477     }
    2478   }
    2479 
    24802532  if( ( (NULL==lpDestRect) && (NULL!=lpSrcRect) ) ||
    24812533      ( (NULL==lpSrcRect) && (NULL!=lpDestRect) ) )
     
    24862538  }
    24872539
    2488   if( ( pIRectDest->width()  != pIRectSrc->width() ) ||
    2489       ( pIRectDest->height() != pIRectSrc->height() )
     2540  if( ( RECT_WIDTH(lpDestRect)  != RECT_WIDTH(lpSrcRect) ) ||
     2541      ( RECT_HEIGHT(lpDestRect) != RECT_HEIGHT(lpSrcRect) )
    24902542    )
    24912543  {
     
    25052557      dprintf(("DDRAW: Src is Primary Surface\n"));
    25062558
    2507       if( *pIRectDest == *pIRectSrc)
     2559      if( RECT_EQUAL(lpDestRect, lpSrcRect))
    25082560        return DD_OK; // rects are the same => no blit needed
    25092561
     
    25112563
    25122564      MoveRects( dest->pDiveBuffer,
    2513                  (LPRECT)&DestRect,
    2514                  (LPRECT)&SrcRect,
     2565                 lpDestRect,
     2566                 lpSrcRect,
    25152567                 dest->dwBytesPPDive,
    25162568                 dest->dwPitchDB);
     
    25192571      {
    25202572        MoveRects( dest->pFrameBuffer,
    2521                    (LPRECT)&DestRect,
    2522                    (LPRECT)&SrcRect,
     2573                   lpDestRect,
     2574                   lpSrcRect,
    25232575                   dest->lpDraw->GetScreenBpp()>>3,
    25242576                   dest->dwPitchFB);
     
    25542606        dest->BltSolid( dest->pDiveBuffer,
    25552607                        dest->pFrameBuffer,
    2556                         DestRect.top,
    2557                         DestRect.left,
     2608                        lpDestRect->top,
     2609                        lpDestRect->left,
    25582610                        dest->dwPitchDB,
    25592611                        dest->dwPitchFB,
    25602612                        src->pDiveBuffer,
    25612613                        src->pFrameBuffer,
    2562                         SrcRect.top,
    2563                         SrcRect.left,
    2564                         pIRectDest->width(),
    2565                         pIRectDest->height(),
     2614                        lpSrcRect->top,
     2615                        lpSrcRect->left,
     2616                        RECT_WIDTH(lpDestRect),
     2617                        RECT_HEIGHT(lpDestRect),
    25662618                        src->dwPitchDB,
    25672619                        src->dwPitchFB
     
    25712623      else
    25722624      {
    2573         pBltPos = (char*) dest->pDiveBuffer + (DestRect.top * dest->dwPitchDB) +
    2574                   (DestRect.left * dest->dwBytesPPDive);
    2575 
    2576         pSrcPos = (char*) src->pDiveBuffer + (SrcRect.top * src->dwPitchDB) +
    2577                   (SrcRect.left * src->dwBytesPPDive);
    2578 
    2579         BlitHeight = pIRectDest->height();
    2580         BlitWidth = pIRectDest->width();
     2625        pBltPos = (char*) dest->pDiveBuffer + (lpDestRect->top * dest->dwPitchDB) +
     2626                  (lpDestRect->left * dest->dwBytesPPDive);
     2627
     2628        pSrcPos = (char*) src->pDiveBuffer + (lpSrcRect->top * src->dwPitchDB) +
     2629                  (lpSrcRect->left * src->dwBytesPPDive);
     2630
     2631        BlitHeight = RECT_HEIGHT(lpDestRect);
     2632        BlitWidth  = RECT_WIDTH(lpDestRect);
    25812633        // Transparent Blit
    25822634        if( (dwFlags &DDBLT_KEYSRC) || (dwFlags & DDBLT_KEYSRCOVERRIDE) )
     
    26092661        // DIVE => DIVE  or Mem => Dive
    26102662        // or a rectangle from streen to a buffer can be handelt in the same way
    2611         pBltPos = (char*) dest->pDiveBuffer + (DestRect.top * dest->dwPitchDB) +
    2612                   (DestRect.left * dest->dwBytesPPDive);
    2613 
    2614         pSrcPos = (char*) src->pDiveBuffer + (SrcRect.top * src->dwPitchDB) +
    2615                   (SrcRect.left * src->dwBytesPPDive);
    2616 
    2617         BlitHeight = pIRectDest->height();
    2618         BlitWidth = pIRectDest->width();
     2663        pBltPos = (char*) dest->pDiveBuffer + (lpDestRect->top * dest->dwPitchDB) +
     2664                  (lpDestRect->left * dest->dwBytesPPDive);
     2665
     2666        pSrcPos = (char*) src->pDiveBuffer + (lpSrcRect->top * src->dwPitchDB) +
     2667                  (lpSrcRect->left * src->dwBytesPPDive);
     2668
     2669        BlitHeight = RECT_HEIGHT(lpDestRect);
     2670        BlitWidth  = RECT_WIDTH(lpDestRect);
    26192671
    26202672        // Check for transparent blit
     
    26232675          dest->BltSolid( dest->pDiveBuffer,
    26242676                          dest->pFrameBuffer,
    2625                           DestRect.top,
    2626                           DestRect.left,
     2677                          lpDestRect->top,
     2678                          lpDestRect->left,
    26272679                          dest->dwPitchDB,
    26282680                          dest->dwPitchFB,
    26292681                          src->pDiveBuffer,
    26302682                          src->pFrameBuffer,
    2631                           SrcRect.top,
    2632                           SrcRect.left,
    2633                           pIRectDest->width(),
    2634                           pIRectDest->height(),
     2683                          lpSrcRect->top,
     2684                          lpSrcRect->left,
     2685                          RECT_WIDTH(lpDestRect),
     2686                          RECT_HEIGHT(lpDestRect),
    26352687                          src->dwPitchDB,
    26362688                          src->dwPitchFB
     
    26632715
    26642716      if( (src->pDiveBuffer == dest->pDiveBuffer) &&
    2665           (pIRectDest->intersects(*pIRectSrc) ) )
     2717          (intersects(lpDestRect, lpSrcRect) ) )
    26662718      {
    26672719        // Overlapping rects  on the same surface ?
     
    26702722
    26712723        MoveRects( dest->pDiveBuffer,
    2672                    (LPRECT)&DestRect,
    2673                    (LPRECT)&SrcRect,
     2724                   lpDestRect,
     2725                   lpSrcRect,
    26742726                   dest->dwBytesPPDive,
    26752727                   dest->dwPitchDB);
     
    26792731        {
    26802732          MoveRects( dest->pFrameBuffer,
    2681                      (LPRECT)&DestRect,
    2682                      (LPRECT)&SrcRect,
     2733                     lpDestRect,
     2734                     lpSrcRect,
    26832735                     dest->lpDraw->GetScreenBpp()>>3,
    26842736                     dest->dwPitchFB);
     
    26922744        dest->BltSolid( dest->pDiveBuffer,
    26932745                        dest->pFrameBuffer,
    2694                         DestRect.top,
    2695                         DestRect.left,
     2746                        lpDestRect->top,
     2747                        lpDestRect->left,
    26962748                        dest->dwPitchDB,
    26972749                        dest->dwPitchFB,
    26982750                        src->pDiveBuffer,
    26992751                        src->pFrameBuffer,
    2700                         SrcRect.top,
    2701                         SrcRect.left,
    2702                         pIRectDest->width(),
    2703                         pIRectDest->height(),
     2752                        lpSrcRect->top,
     2753                        lpSrcRect->left,
     2754                        RECT_WIDTH(lpDestRect),
     2755                        RECT_HEIGHT(lpDestRect),
    27042756                        src->dwPitchDB,
    27052757                        src->dwPitchFB
     
    27082760      else
    27092761      {
    2710         pBltPos = (char*) dest->pDiveBuffer + (DestRect.top * dest->dwPitchDB) +
    2711                   (DestRect.left * dest->dwBytesPPDive);
    2712 
    2713         pSrcPos = (char*) src->pDiveBuffer + (SrcRect.top * src->dwPitchDB) +
    2714                   (SrcRect.left * src->dwBytesPPDive);
    2715 
    2716         BlitHeight = pIRectDest->height();
    2717         BlitWidth = pIRectDest->width();
     2762        pBltPos = (char*) dest->pDiveBuffer + (lpDestRect->top * dest->dwPitchDB) +
     2763                  (lpDestRect->left * dest->dwBytesPPDive);
     2764
     2765        pSrcPos = (char*) src->pDiveBuffer + (lpSrcRect->top * src->dwPitchDB) +
     2766                  (lpSrcRect->left * src->dwBytesPPDive);
     2767
     2768        BlitHeight = RECT_HEIGHT(lpDestRect);
     2769        BlitWidth  = RECT_WIDTH(lpDestRect);
    27182770        DWORD dwPitch = dest->dwPitchDB;
    27192771
     
    27512803            dwPitch = -dwPitch;
    27522804            pBltPos = (char*) dest->pDiveBuffer +
    2753                       ((DestRect.top +BlitHeight)* dest->dwPitchDB) +
    2754                       (DestRect.left * dest->dwBytesPPDive);
     2805                      ((lpDestRect->top +BlitHeight)* dest->dwPitchDB) +
     2806                      (lpDestRect->left * dest->dwBytesPPDive);
    27552807
    27562808            dwFx &= ~DDBLTFX_MIRRORUPDOWN;  // remove handled flag
     
    46544706  }
    46554707
    4656 
    46574708  return rc;
    46584709}
     
    50005051    Found = (pIRectEnum != NULL);
    50015052#else
    5002     pIRectUnlock = new DDRectangle( 0, 0, me->height, me->width);
     5053    pIRectUnlock = new DDRectangle( 0, 0, me->width, me->height);
    50035054
    50045055    while(i<DPA_GetPtrCount(me->DPA_LockedRects) && !Found)
     
    51155166  {
    51165167    dprintf(("DDRAW: Unlock rectangle\n"));
    5117     pIRectUnlock = new DDRectangle( lpSurfaceRect->top,
    5118                                     lpSurfaceRect->left,
    5119                                     lpSurfaceRect->bottom,
    5120                                     lpSurfaceRect->right);
     5168    pIRectUnlock = new DDRectangle( lpSurfaceRect->left, lpSurfaceRect->top,
     5169                                    lpSurfaceRect->right, lpSurfaceRect->bottom);
    51215170  }
    51225171  else
    51235172  {
    51245173    dprintf(("DDRAW: Unlock complete surface\n"));
    5125     pIRectUnlock = new DDRectangle( 0, 0, me->height, me->width);
     5174    pIRectUnlock = new DDRectangle( 0, 0, me->width, me->height);
    51265175  }
    51275176
     
    51915240    dprintf(("DDRAW: Unlock OK\n\n"));
    51925241    rc = DD_OK;
     5242
    51935243  }
    51945244
  • TabularUnified trunk/src/ddraw/OS2SURFACE.H

    r2174 r6935  
    1 /* $Id: OS2SURFACE.H,v 1.13 1999-12-21 01:28:19 hugh Exp $ */
     1/* $Id: OS2SURFACE.H,v 1.14 2001-10-03 13:49:41 sandervl Exp $ */
    22
    33/*
     
    1919#undef THIS
    2020#define THIS VOID*
     21
     22#define RECT_WIDTH(a)   ((a)->right - (a)->left)
     23#define RECT_HEIGHT(a)  ((a)->bottom - (a)->top)
     24#define RECT_EQUAL(a,b) memcmp(a, b, sizeof(RECT))
     25
     26inline BOOL intersects(LPRECT lprcSrc1, LPRECT lprcSrc2)
     27{
     28  if( (lprcSrc1->left >= lprcSrc2->right) || (lprcSrc2->left >= lprcSrc1->right) ||
     29      (lprcSrc1->top >= lprcSrc2->bottom) || (lprcSrc2->top >= lprcSrc1->bottom) )
     30  {
     31      return FALSE;
     32  }
     33  return TRUE;
     34}
    2135
    2236typedef struct _OS2RECTL {
     
    148162        HDPA DPA_LockedRects;
    149163
    150     friend    HRESULT __stdcall SurfQueryInterface(THIS, REFIID riid, LPVOID FAR * ppvObj);
    151     friend    ULONG   __stdcall SurfAddRef(THIS);
    152     friend    ULONG   __stdcall SurfRelease(THIS);
    153     friend    HRESULT __stdcall SurfAddAttachedSurface(THIS, LPDIRECTDRAWSURFACE2);
    154     friend    HRESULT __stdcall SurfAddAttachedSurface3(THIS, LPDIRECTDRAWSURFACE3);
    155     friend    HRESULT __stdcall SurfAddAttachedSurface4(THIS, LPDIRECTDRAWSURFACE4);
    156     friend    HRESULT __stdcall SurfAddOverlayDirtyRect(THIS, LPRECT);
    157     friend    HRESULT __stdcall SurfBlt(THIS, LPRECT,LPDIRECTDRAWSURFACE2, LPRECT,DWORD, LPDDBLTFX);
    158     friend    HRESULT __stdcall SurfBlt3(THIS, LPRECT,LPDIRECTDRAWSURFACE3, LPRECT,DWORD, LPDDBLTFX);
    159     friend    HRESULT __stdcall SurfBlt4(THIS, LPRECT,LPDIRECTDRAWSURFACE4, LPRECT,DWORD, LPDDBLTFX);
    160     friend    HRESULT __stdcall SurfBltBatch(THIS, LPDDBLTBATCH, DWORD, DWORD );
    161     friend    HRESULT __stdcall SurfBltFast(THIS, DWORD,DWORD,LPDIRECTDRAWSURFACE2, LPRECT,DWORD);
    162     friend    HRESULT __stdcall SurfBltFast3(THIS, DWORD,DWORD,LPDIRECTDRAWSURFACE3, LPRECT,DWORD);
    163     friend    HRESULT __stdcall SurfBltFast4(THIS, DWORD,DWORD,LPDIRECTDRAWSURFACE4, LPRECT,DWORD);
    164     friend    HRESULT __stdcall SurfDeleteAttachedSurface(THIS, DWORD,LPDIRECTDRAWSURFACE2);
    165     friend    HRESULT __stdcall SurfDeleteAttachedSurface3(THIS, DWORD,LPDIRECTDRAWSURFACE3);
    166     friend    HRESULT __stdcall SurfDeleteAttachedSurface4(THIS, DWORD,LPDIRECTDRAWSURFACE4);
    167     friend    HRESULT __stdcall SurfEnumAttachedSurfaces(THIS, LPVOID,LPDDENUMSURFACESCALLBACK);
    168     friend    HRESULT __stdcall SurfEnumAttachedSurfaces4(THIS, LPVOID,LPDDENUMSURFACESCALLBACK2);
    169     friend    HRESULT __stdcall SurfEnumOverlayZOrders(THIS, DWORD,LPVOID,LPDDENUMSURFACESCALLBACK);
    170     friend    HRESULT __stdcall SurfEnumOverlayZOrders4(THIS, DWORD,LPVOID,LPDDENUMSURFACESCALLBACK2);
    171     friend    HRESULT __stdcall SurfFlip(THIS, LPDIRECTDRAWSURFACE2 , DWORD);
    172     friend    HRESULT __stdcall SurfFlip3(THIS, LPDIRECTDRAWSURFACE3 , DWORD);
    173     friend    HRESULT __stdcall SurfFlip4(THIS, LPDIRECTDRAWSURFACE4 , DWORD);
    174     friend    HRESULT __stdcall SurfGetAttachedSurface(THIS, LPDDSCAPS, LPDIRECTDRAWSURFACE2 FAR *);
    175     friend    HRESULT __stdcall SurfGetAttachedSurface3(THIS, LPDDSCAPS, LPDIRECTDRAWSURFACE3 FAR *);
    176     friend    HRESULT __stdcall SurfGetAttachedSurface4(THIS, LPDDSCAPS2, LPDIRECTDRAWSURFACE4 FAR *);
    177     friend    HRESULT __stdcall SurfGetBltStatus(THIS, DWORD);
    178     friend    HRESULT __stdcall SurfGetCaps(THIS, LPDDSCAPS);
    179     friend    HRESULT __stdcall SurfGetCaps4(THIS, LPDDSCAPS2);
    180     friend    HRESULT __stdcall SurfGetClipper(THIS, LPDIRECTDRAWCLIPPER FAR*);
    181     friend    HRESULT __stdcall SurfGetColorKey(THIS, DWORD, LPDDCOLORKEY);
    182     friend    HRESULT __stdcall SurfGetDC(THIS, HDC FAR *);
    183     friend    HRESULT __stdcall SurfGetFlipStatus(THIS, DWORD);
    184     friend    HRESULT __stdcall SurfGetOverlayPosition(THIS, LPLONG, LPLONG );
    185     friend    HRESULT __stdcall SurfGetPalette(THIS, LPDIRECTDRAWPALETTE FAR*);
    186     friend    HRESULT __stdcall SurfGetPixelFormat(THIS, LPDDPIXELFORMAT);
    187     friend    HRESULT __stdcall SurfGetSurfaceDesc(THIS, LPDDSURFACEDESC);
    188     friend    HRESULT __stdcall SurfGetSurfaceDesc4(THIS, LPDDSURFACEDESC2);
    189     friend    HRESULT __stdcall SurfInitialize(THIS, LPDIRECTDRAW, LPDDSURFACEDESC);
    190     friend    HRESULT __stdcall SurfInitialize4(THIS, LPDIRECTDRAW, LPDDSURFACEDESC2);
    191     friend    HRESULT __stdcall SurfIsLost(THIS);
    192     friend    HRESULT __stdcall SurfLock(THIS, LPRECT,LPDDSURFACEDESC,DWORD,HANDLE);
    193     friend    HRESULT __stdcall SurfLock4(THIS, LPRECT,LPDDSURFACEDESC2,DWORD,HANDLE);
    194     friend    HRESULT __stdcall SurfReleaseDC(THIS, HDC);
    195     friend    HRESULT __stdcall SurfRestore(THIS);
    196     friend    HRESULT __stdcall SurfSetClipper(THIS, LPDIRECTDRAWCLIPPER);
    197     friend    HRESULT __stdcall SurfSetColorKey(THIS, DWORD, LPDDCOLORKEY);
    198     friend    HRESULT __stdcall SurfSetOverlayPosition(THIS, LONG, LONG );
    199     friend    HRESULT __stdcall SurfSetPalette(THIS, LPDIRECTDRAWPALETTE);
    200     friend    HRESULT __stdcall SurfUnlock(THIS, LPVOID);
    201     friend    HRESULT __stdcall SurfUnlock4(THIS, LPRECT);
    202     friend    HRESULT __stdcall SurfUpdateOverlay(THIS, LPRECT, LPDIRECTDRAWSURFACE2,LPRECT,DWORD, LPDDOVERLAYFX);
    203     friend    HRESULT __stdcall SurfUpdateOverlay3(THIS, LPRECT, LPDIRECTDRAWSURFACE3,LPRECT,DWORD, LPDDOVERLAYFX);
    204     friend    HRESULT __stdcall SurfUpdateOverlay4(THIS, LPRECT, LPDIRECTDRAWSURFACE4,LPRECT,DWORD, LPDDOVERLAYFX);
    205     friend    HRESULT __stdcall SurfUpdateOverlayDisplay(THIS, DWORD);
    206     friend    HRESULT __stdcall SurfUpdateOverlayZOrder(THIS, DWORD, LPDIRECTDRAWSURFACE2);
    207     friend    HRESULT __stdcall SurfUpdateOverlayZOrder3(THIS, DWORD, LPDIRECTDRAWSURFACE3);
    208     friend    HRESULT __stdcall SurfUpdateOverlayZOrder4(THIS, DWORD, LPDIRECTDRAWSURFACE4);
     164    friend    HRESULT  WIN32API SurfQueryInterface(THIS, REFIID riid, LPVOID FAR * ppvObj);
     165    friend    ULONG    WIN32API SurfAddRef(THIS);
     166    friend    ULONG    WIN32API SurfRelease(THIS);
     167    friend    HRESULT  WIN32API SurfAddAttachedSurface(THIS, LPDIRECTDRAWSURFACE2);
     168    friend    HRESULT  WIN32API SurfAddAttachedSurface3(THIS, LPDIRECTDRAWSURFACE3);
     169    friend    HRESULT  WIN32API SurfAddAttachedSurface4(THIS, LPDIRECTDRAWSURFACE4);
     170    friend    HRESULT  WIN32API SurfAddOverlayDirtyRect(THIS, LPRECT);
     171    friend    HRESULT  WIN32API SurfBlt(THIS, LPRECT,LPDIRECTDRAWSURFACE2, LPRECT,DWORD, LPDDBLTFX);
     172    friend    HRESULT  WIN32API SurfBlt3(THIS, LPRECT,LPDIRECTDRAWSURFACE3, LPRECT,DWORD, LPDDBLTFX);
     173    friend    HRESULT  WIN32API SurfBlt4(THIS, LPRECT,LPDIRECTDRAWSURFACE4, LPRECT,DWORD, LPDDBLTFX);
     174    friend    HRESULT  WIN32API SurfDoBlt(THIS This, LPRECT lpDestRect, LPDIRECTDRAWSURFACE4 lpDDSrcSurface,
     175                                          LPRECT lpSrcRect, DWORD dwFlags, LPDDBLTFX lpDDBltFx);
     176    friend    HRESULT  WIN32API SurfBltBatch(THIS, LPDDBLTBATCH, DWORD, DWORD );
     177    friend    HRESULT  WIN32API SurfBltFast(THIS, DWORD,DWORD,LPDIRECTDRAWSURFACE2, LPRECT,DWORD);
     178    friend    HRESULT  WIN32API SurfBltFast3(THIS, DWORD,DWORD,LPDIRECTDRAWSURFACE3, LPRECT,DWORD);
     179    friend    HRESULT  WIN32API SurfBltFast4(THIS, DWORD,DWORD,LPDIRECTDRAWSURFACE4, LPRECT,DWORD);
     180    friend    HRESULT  WIN32API SurfDeleteAttachedSurface(THIS, DWORD,LPDIRECTDRAWSURFACE2);
     181    friend    HRESULT  WIN32API SurfDeleteAttachedSurface3(THIS, DWORD,LPDIRECTDRAWSURFACE3);
     182    friend    HRESULT  WIN32API SurfDeleteAttachedSurface4(THIS, DWORD,LPDIRECTDRAWSURFACE4);
     183    friend    HRESULT  WIN32API SurfEnumAttachedSurfaces(THIS, LPVOID,LPDDENUMSURFACESCALLBACK);
     184    friend    HRESULT  WIN32API SurfEnumAttachedSurfaces4(THIS, LPVOID,LPDDENUMSURFACESCALLBACK2);
     185    friend    HRESULT  WIN32API SurfEnumOverlayZOrders(THIS, DWORD,LPVOID,LPDDENUMSURFACESCALLBACK);
     186    friend    HRESULT  WIN32API SurfEnumOverlayZOrders4(THIS, DWORD,LPVOID,LPDDENUMSURFACESCALLBACK2);
     187    friend    HRESULT  WIN32API SurfFlip(THIS, LPDIRECTDRAWSURFACE2 , DWORD);
     188    friend    HRESULT  WIN32API SurfFlip3(THIS, LPDIRECTDRAWSURFACE3 , DWORD);
     189    friend    HRESULT  WIN32API SurfFlip4(THIS, LPDIRECTDRAWSURFACE4 , DWORD);
     190    friend    HRESULT  WIN32API SurfGetAttachedSurface(THIS, LPDDSCAPS, LPDIRECTDRAWSURFACE2 FAR *);
     191    friend    HRESULT  WIN32API SurfGetAttachedSurface3(THIS, LPDDSCAPS, LPDIRECTDRAWSURFACE3 FAR *);
     192    friend    HRESULT  WIN32API SurfGetAttachedSurface4(THIS, LPDDSCAPS2, LPDIRECTDRAWSURFACE4 FAR *);
     193    friend    HRESULT  WIN32API SurfGetBltStatus(THIS, DWORD);
     194    friend    HRESULT  WIN32API SurfGetCaps(THIS, LPDDSCAPS);
     195    friend    HRESULT  WIN32API SurfGetCaps4(THIS, LPDDSCAPS2);
     196    friend    HRESULT  WIN32API SurfGetClipper(THIS, LPDIRECTDRAWCLIPPER FAR*);
     197    friend    HRESULT  WIN32API SurfGetColorKey(THIS, DWORD, LPDDCOLORKEY);
     198    friend    HRESULT  WIN32API SurfGetDC(THIS, HDC FAR *);
     199    friend    HRESULT  WIN32API SurfGetFlipStatus(THIS, DWORD);
     200    friend    HRESULT  WIN32API SurfGetOverlayPosition(THIS, LPLONG, LPLONG );
     201    friend    HRESULT  WIN32API SurfGetPalette(THIS, LPDIRECTDRAWPALETTE FAR*);
     202    friend    HRESULT  WIN32API SurfGetPixelFormat(THIS, LPDDPIXELFORMAT);
     203    friend    HRESULT  WIN32API SurfGetSurfaceDesc(THIS, LPDDSURFACEDESC);
     204    friend    HRESULT  WIN32API SurfGetSurfaceDesc4(THIS, LPDDSURFACEDESC2);
     205    friend    HRESULT  WIN32API SurfInitialize(THIS, LPDIRECTDRAW, LPDDSURFACEDESC);
     206    friend    HRESULT  WIN32API SurfInitialize4(THIS, LPDIRECTDRAW, LPDDSURFACEDESC2);
     207    friend    HRESULT  WIN32API SurfIsLost(THIS);
     208    friend    HRESULT  WIN32API SurfLock(THIS, LPRECT,LPDDSURFACEDESC,DWORD,HANDLE);
     209    friend    HRESULT  WIN32API SurfLock4(THIS, LPRECT,LPDDSURFACEDESC2,DWORD,HANDLE);
     210    friend    HRESULT  WIN32API SurfReleaseDC(THIS, HDC);
     211    friend    HRESULT  WIN32API SurfRestore(THIS);
     212    friend    HRESULT  WIN32API SurfSetClipper(THIS, LPDIRECTDRAWCLIPPER);
     213    friend    HRESULT  WIN32API SurfSetColorKey(THIS, DWORD, LPDDCOLORKEY);
     214    friend    HRESULT  WIN32API SurfSetOverlayPosition(THIS, LONG, LONG );
     215    friend    HRESULT  WIN32API SurfSetPalette(THIS, LPDIRECTDRAWPALETTE);
     216    friend    HRESULT  WIN32API SurfUnlock(THIS, LPVOID);
     217    friend    HRESULT  WIN32API SurfUnlock4(THIS, LPRECT);
     218    friend    HRESULT  WIN32API SurfUpdateOverlay(THIS, LPRECT, LPDIRECTDRAWSURFACE2,LPRECT,DWORD, LPDDOVERLAYFX);
     219    friend    HRESULT  WIN32API SurfUpdateOverlay3(THIS, LPRECT, LPDIRECTDRAWSURFACE3,LPRECT,DWORD, LPDDOVERLAYFX);
     220    friend    HRESULT  WIN32API SurfUpdateOverlay4(THIS, LPRECT, LPDIRECTDRAWSURFACE4,LPRECT,DWORD, LPDDOVERLAYFX);
     221    friend    HRESULT  WIN32API SurfUpdateOverlayDisplay(THIS, DWORD);
     222    friend    HRESULT  WIN32API SurfUpdateOverlayZOrder(THIS, DWORD, LPDIRECTDRAWSURFACE2);
     223    friend    HRESULT  WIN32API SurfUpdateOverlayZOrder3(THIS, DWORD, LPDIRECTDRAWSURFACE3);
     224    friend    HRESULT  WIN32API SurfUpdateOverlayZOrder4(THIS, DWORD, LPDIRECTDRAWSURFACE4);
    209225    // Added in V2 interface
    210     friend    HRESULT __stdcall SurfGetDDInterface(THIS, LPVOID FAR *);
    211     friend    HRESULT __stdcall SurfPageLock(THIS, DWORD);
    212     friend    HRESULT __stdcall SurfPageUnlock(THIS, DWORD);
     226    friend    HRESULT  WIN32API SurfGetDDInterface(THIS, LPVOID FAR *);
     227    friend    HRESULT  WIN32API SurfPageLock(THIS, DWORD);
     228    friend    HRESULT  WIN32API SurfPageUnlock(THIS, DWORD);
    213229    // Added in V3 interface
    214     friend    HRESULT __stdcall SurfSetSurfaceDesc(THIS, LPDDSURFACEDESC, DWORD);
    215     friend    HRESULT __stdcall SurfSetSurfaceDesc4(THIS, LPDDSURFACEDESC2, DWORD);
     230    friend    HRESULT  WIN32API SurfSetSurfaceDesc(THIS, LPDDSURFACEDESC, DWORD);
     231    friend    HRESULT  WIN32API SurfSetSurfaceDesc4(THIS, LPDDSURFACEDESC2, DWORD);
    216232    // Added in V4 interface
    217     friend    HRESULT __stdcall SurfSetPrivateData(THIS, REFGUID, LPVOID, DWORD, DWORD);
    218     friend    HRESULT __stdcall SurfGetPrivateData(THIS, REFGUID, LPVOID, LPDWORD);
    219     friend    HRESULT __stdcall SurfFreePrivateData(THIS, REFGUID);
    220     friend    HRESULT __stdcall SurfGetUniquenessValue(THIS, LPDWORD);
    221     friend    HRESULT __stdcall SurfChangeUniquenessValue(THIS);
     233    friend    HRESULT  WIN32API SurfSetPrivateData(THIS, REFGUID, LPVOID, DWORD, DWORD);
     234    friend    HRESULT  WIN32API SurfGetPrivateData(THIS, REFGUID, LPVOID, LPDWORD);
     235    friend    HRESULT  WIN32API SurfFreePrivateData(THIS, REFGUID);
     236    friend    HRESULT  WIN32API SurfGetUniquenessValue(THIS, LPDWORD);
     237    friend    HRESULT  WIN32API SurfChangeUniquenessValue(THIS);
    222238};
    223239
    224240
    225 HRESULT __stdcall SurfQueryInterface(THIS, REFIID riid, LPVOID FAR * ppvObj);
    226 ULONG   __stdcall SurfAddRef(THIS);
    227 ULONG   __stdcall SurfRelease(THIS);
    228 HRESULT __stdcall SurfAddAttachedSurface(THIS, LPDIRECTDRAWSURFACE2);
    229 HRESULT __stdcall SurfAddAttachedSurface3(THIS, LPDIRECTDRAWSURFACE3);
    230 HRESULT __stdcall SurfAddAttachedSurface4(THIS, LPDIRECTDRAWSURFACE4);
    231 HRESULT __stdcall SurfAddOverlayDirtyRect(THIS, LPRECT);
    232 HRESULT __stdcall SurfBlt(THIS, LPRECT,LPDIRECTDRAWSURFACE2, LPRECT,DWORD, LPDDBLTFX);
    233 HRESULT __stdcall SurfBlt3(THIS, LPRECT,LPDIRECTDRAWSURFACE3, LPRECT,DWORD, LPDDBLTFX);
    234 HRESULT __stdcall SurfBlt4(THIS, LPRECT,LPDIRECTDRAWSURFACE4, LPRECT,DWORD, LPDDBLTFX);
    235 HRESULT __stdcall SurfBltBatch(THIS, LPDDBLTBATCH, DWORD, DWORD );
    236 HRESULT __stdcall SurfBltFast(THIS, DWORD,DWORD,LPDIRECTDRAWSURFACE2, LPRECT,DWORD);
    237 HRESULT __stdcall SurfBltFast3(THIS, DWORD,DWORD,LPDIRECTDRAWSURFACE3, LPRECT,DWORD);
    238 HRESULT __stdcall SurfBltFast4(THIS, DWORD,DWORD,LPDIRECTDRAWSURFACE4, LPRECT,DWORD);
    239 HRESULT __stdcall SurfDeleteAttachedSurface(THIS, DWORD,LPDIRECTDRAWSURFACE2);
    240 HRESULT __stdcall SurfDeleteAttachedSurface3(THIS, DWORD,LPDIRECTDRAWSURFACE3);
    241 HRESULT __stdcall SurfDeleteAttachedSurface4(THIS, DWORD,LPDIRECTDRAWSURFACE4);
    242 HRESULT __stdcall SurfEnumAttachedSurfaces(THIS, LPVOID,LPDDENUMSURFACESCALLBACK);
    243 HRESULT __stdcall SurfEnumAttachedSurfaces4(THIS, LPVOID,LPDDENUMSURFACESCALLBACK2);
    244 HRESULT __stdcall SurfEnumOverlayZOrders(THIS, DWORD,LPVOID,LPDDENUMSURFACESCALLBACK);
    245 HRESULT __stdcall SurfEnumOverlayZOrders4(THIS, DWORD,LPVOID,LPDDENUMSURFACESCALLBACK2);
    246 HRESULT __stdcall SurfFlip(THIS, LPDIRECTDRAWSURFACE2 , DWORD);
    247 HRESULT __stdcall SurfFlip3(THIS, LPDIRECTDRAWSURFACE3 , DWORD);
    248 HRESULT __stdcall SurfFlip4(THIS, LPDIRECTDRAWSURFACE4 , DWORD);
    249 HRESULT __stdcall SurfGetAttachedSurface(THIS, LPDDSCAPS, LPDIRECTDRAWSURFACE2 FAR *);
    250 HRESULT __stdcall SurfGetAttachedSurface3(THIS, LPDDSCAPS, LPDIRECTDRAWSURFACE3 FAR *);
    251 HRESULT __stdcall SurfGetAttachedSurface4(THIS, LPDDSCAPS2, LPDIRECTDRAWSURFACE4 FAR *);
    252 HRESULT __stdcall SurfGetBltStatus(THIS, DWORD);
    253 HRESULT __stdcall SurfGetCaps4(THIS, LPDDSCAPS2);
    254 HRESULT __stdcall SurfGetCaps(THIS, LPDDSCAPS);
    255 HRESULT __stdcall SurfGetClipper(THIS, LPDIRECTDRAWCLIPPER FAR*);
    256 HRESULT __stdcall SurfGetColorKey(THIS, DWORD, LPDDCOLORKEY);
    257 HRESULT __stdcall SurfGetDC(THIS, HDC FAR *);
    258 HRESULT __stdcall SurfGetFlipStatus(THIS, DWORD);
    259 HRESULT __stdcall SurfGetOverlayPosition(THIS, LPLONG, LPLONG );
    260 HRESULT __stdcall SurfGetPalette(THIS, LPDIRECTDRAWPALETTE FAR*);
    261 HRESULT __stdcall SurfGetPixelFormat(THIS, LPDDPIXELFORMAT);
    262 HRESULT __stdcall SurfGetSurfaceDesc(THIS, LPDDSURFACEDESC);
    263 HRESULT __stdcall SurfGetSurfaceDesc4(THIS, LPDDSURFACEDESC2);
    264 HRESULT __stdcall SurfInitialize(THIS, LPDIRECTDRAW, LPDDSURFACEDESC);
    265 HRESULT __stdcall SurfInitialize4(THIS, LPDIRECTDRAW, LPDDSURFACEDESC2);
    266 HRESULT __stdcall SurfIsLost(THIS);
    267 HRESULT __stdcall SurfLock(THIS, LPRECT,LPDDSURFACEDESC,DWORD,HANDLE);
    268 HRESULT __stdcall SurfLock4(THIS, LPRECT,LPDDSURFACEDESC2,DWORD,HANDLE);
    269 HRESULT __stdcall SurfReleaseDC(THIS, HDC);
    270 HRESULT __stdcall SurfRestore(THIS);
    271 HRESULT __stdcall SurfSetClipper(THIS, LPDIRECTDRAWCLIPPER);
    272 HRESULT __stdcall SurfSetColorKey(THIS, DWORD, LPDDCOLORKEY);
    273 HRESULT __stdcall SurfSetOverlayPosition(THIS, LONG, LONG );
    274 HRESULT __stdcall SurfSetPalette(THIS, LPDIRECTDRAWPALETTE);
    275 HRESULT __stdcall SurfUnlock(THIS, LPVOID);
    276 HRESULT __stdcall SurfUnlock4(THIS, LPRECT);
    277 HRESULT __stdcall SurfUpdateOverlay(THIS, LPRECT, LPDIRECTDRAWSURFACE2,LPRECT,DWORD, LPDDOVERLAYFX);
    278 HRESULT __stdcall SurfUpdateOverlay3(THIS, LPRECT, LPDIRECTDRAWSURFACE3,LPRECT,DWORD, LPDDOVERLAYFX);
    279 HRESULT __stdcall SurfUpdateOverlay4(THIS, LPRECT, LPDIRECTDRAWSURFACE4,LPRECT,DWORD, LPDDOVERLAYFX);
    280 HRESULT __stdcall SurfUpdateOverlayDisplay(THIS, DWORD);
    281 HRESULT __stdcall SurfUpdateOverlayZOrder(THIS, DWORD, LPDIRECTDRAWSURFACE2);
    282 HRESULT __stdcall SurfUpdateOverlayZOrder3(THIS, DWORD, LPDIRECTDRAWSURFACE3);
    283 HRESULT __stdcall SurfUpdateOverlayZOrder4(THIS, DWORD, LPDIRECTDRAWSURFACE4);
    284 HRESULT __stdcall SurfGetDDInterface(THIS, LPVOID FAR *);
    285 HRESULT __stdcall SurfPageLock(THIS, DWORD);
    286 HRESULT __stdcall SurfPageUnlock(THIS, DWORD);
    287 HRESULT __stdcall SurfSetSurfaceDesc(THIS, LPDDSURFACEDESC, DWORD);
    288 HRESULT __stdcall SurfSetSurfaceDesc4(THIS, LPDDSURFACEDESC2, DWORD);
    289 HRESULT __stdcall SurfSetPrivateData(THIS, REFGUID, LPVOID, DWORD, DWORD);
    290 HRESULT __stdcall SurfGetPrivateData(THIS, REFGUID, LPVOID, LPDWORD);
    291 HRESULT __stdcall SurfFreePrivateData(THIS, REFGUID);
    292 HRESULT __stdcall SurfGetUniquenessValue(THIS, LPDWORD);
    293 HRESULT __stdcall SurfChangeUniquenessValue(THIS);
     241HRESULT  WIN32API SurfQueryInterface(THIS, REFIID riid, LPVOID FAR * ppvObj);
     242ULONG    WIN32API SurfAddRef(THIS);
     243ULONG    WIN32API SurfRelease(THIS);
     244HRESULT  WIN32API SurfAddAttachedSurface(THIS, LPDIRECTDRAWSURFACE2);
     245HRESULT  WIN32API SurfAddAttachedSurface3(THIS, LPDIRECTDRAWSURFACE3);
     246HRESULT  WIN32API SurfAddAttachedSurface4(THIS, LPDIRECTDRAWSURFACE4);
     247HRESULT  WIN32API SurfAddOverlayDirtyRect(THIS, LPRECT);
     248HRESULT  WIN32API SurfBlt(THIS, LPRECT,LPDIRECTDRAWSURFACE2, LPRECT,DWORD, LPDDBLTFX);
     249HRESULT  WIN32API SurfBlt3(THIS, LPRECT,LPDIRECTDRAWSURFACE3, LPRECT,DWORD, LPDDBLTFX);
     250HRESULT  WIN32API SurfBlt4(THIS, LPRECT,LPDIRECTDRAWSURFACE4, LPRECT,DWORD, LPDDBLTFX);
     251HRESULT  WIN32API SurfDoBlt(THIS This, LPRECT lpDestRect, LPDIRECTDRAWSURFACE4 lpDDSrcSurface,
     252                            LPRECT lpSrcRect, DWORD dwFlags, LPDDBLTFX lpDDBltFx);
     253HRESULT  WIN32API SurfBltBatch(THIS, LPDDBLTBATCH, DWORD, DWORD );
     254HRESULT  WIN32API SurfBltFast(THIS, DWORD,DWORD,LPDIRECTDRAWSURFACE2, LPRECT,DWORD);
     255HRESULT  WIN32API SurfBltFast3(THIS, DWORD,DWORD,LPDIRECTDRAWSURFACE3, LPRECT,DWORD);
     256HRESULT  WIN32API SurfBltFast4(THIS, DWORD,DWORD,LPDIRECTDRAWSURFACE4, LPRECT,DWORD);
     257HRESULT  WIN32API SurfDeleteAttachedSurface(THIS, DWORD,LPDIRECTDRAWSURFACE2);
     258HRESULT  WIN32API SurfDeleteAttachedSurface3(THIS, DWORD,LPDIRECTDRAWSURFACE3);
     259HRESULT  WIN32API SurfDeleteAttachedSurface4(THIS, DWORD,LPDIRECTDRAWSURFACE4);
     260HRESULT  WIN32API SurfEnumAttachedSurfaces(THIS, LPVOID,LPDDENUMSURFACESCALLBACK);
     261HRESULT  WIN32API SurfEnumAttachedSurfaces4(THIS, LPVOID,LPDDENUMSURFACESCALLBACK2);
     262HRESULT  WIN32API SurfEnumOverlayZOrders(THIS, DWORD,LPVOID,LPDDENUMSURFACESCALLBACK);
     263HRESULT  WIN32API SurfEnumOverlayZOrders4(THIS, DWORD,LPVOID,LPDDENUMSURFACESCALLBACK2);
     264HRESULT  WIN32API SurfFlip(THIS, LPDIRECTDRAWSURFACE2 , DWORD);
     265HRESULT  WIN32API SurfFlip3(THIS, LPDIRECTDRAWSURFACE3 , DWORD);
     266HRESULT  WIN32API SurfFlip4(THIS, LPDIRECTDRAWSURFACE4 , DWORD);
     267HRESULT  WIN32API SurfGetAttachedSurface(THIS, LPDDSCAPS, LPDIRECTDRAWSURFACE2 FAR *);
     268HRESULT  WIN32API SurfGetAttachedSurface3(THIS, LPDDSCAPS, LPDIRECTDRAWSURFACE3 FAR *);
     269HRESULT  WIN32API SurfGetAttachedSurface4(THIS, LPDDSCAPS2, LPDIRECTDRAWSURFACE4 FAR *);
     270HRESULT  WIN32API SurfGetBltStatus(THIS, DWORD);
     271HRESULT  WIN32API SurfGetCaps4(THIS, LPDDSCAPS2);
     272HRESULT  WIN32API SurfGetCaps(THIS, LPDDSCAPS);
     273HRESULT  WIN32API SurfGetClipper(THIS, LPDIRECTDRAWCLIPPER FAR*);
     274HRESULT  WIN32API SurfGetColorKey(THIS, DWORD, LPDDCOLORKEY);
     275HRESULT  WIN32API SurfGetDC(THIS, HDC FAR *);
     276HRESULT  WIN32API SurfGetFlipStatus(THIS, DWORD);
     277HRESULT  WIN32API SurfGetOverlayPosition(THIS, LPLONG, LPLONG );
     278HRESULT  WIN32API SurfGetPalette(THIS, LPDIRECTDRAWPALETTE FAR*);
     279HRESULT  WIN32API SurfGetPixelFormat(THIS, LPDDPIXELFORMAT);
     280HRESULT  WIN32API SurfGetSurfaceDesc(THIS, LPDDSURFACEDESC);
     281HRESULT  WIN32API SurfGetSurfaceDesc4(THIS, LPDDSURFACEDESC2);
     282HRESULT  WIN32API SurfInitialize(THIS, LPDIRECTDRAW, LPDDSURFACEDESC);
     283HRESULT  WIN32API SurfInitialize4(THIS, LPDIRECTDRAW, LPDDSURFACEDESC2);
     284HRESULT  WIN32API SurfIsLost(THIS);
     285HRESULT  WIN32API SurfLock(THIS, LPRECT,LPDDSURFACEDESC,DWORD,HANDLE);
     286HRESULT  WIN32API SurfLock4(THIS, LPRECT,LPDDSURFACEDESC2,DWORD,HANDLE);
     287HRESULT  WIN32API SurfReleaseDC(THIS, HDC);
     288HRESULT  WIN32API SurfRestore(THIS);
     289HRESULT  WIN32API SurfSetClipper(THIS, LPDIRECTDRAWCLIPPER);
     290HRESULT  WIN32API SurfSetColorKey(THIS, DWORD, LPDDCOLORKEY);
     291HRESULT  WIN32API SurfSetOverlayPosition(THIS, LONG, LONG );
     292HRESULT  WIN32API SurfSetPalette(THIS, LPDIRECTDRAWPALETTE);
     293HRESULT  WIN32API SurfUnlock(THIS, LPVOID);
     294HRESULT  WIN32API SurfUnlock4(THIS, LPRECT);
     295HRESULT  WIN32API SurfUpdateOverlay(THIS, LPRECT, LPDIRECTDRAWSURFACE2,LPRECT,DWORD, LPDDOVERLAYFX);
     296HRESULT  WIN32API SurfUpdateOverlay3(THIS, LPRECT, LPDIRECTDRAWSURFACE3,LPRECT,DWORD, LPDDOVERLAYFX);
     297HRESULT  WIN32API SurfUpdateOverlay4(THIS, LPRECT, LPDIRECTDRAWSURFACE4,LPRECT,DWORD, LPDDOVERLAYFX);
     298HRESULT  WIN32API SurfUpdateOverlayDisplay(THIS, DWORD);
     299HRESULT  WIN32API SurfUpdateOverlayZOrder(THIS, DWORD, LPDIRECTDRAWSURFACE2);
     300HRESULT  WIN32API SurfUpdateOverlayZOrder3(THIS, DWORD, LPDIRECTDRAWSURFACE3);
     301HRESULT  WIN32API SurfUpdateOverlayZOrder4(THIS, DWORD, LPDIRECTDRAWSURFACE4);
     302HRESULT  WIN32API SurfGetDDInterface(THIS, LPVOID FAR *);
     303HRESULT  WIN32API SurfPageLock(THIS, DWORD);
     304HRESULT  WIN32API SurfPageUnlock(THIS, DWORD);
     305HRESULT  WIN32API SurfSetSurfaceDesc(THIS, LPDDSURFACEDESC, DWORD);
     306HRESULT  WIN32API SurfSetSurfaceDesc4(THIS, LPDDSURFACEDESC2, DWORD);
     307HRESULT  WIN32API SurfSetPrivateData(THIS, REFGUID, LPVOID, DWORD, DWORD);
     308HRESULT  WIN32API SurfGetPrivateData(THIS, REFGUID, LPVOID, LPDWORD);
     309HRESULT  WIN32API SurfFreePrivateData(THIS, REFGUID);
     310HRESULT  WIN32API SurfGetUniquenessValue(THIS, LPDWORD);
     311HRESULT  WIN32API SurfChangeUniquenessValue(THIS);
    294312
    295313void __cdecl MoveRects(char* pBuffer, LPRECT lpDestRect, LPRECT lpSrcRect, int bbp, LONG lPitch);
  • TabularUnified trunk/src/ddraw/rectangle.cpp

    r5344 r6935  
    1 /* $Id: rectangle.cpp,v 1.5 2001-03-20 23:18:56 mike Exp $ */
     1/* $Id: rectangle.cpp,v 1.6 2001-10-03 13:49:41 sandervl Exp $ */
    22
    33/*
     
    1414#include "rectangle.h"
    1515
    16 DDRectangle::DDRectangle ( Coord y1,
    17                     Coord x1,
    18                     Coord y2,
    19                     Coord x2 )
     16DDRectangle::DDRectangle ( Coord x1,
     17                    Coord y1,
     18                    Coord x2,
     19                    Coord y2 )
    2020{
    2121  lTop    = y1;
Note: See TracChangeset for help on using the changeset viewer.