فهرست منبع

D3D11: Fixed buffer update. Issue #271.

Branimir Karadžić 11 سال پیش
والد
کامیت
ac34be556a
1فایلهای تغییر یافته به همراه34 افزوده شده و 1 حذف شده
  1. 34 1
      src/renderer_d3d11.cpp

+ 34 - 1
src/renderer_d3d11.cpp

@@ -2372,12 +2372,45 @@ namespace bgfx
 		ID3D11DeviceContext* deviceCtx = s_renderD3D11->m_deviceCtx;
 		ID3D11DeviceContext* deviceCtx = s_renderD3D11->m_deviceCtx;
 		BX_CHECK(m_dynamic, "Must be dynamic!");
 		BX_CHECK(m_dynamic, "Must be dynamic!");
 
 
+#if 1
+		BX_UNUSED(_discard);
+		ID3D11Device* device = s_renderD3D11->m_device;
+
+		D3D11_BUFFER_DESC desc;
+		desc.ByteWidth = _size;
+		desc.Usage     = D3D11_USAGE_STAGING;
+		desc.BindFlags = 0;
+		desc.MiscFlags = 0;
+		desc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
+		desc.StructureByteStride = 0;
+
+		D3D11_SUBRESOURCE_DATA srd;
+		srd.pSysMem     = _data;
+		srd.SysMemPitch = 0;
+		srd.SysMemSlicePitch = 0;
+
+		ID3D11Buffer* ptr;
+		DX_CHECK(device->CreateBuffer(&desc, &srd, &ptr) );
+
+		deviceCtx->CopySubresourceRegion(m_ptr
+			, 0
+			, _offset
+			, 0
+			, 0
+			, ptr
+			, 0
+			, NULL
+			);
+
+		DX_RELEASE(ptr, 0);
+#else
 		D3D11_MAPPED_SUBRESOURCE mapped;
 		D3D11_MAPPED_SUBRESOURCE mapped;
 		BX_UNUSED(_discard);
 		BX_UNUSED(_discard);
 		D3D11_MAP type = D3D11_MAP_WRITE_DISCARD;
 		D3D11_MAP type = D3D11_MAP_WRITE_DISCARD;
 		DX_CHECK(deviceCtx->Map(m_ptr, 0, type, 0, &mapped));
 		DX_CHECK(deviceCtx->Map(m_ptr, 0, type, 0, &mapped));
-		memcpy((uint8_t*)mapped.pData + _offset, _data, _size);
+		memcpy( (uint8_t*)mapped.pData + _offset, _data, _size);
 		deviceCtx->Unmap(m_ptr, 0);
 		deviceCtx->Unmap(m_ptr, 0);
+#endif // 0
 	}
 	}
 
 
 	void VertexBufferD3D11::create(uint32_t _size, void* _data, VertexDeclHandle _declHandle, uint8_t _flags)
 	void VertexBufferD3D11::create(uint32_t _size, void* _data, VertexDeclHandle _declHandle, uint8_t _flags)