diff --git a/src/renderer_d3d11.cpp b/src/renderer_d3d11.cpp index 96801602..2ea05870 100644 --- a/src/renderer_d3d11.cpp +++ b/src/renderer_d3d11.cpp @@ -1340,7 +1340,7 @@ BX_PRAGMA_DIAGNOSTIC_POP(); } } } - + // updateMsaa(); postReset(); @@ -3948,11 +3948,11 @@ BX_PRAGMA_DIAGNOSTIC_POP(); uint16_t FrameBufferD3D11::destroy() { - preReset(); + preReset(true); DX_RELEASE(m_swapChain, 0); - m_num = 0; + m_num = 0; m_numTh = 0; uint16_t denseIdx = m_denseIdx; @@ -3961,15 +3961,19 @@ BX_PRAGMA_DIAGNOSTIC_POP(); return denseIdx; } - void FrameBufferD3D11::preReset() + void FrameBufferD3D11::preReset(bool _force) { - for (uint32_t ii = 0, num = m_num; ii < num; ++ii) + if (0 < m_numTh + || _force) { - DX_RELEASE(m_srv[ii], 0); - DX_RELEASE(m_rtv[ii], 0); - } + for (uint32_t ii = 0, num = m_num; ii < num; ++ii) + { + DX_RELEASE(m_srv[ii], 0); + DX_RELEASE(m_rtv[ii], 0); + } - DX_RELEASE(m_dsv, 0); + DX_RELEASE(m_dsv, 0); + } } void FrameBufferD3D11::postReset() diff --git a/src/renderer_d3d11.h b/src/renderer_d3d11.h index a3b2e4a2..65b67669 100644 --- a/src/renderer_d3d11.h +++ b/src/renderer_d3d11.h @@ -256,7 +256,7 @@ namespace bgfx { namespace d3d11 void create(uint8_t _num, const TextureHandle* _handles); void create(uint16_t _denseIdx, void* _nwh, uint32_t _width, uint32_t _height, TextureFormat::Enum _depthFormat); uint16_t destroy(); - void preReset(); + void preReset(bool _force = false); void postReset(); void resolve(); void clear(const Clear& _clear, const float _palette[][4]);