fix window resize exception

This commit is contained in:
Nomango 2020-04-14 17:08:15 +08:00
parent 3b5a85542d
commit 1cef30e7f5
4 changed files with 22 additions and 4 deletions

View File

@ -193,11 +193,11 @@ WindowWin32Impl::WindowWin32Impl()
key_map_['A' + i] = KeyCode(size_t(KeyCode::A) + i); key_map_['A' + i] = KeyCode(size_t(KeyCode::A) + i);
// Num 0 - 9 // Num 0 - 9
for (size_t i = 0; i < 9; ++i) for (size_t i = 0; i < 10; ++i)
key_map_['0' + i] = KeyCode(size_t(KeyCode::Num0) + i); key_map_['0' + i] = KeyCode(size_t(KeyCode::Num0) + i);
// Numpad 0 - 9 // Numpad 0 - 9
for (size_t i = 0; i < 9; ++i) for (size_t i = 0; i < 10; ++i)
key_map_[VK_NUMPAD0 + i] = KeyCode(size_t(KeyCode::Numpad0) + i); key_map_[VK_NUMPAD0 + i] = KeyCode(size_t(KeyCode::Numpad0) + i);
// F1 - F12 // F1 - F12

View File

@ -69,6 +69,8 @@ public:
void DiscardResources() override; void DiscardResources() override;
void SetTargetBitmap(_In_ ComPtr<ID2D1Bitmap1> target) override;
public: public:
unsigned long STDMETHODCALLTYPE AddRef(); unsigned long STDMETHODCALLTYPE AddRef();
@ -276,8 +278,7 @@ HRESULT D2DDeviceResources::CreateWindowSizeDependentResources()
if (SUCCEEDED(hr)) if (SUCCEEDED(hr))
{ {
target_bitmap_ = target; SetTargetBitmap(target);
device_context_->SetTarget(target_bitmap_.Get());
} }
} }
return hr; return hr;
@ -311,6 +312,15 @@ HRESULT D2DDeviceResources::HandleDeviceLost(_In_ ComPtr<IDXGIDevice> dxgi_devic
return hr; return hr;
} }
void D2DDeviceResources::SetTargetBitmap(ComPtr<ID2D1Bitmap1> target)
{
target_bitmap_ = target;
if (device_context_)
{
device_context_->SetTarget(target_bitmap_.Get());
}
}
HRESULT D2DDeviceResources::CreateBitmapConverter(_Out_ ComPtr<IWICFormatConverter>& converter, HRESULT D2DDeviceResources::CreateBitmapConverter(_Out_ ComPtr<IWICFormatConverter>& converter,
_In_opt_ ComPtr<IWICBitmapSource> source, _In_opt_ ComPtr<IWICBitmapSource> source,
_In_ REFWICPixelFormatGUID format, WICBitmapDitherType dither, _In_ REFWICPixelFormatGUID format, WICBitmapDitherType dither,

View File

@ -63,6 +63,8 @@ public:
virtual void DiscardResources() = 0; virtual void DiscardResources() = 0;
virtual void SetTargetBitmap(_In_ ComPtr<ID2D1Bitmap1> target) = 0;
inline ID2D1Factory1* GetFactory() inline ID2D1Factory1* GetFactory()
{ {
KGE_ASSERT(factory_); KGE_ASSERT(factory_);

View File

@ -954,6 +954,12 @@ void RendererImpl::Resize(uint32_t width, uint32_t height)
if (!d3d_res_) if (!d3d_res_)
hr = E_UNEXPECTED; hr = E_UNEXPECTED;
if (SUCCEEDED(hr))
{
// Clear resources
d2d_res_->SetTargetBitmap(nullptr);
}
if (SUCCEEDED(hr)) if (SUCCEEDED(hr))
{ {
output_size_.x = static_cast<float>(width); output_size_.x = static_cast<float>(width);