From e2b9dd9a053b6b2bc0bed02a6b67de637324d80c Mon Sep 17 00:00:00 2001 From: reuk Date: Mon, 12 Aug 2024 18:46:52 +0100 Subject: [PATCH] Direct2D: Remove redundant adapter member from Direct2DGraphicsContext --- .../juce_Direct2DGraphicsContext_windows.cpp | 32 +++++++++---------- .../juce_Direct2DHwndContext_windows.cpp | 17 ++-------- .../native/juce_Direct2DHwndContext_windows.h | 1 - .../juce_Direct2DImageContext_windows.cpp | 4 --- .../native/juce_DirectX_windows.h | 3 ++ 5 files changed, 21 insertions(+), 36 deletions(-) diff --git a/modules/juce_graphics/native/juce_Direct2DGraphicsContext_windows.cpp b/modules/juce_graphics/native/juce_Direct2DGraphicsContext_windows.cpp index 75799e8a57..3937626665 100644 --- a/modules/juce_graphics/native/juce_Direct2DGraphicsContext_windows.cpp +++ b/modules/juce_graphics/native/juce_Direct2DGraphicsContext_windows.cpp @@ -549,7 +549,6 @@ protected: SharedResourcePointer directWrite; RectangleList paintAreas; - DxgiAdapter::Ptr adapter; std::optional deviceResources; std::vector> savedClientStates; @@ -557,7 +556,7 @@ protected: virtual HRESULT prepare() { if (! deviceResources.has_value()) - deviceResources = Direct2DDeviceResources::create (adapter); + deviceResources = Direct2DDeviceResources::create (directX->adapters.getDefaultAdapter()); return deviceResources.has_value() ? S_OK : E_FAIL; } @@ -701,11 +700,6 @@ public: popSavedState(); } - DxgiAdapter& getAdapter() const noexcept - { - return *adapter; - } - ComSmartPtr getDeviceContext() const noexcept { return deviceResources->deviceContext; @@ -860,24 +854,28 @@ private: context->SetTransform (D2DUtilities::transformToMatrix (newTransform)); } + DxgiAdapter::Ptr findAdapter() const + { + if (! deviceResources.has_value()) + return {}; + + return deviceResources->findAdapter (directX->adapters); + } + void adapterCreated (DxgiAdapter::Ptr newAdapter) override { - if (! adapter || adapter->uniqueIDMatches (newAdapter)) - { - teardown(); + const auto adapter = findAdapter(); - adapter = newAdapter; - } + if (adapter == nullptr || ! adapter->uniqueIDMatches (newAdapter)) + teardown(); } void adapterRemoved (DxgiAdapter::Ptr expiringAdapter) override { - if (adapter && adapter->uniqueIDMatches (expiringAdapter)) - { - teardown(); + const auto adapter = findAdapter(); - adapter = nullptr; - } + if (adapter != nullptr && adapter->uniqueIDMatches (expiringAdapter)) + teardown(); } HWND hwnd = nullptr; diff --git a/modules/juce_graphics/native/juce_Direct2DHwndContext_windows.cpp b/modules/juce_graphics/native/juce_Direct2DHwndContext_windows.cpp index 8a5f434136..776f7a7d90 100644 --- a/modules/juce_graphics/native/juce_Direct2DHwndContext_windows.cpp +++ b/modules/juce_graphics/native/juce_Direct2DHwndContext_windows.cpp @@ -324,13 +324,10 @@ private: HRESULT prepare() override { - if (! adapter || ! adapter->direct2DDevice) - { - adapter = directX->adapters.getAdapterForHwnd (hwnd); + const auto adapter = directX->adapters.getAdapterForHwnd (hwnd); - if (! adapter) - return E_FAIL; - } + if (adapter == nullptr) + return E_FAIL; if (! deviceResources.has_value()) deviceResources = Direct2DDeviceResources::create (adapter); @@ -416,13 +413,10 @@ public: : Pimpl (ownerIn, opaqueIn), hwnd (hwndIn) { - adapter = directX->adapters.getAdapterForHwnd (hwndIn); } ~HwndPimpl() override = default; - HWND getHwnd() const { return hwnd; } - void handleShowWindow() { // One of the trickier problems was determining when Direct2D & DXGI resources can be safely created; @@ -687,11 +681,6 @@ Direct2DHwndContext::~Direct2DHwndContext() #endif } -void* Direct2DHwndContext::getHwnd() const noexcept -{ - return pimpl->getHwnd(); -} - Direct2DGraphicsContext::Pimpl* Direct2DHwndContext::getPimpl() const noexcept { return pimpl.get(); diff --git a/modules/juce_graphics/native/juce_Direct2DHwndContext_windows.h b/modules/juce_graphics/native/juce_Direct2DHwndContext_windows.h index 6b21d74a40..0e10c000fe 100644 --- a/modules/juce_graphics/native/juce_Direct2DHwndContext_windows.h +++ b/modules/juce_graphics/native/juce_Direct2DHwndContext_windows.h @@ -41,7 +41,6 @@ public: Direct2DHwndContext (void* windowHandle, bool opaque); ~Direct2DHwndContext() override; - void* getHwnd() const noexcept; void handleShowWindow(); void setWindowAlpha (float alpha); diff --git a/modules/juce_graphics/native/juce_Direct2DImageContext_windows.cpp b/modules/juce_graphics/native/juce_Direct2DImageContext_windows.cpp index 15898e7183..baa8a4fa05 100644 --- a/modules/juce_graphics/native/juce_Direct2DImageContext_windows.cpp +++ b/modules/juce_graphics/native/juce_Direct2DImageContext_windows.cpp @@ -44,10 +44,6 @@ public: : Pimpl (ownerIn, opaque), target (targetIn) { - if (target != nullptr) - adapter = target->getAdapter(); - else - jassertfalse; } Rectangle getFrameSize() override diff --git a/modules/juce_graphics/native/juce_DirectX_windows.h b/modules/juce_graphics/native/juce_DirectX_windows.h index 4a93b0861c..a4b72466dc 100644 --- a/modules/juce_graphics/native/juce_DirectX_windows.h +++ b/modules/juce_graphics/native/juce_DirectX_windows.h @@ -90,6 +90,9 @@ struct DxgiAdapter : public ReferenceCountedObject bool uniqueIDMatches (ReferenceCountedObjectPtr other) const { + if (other == nullptr) + return false; + auto luid = getAdapterUniqueID(); auto otherLuid = other->getAdapterUniqueID(); return (luid.HighPart == otherLuid.HighPart) && (luid.LowPart == otherLuid.LowPart);