Advertisement
Guest User

AGS D3D read screen by backbuffer

a guest
Feb 10th, 2014
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Diff 1.96 KB | None | 0 0
  1. diff --git a/Engine/platform/windows/gfx/ali3dd3d.cpp b/Engine/platform/windows/gfx/ali3dd3d.cpp
  2. index 3366d5d..2e79332 100644
  3. --- a/Engine/platform/windows/gfx/ali3dd3d.cpp
  4. +++ b/Engine/platform/windows/gfx/ali3dd3d.cpp
  5. @@ -800,7 +800,7 @@ int D3DGraphicsDriver::_initDLLCallback()
  6.    d3dpp.hDeviceWindow = allegro_wnd;
  7.    d3dpp.Windowed = _newmode_windowed;
  8.    d3dpp.EnableAutoDepthStencil = FALSE;
  9. -  d3dpp.Flags = 0;
  10. +  d3dpp.Flags = D3DPRESENTFLAG_LOCKABLE_BACKBUFFER; // we need this flag to access the backbuffer with lockrect
  11.    d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
  12.    if(_newmode_vsync)
  13.      d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_DEFAULT;
  14. @@ -1156,15 +1156,22 @@ void D3DGraphicsDriver::GetCopyOfScreenIntoBitmap(Bitmap *destination)
  15.      if (_pollingCallback)
  16.        _pollingCallback();
  17.  
  18. +    /*
  19.      // This call is v. slow (known DX9 issue)
  20.      if (direct3ddevice->GetFrontBufferData(0, surface) != D3D_OK)
  21.      {
  22.        throw Ali3DException("GetFrontBufferData failed");
  23.      }
  24. +    */
  25. +    if ( direct3ddevice->GetBackBuffer(0,0,D3DBACKBUFFER_TYPE_MONO,&surface)!=D3D_OK)
  26. +    {
  27. +      throw Ali3DException("IDirect3DSurface9::GetBackBuffer failed");
  28. +    }
  29.  
  30.      if (_pollingCallback)
  31.        _pollingCallback();
  32.  
  33. +    /*
  34.      WINDOWINFO windowInfo;
  35.      RECT *areaToCapture = NULL;
  36.  
  37. @@ -1176,6 +1183,7 @@ void D3DGraphicsDriver::GetCopyOfScreenIntoBitmap(Bitmap *destination)
  38.        GetWindowInfo(win_get_window(), &windowInfo);
  39.        areaToCapture = &windowInfo.rcClient;
  40.      }
  41. +    */
  42.  
  43.      Bitmap *finalImage = NULL;
  44.  
  45. @@ -1198,7 +1206,7 @@ void D3DGraphicsDriver::GetCopyOfScreenIntoBitmap(Bitmap *destination)
  46.      }
  47.  
  48.      D3DLOCKED_RECT lockedRect;
  49. -    if (surface->LockRect(&lockedRect, areaToCapture, D3DLOCK_READONLY) != D3D_OK)
  50. +    if (surface->LockRect(&lockedRect, NULL, D3DLOCK_READONLY ) != D3D_OK)
  51.      {
  52.        throw Ali3DException("IDirect3DSurface9::LockRect failed");
  53.      }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement