diff options
| author | Egor Yusov <egor.yusov@gmail.com> | 2019-08-13 05:00:42 +0000 |
|---|---|---|
| committer | Egor Yusov <egor.yusov@gmail.com> | 2019-08-13 05:00:42 +0000 |
| commit | 97b32f52cc123544a1352527c2509c804fd3d190 (patch) | |
| tree | 6fe5dc267b8a9087df2afe9bca871f9607438391 /Graphics/GraphicsEngineD3D11 | |
| parent | D3D11 backend: enabled multiple swap chain support (diff) | |
| download | DiligentCore-97b32f52cc123544a1352527c2509c804fd3d190.tar.gz DiligentCore-97b32f52cc123544a1352527c2509c804fd3d190.zip | |
D3D12 backend: enabled multiple swap chain support
Diffstat (limited to 'Graphics/GraphicsEngineD3D11')
| -rw-r--r-- | Graphics/GraphicsEngineD3D11/src/EngineFactoryD3D11.cpp | 2 | ||||
| -rw-r--r-- | Graphics/GraphicsEngineD3D11/src/SwapChainD3D11Impl.cpp | 52 |
2 files changed, 8 insertions, 46 deletions
diff --git a/Graphics/GraphicsEngineD3D11/src/EngineFactoryD3D11.cpp b/Graphics/GraphicsEngineD3D11/src/EngineFactoryD3D11.cpp index 40a3eb16..87ffbdc5 100644 --- a/Graphics/GraphicsEngineD3D11/src/EngineFactoryD3D11.cpp +++ b/Graphics/GraphicsEngineD3D11/src/EngineFactoryD3D11.cpp @@ -315,7 +315,7 @@ void EngineFactoryD3D11Impl::CreateSwapChainD3D11(IRenderDevice* pDev if (pDeviceContextD3D11->GetSwapChain() != nullptr && SCDesc.IsPrimary) { LOG_ERROR_AND_THROW("Another swap chain labeled as primary has already been created. " - "There must be only one primary swap chain."); + "There must only be one primary swap chain."); } auto* pSwapChainD3D11 = NEW_RC_OBJ(RawMemAllocator, "SwapChainD3D11Impl instance", SwapChainD3D11Impl) diff --git a/Graphics/GraphicsEngineD3D11/src/SwapChainD3D11Impl.cpp b/Graphics/GraphicsEngineD3D11/src/SwapChainD3D11Impl.cpp index 225e3a98..0ffc8070 100644 --- a/Graphics/GraphicsEngineD3D11/src/SwapChainD3D11Impl.cpp +++ b/Graphics/GraphicsEngineD3D11/src/SwapChainD3D11Impl.cpp @@ -21,7 +21,6 @@ * of the possibility of such damages. */ -#include <array> #include "pch.h" #include "SwapChainD3D11Impl.h" #include "RenderDeviceD3D11Impl.h" @@ -144,38 +143,9 @@ void SwapChainD3D11Impl::UpdateSwapChain(bool CreateNew) VERIFY(pDeviceContext, "Immediate context has been released"); if (pDeviceContext) { - auto *pImmediateCtxD3D11 = pDeviceContext.RawPtr<DeviceContextD3D11Impl>(); - bool RebindRenderTargets = false; - bool UnbindRenderTargets = false; - if (m_SwapChainDesc.IsPrimary) - { - RebindRenderTargets = UnbindRenderTargets = pImmediateCtxD3D11->IsDefaultFBBound(); - } - else - { - std::array<ITextureView*, MaxRenderTargets> pOrigRTVs = {}; - RefCntAutoPtr<ITextureView> pOrigDSV; - Uint32 NumRenderTargets = 0; - pImmediateCtxD3D11->GetRenderTargets(NumRenderTargets, pOrigRTVs.data(), &pOrigDSV); - for (Uint32 i=0; i < NumRenderTargets; ++i) - { - if (pOrigRTVs[i] == m_pRenderTargetView) - UnbindRenderTargets = true; - } - if (pOrigDSV == m_pDepthStencilView) - UnbindRenderTargets = true; - - RebindRenderTargets = NumRenderTargets == 1 && pOrigRTVs[0] == m_pRenderTargetView && pOrigDSV == m_pDepthStencilView; - - for(auto pRTV : pOrigRTVs) - { - if (pRTV != nullptr) - pRTV->Release(); - } - } - - if (UnbindRenderTargets) - pImmediateCtxD3D11->ResetRenderTargets(); + auto* pImmediateCtxD3D11 = pDeviceContext.RawPtr<DeviceContextD3D11Impl>(); + ITextureView* pBackBufferRTVs[] = {m_pRenderTargetView}; + bool RebindRenderTargets = UnbindRenderTargets(pImmediateCtxD3D11, pBackBufferRTVs, 1, m_pDepthStencilView); // Swap chain cannot be resized until all references are released m_pRenderTargetView.Release(); @@ -214,19 +184,11 @@ void SwapChainD3D11Impl::UpdateSwapChain(bool CreateNew) CreateRTVandDSV(); - if (RebindRenderTargets) + if (m_SwapChainDesc.IsPrimary && RebindRenderTargets) { - if (m_SwapChainDesc.IsPrimary) - { - // Set default render target and viewport - pImmediateCtxD3D11->SetRenderTargets(0, nullptr, nullptr, RESOURCE_STATE_TRANSITION_MODE_TRANSITION); - pImmediateCtxD3D11->SetViewports(1, nullptr, 0, 0); - } - else - { - ITextureView* pRTVs[] = {GetCurrentBackBufferRTV()}; - pImmediateCtxD3D11->SetRenderTargets(1, pRTVs, GetDepthBufferDSV(), RESOURCE_STATE_TRANSITION_MODE_TRANSITION); - } + // Set default render target and viewport + pImmediateCtxD3D11->SetRenderTargets(0, nullptr, nullptr, RESOURCE_STATE_TRANSITION_MODE_TRANSITION); + pImmediateCtxD3D11->SetViewports(1, nullptr, 0, 0); } } catch (const std::runtime_error &) |
