diff options
author | crupest <crupest@outlook.com> | 2022-02-02 21:25:59 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2022-02-02 21:25:59 +0800 |
commit | 35b72a2f3215cf9644508581f0af8bde2ed753a8 (patch) | |
tree | 0ce8073e4c8e86ef108b14983d12166dd708bf3b /include/cru/win | |
parent | 41623c6ad6f42ca5d6e9a38061f809929641e5c6 (diff) | |
download | cru-35b72a2f3215cf9644508581f0af8bde2ed753a8.tar.gz cru-35b72a2f3215cf9644508581f0af8bde2ed753a8.tar.bz2 cru-35b72a2f3215cf9644508581f0af8bde2ed753a8.zip |
...
Diffstat (limited to 'include/cru/win')
-rw-r--r-- | include/cru/win/graphics/direct/Base.hpp | 6 | ||||
-rw-r--r-- | include/cru/win/graphics/direct/Factory.hpp | 14 | ||||
-rw-r--r-- | include/cru/win/graphics/direct/Image.hpp | 16 | ||||
-rw-r--r-- | include/cru/win/graphics/direct/Painter.hpp | 18 | ||||
-rw-r--r-- | include/cru/win/graphics/direct/WindowPainter.hpp | 2 | ||||
-rw-r--r-- | include/cru/win/graphics/direct/WindowRenderTarget.hpp | 4 |
6 files changed, 36 insertions, 24 deletions
diff --git a/include/cru/win/graphics/direct/Base.hpp b/include/cru/win/graphics/direct/Base.hpp index b25a1c14..49fc7897 100644 --- a/include/cru/win/graphics/direct/Base.hpp +++ b/include/cru/win/graphics/direct/Base.hpp @@ -1,6 +1,12 @@ #pragma once #include "../../WinPreConfig.hpp" +#include <d2d1_2.h> +#include <d3d11.h> +#include <dwrite.h> +#include <dxgi1_2.h> +#include <wrl/client.h> + #ifdef CRU_PLATFORM_WINDOWS #ifdef CRU_WIN_GRAPHICS_DIRECT_EXPORT_API #define CRU_WIN_GRAPHICS_DIRECT_API __declspec(dllexport) diff --git a/include/cru/win/graphics/direct/Factory.hpp b/include/cru/win/graphics/direct/Factory.hpp index ffa8c764..ba504f0d 100644 --- a/include/cru/win/graphics/direct/Factory.hpp +++ b/include/cru/win/graphics/direct/Factory.hpp @@ -20,8 +20,8 @@ class CRU_WIN_GRAPHICS_DIRECT_API DirectGraphicsFactory public: ID3D11Device* GetD3D11Device() const { return d3d11_device_.Get(); } - ID2D1Factory1* GetD2D1Factory() const { return d2d1_factory_.Get(); } - ID2D1Device* GetD2D1Device() const { return d2d1_device_.Get(); } + ID2D1Factory2* GetD2D1Factory() const { return d2d1_factory_.Get(); } + ID2D1Device1* GetD2D1Device() const { return d2d1_device_.Get(); } IDXGIFactory2* GetDxgiFactory() const { return dxgi_factory_.Get(); } IDWriteFactory* GetDWriteFactory() const { return dwrite_factory_.Get(); } IDWriteFontCollection* GetSystemFontCollection() const { @@ -29,7 +29,7 @@ class CRU_WIN_GRAPHICS_DIRECT_API DirectGraphicsFactory } public: - Microsoft::WRL::ComPtr<ID2D1DeviceContext> CreateD2D1DeviceContext(); + Microsoft::WRL::ComPtr<ID2D1DeviceContext1> CreateD2D1DeviceContext(); // This context should only be used to create graphic resources like brush. // Because graphic resources can be shared if they are created in the same @@ -53,11 +53,9 @@ class CRU_WIN_GRAPHICS_DIRECT_API DirectGraphicsFactory private: Microsoft::WRL::ComPtr<ID3D11Device> d3d11_device_; - // ID2D1Factory1 is a interface only available in Windows 8 and Windows 7 with - // update. It is d2d v1.1. - Microsoft::WRL::ComPtr<ID2D1Factory1> d2d1_factory_; - Microsoft::WRL::ComPtr<ID2D1Device> d2d1_device_; - Microsoft::WRL::ComPtr<ID2D1DeviceContext> d2d1_device_context_; + Microsoft::WRL::ComPtr<ID2D1Factory2> d2d1_factory_; + Microsoft::WRL::ComPtr<ID2D1Device1> d2d1_device_; + Microsoft::WRL::ComPtr<ID2D1DeviceContext1> d2d1_device_context_; Microsoft::WRL::ComPtr<IDXGIFactory2> dxgi_factory_; Microsoft::WRL::ComPtr<IDWriteFactory> dwrite_factory_; Microsoft::WRL::ComPtr<IDWriteFontCollection> dwrite_system_font_collection_; diff --git a/include/cru/win/graphics/direct/Image.hpp b/include/cru/win/graphics/direct/Image.hpp index 33d848bd..06448621 100644 --- a/include/cru/win/graphics/direct/Image.hpp +++ b/include/cru/win/graphics/direct/Image.hpp @@ -6,8 +6,8 @@ namespace cru::platform::graphics::win::direct { class CRU_WIN_GRAPHICS_DIRECT_API Direct2DImage : public DirectGraphicsResource, public virtual IImage { public: - explicit Direct2DImage(DirectGraphicsFactory* graphics_factory, - ID2D1Image* d2d_image, bool auto_release); + Direct2DImage(DirectGraphicsFactory* graphics_factory, + Microsoft::WRL::ComPtr<ID2D1Bitmap1> d2d_bitmap); CRU_DELETE_COPY(Direct2DImage) CRU_DELETE_MOVE(Direct2DImage) @@ -15,11 +15,17 @@ class CRU_WIN_GRAPHICS_DIRECT_API Direct2DImage : public DirectGraphicsResource, ~Direct2DImage() override; public: - ID2D1Image* GetD2DImage() const { return d2d_image_; } + float GetWidth() override; + float GetHeight() override; + + std::unique_ptr<IImage> CreateWithRect(const Rect& rect) override; + + const Microsoft::WRL::ComPtr<ID2D1Bitmap1>& GetD2DBitmap() const { + return d2d_bitmap_; + } private: - ID2D1Image* d2d_image_; - bool auto_release_; + Microsoft::WRL::ComPtr<ID2D1Bitmap1> d2d_bitmap_; }; } // namespace cru::platform::graphics::win::direct diff --git a/include/cru/win/graphics/direct/Painter.hpp b/include/cru/win/graphics/direct/Painter.hpp index 11fb5619..57a59357 100644 --- a/include/cru/win/graphics/direct/Painter.hpp +++ b/include/cru/win/graphics/direct/Painter.hpp @@ -7,20 +7,22 @@ #include <vector> namespace cru::platform::graphics::win::direct { -class CRU_WIN_GRAPHICS_DIRECT_API D2DPainter +class CRU_WIN_GRAPHICS_DIRECT_API D2DDeviceContextPainter : public DirectResource, public virtual IPainter, - public virtual IComResource<ID2D1RenderTarget> { + public virtual IComResource<ID2D1DeviceContext1> { public: - explicit D2DPainter(ID2D1RenderTarget* render_target); + explicit D2DDeviceContextPainter(ID2D1DeviceContext1* device_context); - CRU_DELETE_COPY(D2DPainter) - CRU_DELETE_MOVE(D2DPainter) + CRU_DELETE_COPY(D2DDeviceContextPainter) + CRU_DELETE_MOVE(D2DDeviceContextPainter) - ~D2DPainter() override = default; + ~D2DDeviceContextPainter() override = default; public: - ID2D1RenderTarget* GetComInterface() const override { return render_target_; } + ID2D1DeviceContext1* GetComInterface() const override { + return device_context_; + } public: Matrix GetTransform() override; @@ -62,7 +64,7 @@ class CRU_WIN_GRAPHICS_DIRECT_API D2DPainter void CheckValidation(); private: - ID2D1RenderTarget* render_target_; + ID2D1DeviceContext1* device_context_; std::vector<Microsoft::WRL::ComPtr<ID2D1Layer>> layers_; std::vector<Microsoft::WRL::ComPtr<ID2D1DrawingStateBlock>> diff --git a/include/cru/win/graphics/direct/WindowPainter.hpp b/include/cru/win/graphics/direct/WindowPainter.hpp index a39bc2b7..3d66bc2e 100644 --- a/include/cru/win/graphics/direct/WindowPainter.hpp +++ b/include/cru/win/graphics/direct/WindowPainter.hpp @@ -4,7 +4,7 @@ namespace cru::platform::graphics::win::direct { class CRU_WIN_GRAPHICS_DIRECT_API D2DWindowPainter - : public graphics::win::direct::D2DPainter { + : public graphics::win::direct::D2DDeviceContextPainter { public: explicit D2DWindowPainter(D2DWindowRenderTarget* window); diff --git a/include/cru/win/graphics/direct/WindowRenderTarget.hpp b/include/cru/win/graphics/direct/WindowRenderTarget.hpp index 4774a1d3..6b775241 100644 --- a/include/cru/win/graphics/direct/WindowRenderTarget.hpp +++ b/include/cru/win/graphics/direct/WindowRenderTarget.hpp @@ -18,7 +18,7 @@ class CRU_WIN_GRAPHICS_DIRECT_API D2DWindowRenderTarget : public Object { return factory_; } - ID2D1DeviceContext* GetD2D1DeviceContext() { + ID2D1DeviceContext1* GetD2D1DeviceContext() { return d2d1_device_context_.Get(); } @@ -36,7 +36,7 @@ class CRU_WIN_GRAPHICS_DIRECT_API D2DWindowRenderTarget : public Object { private: DirectGraphicsFactory* factory_; HWND hwnd_; - Microsoft::WRL::ComPtr<ID2D1DeviceContext> d2d1_device_context_; + Microsoft::WRL::ComPtr<ID2D1DeviceContext1> d2d1_device_context_; Microsoft::WRL::ComPtr<IDXGISwapChain1> dxgi_swap_chain_; Microsoft::WRL::ComPtr<ID2D1Bitmap1> target_bitmap_; }; |