Explorar o código

D3D11: Fixed swap chain resize.

Branimir Karadžić %!s(int64=10) %!d(string=hai) anos
pai
achega
c5adaec06c
Modificáronse 2 ficheiros con 14 adicións e 10 borrados
  1. 13 9
      src/renderer_d3d11.cpp
  2. 1 1
      src/renderer_d3d11.h

+ 13 - 9
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()

+ 1 - 1
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]);