aboutsummaryrefslogtreecommitdiff
path: root/src/win/native/window_render_target.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/win/native/window_render_target.cpp')
-rw-r--r--src/win/native/window_render_target.cpp25
1 files changed, 7 insertions, 18 deletions
diff --git a/src/win/native/window_render_target.cpp b/src/win/native/window_render_target.cpp
index f15aeb6e..23ad2afa 100644
--- a/src/win/native/window_render_target.cpp
+++ b/src/win/native/window_render_target.cpp
@@ -15,6 +15,8 @@ WindowRenderTarget::WindowRenderTarget(DirectGraphFactory* factory, HWND hwnd)
const auto d3d11_device = factory->GetD3D11Device();
const auto dxgi_factory = factory->GetDxgiFactory();
+ d2d1_device_context_ = factory->CreateD2D1DeviceContext();
+
// Allocate a descriptor.
DXGI_SWAP_CHAIN_DESC1 swap_chain_desc;
swap_chain_desc.Width = 0; // use automatic sizing
@@ -41,27 +43,12 @@ WindowRenderTarget::WindowRenderTarget(DirectGraphFactory* factory, HWND hwnd)
}
void WindowRenderTarget::ResizeBuffer(const int width, const int height) {
- const auto factory = factory_;
- const auto d2d1_device_context = factory->GetD2D1DeviceContext();
-
- Microsoft::WRL::ComPtr<ID2D1Image> old_target;
- d2d1_device_context->GetTarget(&old_target);
- const auto target_this = old_target == this->target_bitmap_;
- if (target_this) d2d1_device_context->SetTarget(nullptr);
-
- old_target = nullptr;
+ // In order to resize buffer, we need to untarget the buffer first.
+ d2d1_device_context_->SetTarget(nullptr);
target_bitmap_ = nullptr;
-
ThrowIfFailed(dxgi_swap_chain_->ResizeBuffers(0, width, height,
DXGI_FORMAT_UNKNOWN, 0));
-
CreateTargetBitmap();
-
- if (target_this) d2d1_device_context->SetTarget(target_bitmap_.Get());
-}
-
-void WindowRenderTarget::SetAsTarget() {
- factory_->GetD2D1DeviceContext()->SetTarget(target_bitmap_.Get());
}
void WindowRenderTarget::Present() {
@@ -85,7 +72,9 @@ void WindowRenderTarget::CreateTargetBitmap() {
// Get a D2D surface from the DXGI back buffer to use as the D2D render
// target.
- ThrowIfFailed(factory_->GetD2D1DeviceContext()->CreateBitmapFromDxgiSurface(
+ ThrowIfFailed(d2d1_device_context_->CreateBitmapFromDxgiSurface(
dxgi_back_buffer.Get(), &bitmap_properties, &target_bitmap_));
+
+ d2d1_device_context_->SetTarget(target_bitmap_.Get());
}
} // namespace cru::platform::native::win