Jelajahi Sumber

D3D9: Fixed assert when frame buffer texture is resized.

Branimir Karadžić 9 tahun lalu
induk
melakukan
f2e46a5c65
2 mengubah file dengan 13 tambahan dan 3 penghapusan
  1. 1 1
      src/renderer_d3d9.cpp
  2. 12 2
      src/renderer_d3d9.h

+ 1 - 1
src/renderer_d3d9.cpp

@@ -1041,7 +1041,7 @@ namespace bgfx { namespace d3d9
 			tc.m_mem     = NULL;
 			bx::write(&writer, tc);
 
-			texture.destroy();
+			texture.destroy(true);
 			texture.create(mem, texture.m_flags, 0);
 
 			release(mem);

+ 12 - 2
src/renderer_d3d9.h

@@ -323,11 +323,21 @@ namespace bgfx { namespace d3d9
 
 		void create(const Memory* _mem, uint32_t _flags, uint8_t _skip);
 
-		void destroy()
+		void destroy(bool _resize = false)
 		{
 			if (0 == (m_flags & BGFX_TEXTURE_INTERNAL_SHARED) )
 			{
-				DX_RELEASE(m_ptr, 0);
+				if (_resize)
+				{
+					// BK - at the time of resize there might be one reference held by frame buffer
+					//      surface. This frame buffer will be recreated later, and release reference
+					//      to existing surface. That's why here we don't care about ref count.
+					m_ptr->Release();
+				}
+				else
+				{
+					DX_RELEASE(m_ptr, 0);
+				}
 			}
 			DX_RELEASE(m_surface, 0);
 			DX_RELEASE(m_staging, 0);