@@ -324,6 +324,7 @@ GFXD3D11WindowTarget::GFXD3D11WindowTarget()
324324 mDepthStencilView = NULL ;
325325 mDepthStencil = NULL ;
326326 mBackBufferView = NULL ;
327+ mPrevBackBuffer = NULL ;
327328 mSwapChain = NULL ;
328329 dMemset (&mPresentationParams , 0 , sizeof (mPresentationParams ));
329330 mSecondaryWindow = false ;
@@ -335,6 +336,7 @@ GFXD3D11WindowTarget::~GFXD3D11WindowTarget()
335336 SAFE_RELEASE (mDepthStencil );
336337 SAFE_RELEASE (mBackBufferView );
337338 SAFE_RELEASE (mBackBuffer );
339+ SAFE_RELEASE (mPrevBackBuffer );
338340 SAFE_RELEASE (mSwapChain );
339341}
340342
@@ -383,6 +385,7 @@ bool GFXD3D11WindowTarget::present()
383385 AssertFatal (false , " DXGI_ERROR_INVALID_CALL" );
384386 }
385387 // if swap chain flip this needs to be called right after present as it unbinds the backbuffer.
388+ setBackBuffer ();
386389 activate ();
387390 return (hr == S_OK);
388391}
@@ -554,10 +557,12 @@ void GFXD3D11WindowTarget::resurrect()
554557
555558void GFXD3D11WindowTarget::setBackBuffer ()
556559{
557- SAFE_RELEASE ( mBackBuffer );
560+ // dx automatically handles the backbuffer swaps, 0 is always the previous backbuffer.
558561 HRESULT hr = mSwapChain ->GetBuffer (0 , __uuidof (ID3D11Texture2D), (LPVOID*)&mBackBuffer );
559562 if (FAILED (hr))
560563 AssertFatal (false , " GFXD3D11WindowTarget::setBackBuffer - Failed to retrieve backbuffer." );
564+
565+ mPrevBackBuffer = mBackBuffer ;
561566}
562567
563568void GFXD3D11WindowTarget::activate ()
@@ -589,7 +594,7 @@ void GFXD3D11WindowTarget::resolveTo(GFXTextureObject *tex)
589594 D3D11_TEXTURE2D_DESC desc;
590595 ID3D11Texture2D* surf = ((GFXD3D11TextureObject*)(tex))->get2DTex ();
591596 surf->GetDesc (&desc);
592- D3D11DEVICECONTEXT->ResolveSubresource (surf, 0 , mBackBuffer , 0 , desc.Format );
597+ D3D11DEVICECONTEXT->ResolveSubresource (surf, 0 , mPrevBackBuffer , 0 , desc.Format );
593598}
594599
595600IDXGISwapChain* GFXD3D11WindowTarget::getSwapChain ()
@@ -604,6 +609,12 @@ ID3D11Texture2D* GFXD3D11WindowTarget::getBackBuffer()
604609 return mBackBuffer ;
605610}
606611
612+ ID3D11Texture2D* GFXD3D11WindowTarget::getPrevBackBuffer ()
613+ {
614+ mPrevBackBuffer ->AddRef ();
615+ return mPrevBackBuffer ;
616+ }
617+
607618ID3D11Texture2D* GFXD3D11WindowTarget::getDepthStencil ()
608619{
609620 mDepthStencil ->AddRef ();
0 commit comments