fix memory leaks
This commit is contained in:
parent
a25597223d
commit
04475c3c37
|
|
@ -269,21 +269,6 @@ void WindowWin32Impl::Init(const String& title, uint32_t width, uint32_t height,
|
|||
|
||||
::ShowWindow(handle_, SW_SHOWNORMAL);
|
||||
::UpdateWindow(handle_);
|
||||
|
||||
// Initialize Direct3D resources
|
||||
auto d3d_res = graphics::directx::GetD3DDeviceResources();
|
||||
|
||||
HRESULT hr = d3d_res->Initialize(handle_);
|
||||
|
||||
// Initialize Direct2D resources
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
auto d2d_res = graphics::directx::GetD2DDeviceResources();
|
||||
|
||||
hr = d2d_res->Initialize(d3d_res->GetDXGIDevice(), d3d_res->GetDXGISwapChain());
|
||||
}
|
||||
|
||||
KGE_THROW_IF_FAILED(hr, "Create DirectX resources failed");
|
||||
}
|
||||
|
||||
void WindowWin32Impl::PumpEvents()
|
||||
|
|
|
|||
|
|
@ -58,11 +58,41 @@ void RendererImpl::MakeContextForWindow(WindowPtr window)
|
|||
HWND target_window = window->GetHandle();
|
||||
output_size_ = window->GetSize();
|
||||
|
||||
d2d_res_ = graphics::directx::GetD2DDeviceResources();
|
||||
d3d_res_ = graphics::directx::GetD3DDeviceResources();
|
||||
|
||||
HRESULT hr = target_window ? S_OK : E_FAIL;
|
||||
|
||||
// Initialize Direct3D resources
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
auto d3d_res = graphics::directx::GetD3DDeviceResources();
|
||||
|
||||
hr = d3d_res->Initialize(target_window);
|
||||
if (FAILED(hr))
|
||||
{
|
||||
d3d_res->DiscardResources();
|
||||
}
|
||||
else
|
||||
{
|
||||
d3d_res_ = d3d_res;
|
||||
}
|
||||
}
|
||||
|
||||
// Initialize Direct2D resources
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
auto d2d_res = graphics::directx::GetD2DDeviceResources();
|
||||
|
||||
hr = d2d_res->Initialize(d3d_res_->GetDXGIDevice(), d3d_res_->GetDXGISwapChain());
|
||||
if (FAILED(hr))
|
||||
{
|
||||
d2d_res->DiscardResources();
|
||||
}
|
||||
else
|
||||
{
|
||||
d2d_res_ = d2d_res;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Initialize other device resources
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
|
|
@ -114,6 +144,8 @@ void RendererImpl::Destroy()
|
|||
{
|
||||
KGE_SYS_LOG("Destroying device resources");
|
||||
|
||||
if (d2d_res_)
|
||||
{
|
||||
d2d_res_->GetDWriteFactory()->UnregisterFontFileLoader(res_font_file_loader_.Get());
|
||||
res_font_file_loader_.Reset();
|
||||
|
||||
|
|
@ -121,8 +153,14 @@ void RendererImpl::Destroy()
|
|||
res_font_collection_loader_.Reset();
|
||||
|
||||
render_ctx_.Reset();
|
||||
d2d_res_.Reset();
|
||||
d2d_res_->DiscardResources();
|
||||
}
|
||||
|
||||
if (d3d_res_)
|
||||
{
|
||||
d3d_res_->DiscardResources();
|
||||
d3d_res_.Reset();
|
||||
}
|
||||
|
||||
::CoUninitialize();
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue