diff options
Diffstat (limited to 'include/cru/win/native/WindowRenderTarget.hpp')
-rw-r--r-- | include/cru/win/native/WindowRenderTarget.hpp | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/include/cru/win/native/WindowRenderTarget.hpp b/include/cru/win/native/WindowRenderTarget.hpp new file mode 100644 index 00000000..83ac1e03 --- /dev/null +++ b/include/cru/win/native/WindowRenderTarget.hpp @@ -0,0 +1,47 @@ +#pragma once +#include "Base.hpp" + +namespace cru::platform::graph::win::direct { +class DirectGraphFactory; +} + +namespace cru::platform::native::win { +// Represents a window render target. +class WindowRenderTarget : public Object { + public: + WindowRenderTarget(graph::win::direct::DirectGraphFactory* factory, + HWND hwnd); + + CRU_DELETE_COPY(WindowRenderTarget) + CRU_DELETE_MOVE(WindowRenderTarget) + + ~WindowRenderTarget() override = default; + + public: + graph::win::direct::DirectGraphFactory* GetDirectFactory() const { + return factory_; + } + + ID2D1DeviceContext* GetD2D1DeviceContext() { + return d2d1_device_context_.Get(); + } + + // Resize the underlying buffer. + void ResizeBuffer(int width, int height); + + // Set this render target as the d2d device context's target. + void SetAsTarget(); + + // Present the data of the underlying buffer to the window. + void Present(); + + private: + void CreateTargetBitmap(); + + private: + graph::win::direct::DirectGraphFactory* factory_; + Microsoft::WRL::ComPtr<ID2D1DeviceContext> d2d1_device_context_; + Microsoft::WRL::ComPtr<IDXGISwapChain1> dxgi_swap_chain_; + Microsoft::WRL::ComPtr<ID2D1Bitmap1> target_bitmap_; +}; +} // namespace cru::platform::native::win |