1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-10 23:44:24 +00:00

Direct2D: Reduce DirectX resource thrashing in Direct2D Swapchain

This commit is contained in:
Oli 2025-04-17 12:55:53 +01:00
parent 878ac1a23f
commit 3b43b7ca13

View file

@ -371,7 +371,6 @@ public:
if (chain != nullptr || hwnd == nullptr)
return S_OK;
SharedResourcePointer<DirectX> directX;
auto dxgiFactory = directX->adapters.getFactory();
if (dxgiFactory == nullptr || adapter->direct3DDevice == nullptr)
@ -448,7 +447,6 @@ public:
chain->GetDevice (__uuidof (device), (void**) device.resetAndGetPointerAddress());
JUCE_END_IGNORE_WARNINGS_GCC_LIKE
SharedResourcePointer<DirectX> directX;
createBuffer (Direct2DDeviceResources::findAdapter (directX->adapters, device));
return buffer != nullptr ? S_OK : E_FAIL;
@ -527,6 +525,23 @@ private:
deviceContext->CreateBitmapFromDxgiSurface (surface, bitmapProperties, buffer.resetAndGetPointerAddress());
}
class AssignableDirectX
{
public:
AssignableDirectX() = default;
AssignableDirectX (const AssignableDirectX&) {}
AssignableDirectX (AssignableDirectX&&) noexcept {}
AssignableDirectX& operator= (const AssignableDirectX&) { return *this; }
AssignableDirectX& operator= (AssignableDirectX&&) noexcept { return *this; }
~AssignableDirectX() = default;
DirectX* operator->() const { return directX.operator->(); }
private:
SharedResourcePointer<DirectX> directX;
};
AssignableDirectX directX;
ComSmartPtr<IDXGISwapChain1> chain;
ComSmartPtr<ID2D1Bitmap1> buffer;
std::optional<WindowsScopedEvent> swapChainEvent;