Skip to content

Commit 3b43b7c

Browse files
committed
Direct2D: Reduce DirectX resource thrashing in Direct2D Swapchain
1 parent 878ac1a commit 3b43b7c

File tree

1 file changed

+17
-2
lines changed

1 file changed

+17
-2
lines changed

modules/juce_graphics/native/juce_Direct2DResources_windows.cpp

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -371,7 +371,6 @@ class SwapChain
371371
if (chain != nullptr || hwnd == nullptr)
372372
return S_OK;
373373

374-
SharedResourcePointer<DirectX> directX;
375374
auto dxgiFactory = directX->adapters.getFactory();
376375

377376
if (dxgiFactory == nullptr || adapter->direct3DDevice == nullptr)
@@ -448,7 +447,6 @@ class SwapChain
448447
chain->GetDevice (__uuidof (device), (void**) device.resetAndGetPointerAddress());
449448
JUCE_END_IGNORE_WARNINGS_GCC_LIKE
450449

451-
SharedResourcePointer<DirectX> directX;
452450
createBuffer (Direct2DDeviceResources::findAdapter (directX->adapters, device));
453451

454452
return buffer != nullptr ? S_OK : E_FAIL;
@@ -527,6 +525,23 @@ class SwapChain
527525
deviceContext->CreateBitmapFromDxgiSurface (surface, bitmapProperties, buffer.resetAndGetPointerAddress());
528526
}
529527

528+
class AssignableDirectX
529+
{
530+
public:
531+
AssignableDirectX() = default;
532+
AssignableDirectX (const AssignableDirectX&) {}
533+
AssignableDirectX (AssignableDirectX&&) noexcept {}
534+
AssignableDirectX& operator= (const AssignableDirectX&) { return *this; }
535+
AssignableDirectX& operator= (AssignableDirectX&&) noexcept { return *this; }
536+
~AssignableDirectX() = default;
537+
538+
DirectX* operator->() const { return directX.operator->(); }
539+
540+
private:
541+
SharedResourcePointer<DirectX> directX;
542+
};
543+
544+
AssignableDirectX directX;
530545
ComSmartPtr<IDXGISwapChain1> chain;
531546
ComSmartPtr<ID2D1Bitmap1> buffer;
532547
std::optional<WindowsScopedEvent> swapChainEvent;

0 commit comments

Comments
 (0)