diff options
author | crupest <crupest@outlook.com> | 2022-05-15 13:56:40 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2022-05-15 13:56:40 +0800 |
commit | 9e0c9d3499bc50c3534b4dc500d8b5d0b5f22752 (patch) | |
tree | 7342f6991771fa31b16fd6a5ed892ff6025f3d05 /src/win/graphics/direct/Factory.cpp | |
parent | 41de54bad2c0f857821fcc83f41af3334d068b6d (diff) | |
download | cru-9e0c9d3499bc50c3534b4dc500d8b5d0b5f22752.tar.gz cru-9e0c9d3499bc50c3534b4dc500d8b5d0b5f22752.tar.bz2 cru-9e0c9d3499bc50c3534b4dc500d8b5d0b5f22752.zip |
...
Diffstat (limited to 'src/win/graphics/direct/Factory.cpp')
-rw-r--r-- | src/win/graphics/direct/Factory.cpp | 99 |
1 files changed, 0 insertions, 99 deletions
diff --git a/src/win/graphics/direct/Factory.cpp b/src/win/graphics/direct/Factory.cpp deleted file mode 100644 index e8b3f107..00000000 --- a/src/win/graphics/direct/Factory.cpp +++ /dev/null @@ -1,99 +0,0 @@ -#include "cru/win/graphics/direct/Factory.h" - -#include "cru/common/log/Logger.h" -#include "cru/win/graphics/direct/Brush.h" -#include "cru/win/graphics/direct/Exception.h" -#include "cru/win/graphics/direct/Font.h" -#include "cru/win/graphics/direct/Geometry.h" -#include "cru/win/graphics/direct/ImageFactory.h" -#include "cru/win/graphics/direct/TextLayout.h" - -#include <cstdlib> -#include <utility> - -namespace cru::platform::graphics::win::direct { - -DirectGraphicsFactory::DirectGraphicsFactory() { - // TODO: Detect repeated creation. Because I don't think we can create two d2d - // and dwrite factory so we need to prevent the "probably dangerous" behavior. - - UINT creation_flags = D3D11_CREATE_DEVICE_BGRA_SUPPORT; - -#ifdef CRU_DEBUG - creation_flags |= D3D11_CREATE_DEVICE_DEBUG; -#endif - - const D3D_FEATURE_LEVEL feature_levels[] = { - D3D_FEATURE_LEVEL_11_1, D3D_FEATURE_LEVEL_11_0, D3D_FEATURE_LEVEL_10_1, - D3D_FEATURE_LEVEL_10_0, D3D_FEATURE_LEVEL_9_3, D3D_FEATURE_LEVEL_9_2, - D3D_FEATURE_LEVEL_9_1}; - - Microsoft::WRL::ComPtr<ID3D11DeviceContext> d3d11_device_context; - - ThrowIfFailed(D3D11CreateDevice( - nullptr, D3D_DRIVER_TYPE_HARDWARE, nullptr, creation_flags, - feature_levels, ARRAYSIZE(feature_levels), D3D11_SDK_VERSION, - &d3d11_device_, nullptr, &d3d11_device_context)); - - Microsoft::WRL::ComPtr<IDXGIDevice> dxgi_device; - ThrowIfFailed(d3d11_device_->QueryInterface(dxgi_device.GetAddressOf())); - - ThrowIfFailed(D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, - IID_PPV_ARGS(&d2d1_factory_))); - - ThrowIfFailed(d2d1_factory_->CreateDevice(dxgi_device.Get(), &d2d1_device_)); - - d2d1_device_context_ = CreateD2D1DeviceContext(); - - // Identify the physical adapter (GPU or card) this device is runs on. - Microsoft::WRL::ComPtr<IDXGIAdapter> dxgi_adapter; - ThrowIfFailed(dxgi_device->GetAdapter(&dxgi_adapter)); - - // Get the factory object that created the DXGI device. - ThrowIfFailed(dxgi_adapter->GetParent(IID_PPV_ARGS(&dxgi_factory_))); - - ThrowIfFailed(DWriteCreateFactory( - DWRITE_FACTORY_TYPE_SHARED, __uuidof(IDWriteFactory), - reinterpret_cast<IUnknown**>(dwrite_factory_.GetAddressOf()))); - - ThrowIfFailed(dwrite_factory_->GetSystemFontCollection( - &dwrite_system_font_collection_)); - - image_factory_ = std::make_unique<WinImageFactory>(this); -} - -DirectGraphicsFactory::~DirectGraphicsFactory() {} - -Microsoft::WRL::ComPtr<ID2D1DeviceContext1> -DirectGraphicsFactory::CreateD2D1DeviceContext() { - Microsoft::WRL::ComPtr<ID2D1DeviceContext1> d2d1_device_context; - ThrowIfFailed(d2d1_device_->CreateDeviceContext( - D2D1_DEVICE_CONTEXT_OPTIONS_NONE, &d2d1_device_context)); - return d2d1_device_context; -} - -std::unique_ptr<ISolidColorBrush> -DirectGraphicsFactory::CreateSolidColorBrush() { - return std::make_unique<D2DSolidColorBrush>(this); -} - -std::unique_ptr<IGeometryBuilder> -DirectGraphicsFactory::CreateGeometryBuilder() { - return std::make_unique<D2DGeometryBuilder>(this); -} - -std::unique_ptr<IFont> DirectGraphicsFactory::CreateFont(String font_family, - float font_size) { - return std::make_unique<DWriteFont>(this, std::move(font_family), font_size); -} - -std::unique_ptr<ITextLayout> DirectGraphicsFactory::CreateTextLayout( - std::shared_ptr<IFont> font, String text) { - return std::make_unique<DWriteTextLayout>(this, std::move(font), - std::move(text)); -} - -IImageFactory* DirectGraphicsFactory::GetImageFactory() { - return image_factory_.get(); -} -} // namespace cru::platform::graphics::win::direct |