From 88cd65d08258b65c65e44072fa831a7bfeb7142a Mon Sep 17 00:00:00 2001 From: ssdfasd <2156608475@qq.com> Date: Sun, 15 Mar 2026 18:30:14 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20D3D12SwapChain=20?= =?UTF-8?q?=E9=87=8D=E5=A4=8D=E5=88=9B=E5=BB=BA=20swapchain=20=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加 Initialize(IDXGISwapChain*, width, height) 重载方法 - 接受已存在的 swapchain 而不是重复创建 - 测试通过,日志显示正常渲染 --- engine/include/XCEngine/RHI/D3D12/D3D12SwapChain.h | 1 + engine/src/RHI/D3D12SwapChain.cpp | 12 ++++++++++++ tests/D3D12/main.cpp | 2 +- 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/engine/include/XCEngine/RHI/D3D12/D3D12SwapChain.h b/engine/include/XCEngine/RHI/D3D12/D3D12SwapChain.h index 67c93525..bd91e43b 100644 --- a/engine/include/XCEngine/RHI/D3D12/D3D12SwapChain.h +++ b/engine/include/XCEngine/RHI/D3D12/D3D12SwapChain.h @@ -18,6 +18,7 @@ public: ~D3D12SwapChain(); bool Initialize(IDXGIFactory4* factory, ID3D12CommandQueue* commandQueue, HWND windowHandle, uint32_t width, uint32_t height, uint32_t bufferCount = 2); + bool Initialize(IDXGISwapChain* swapChain, uint32_t width, uint32_t height); void Shutdown(); uint32_t GetCurrentBackBufferIndex() const; diff --git a/engine/src/RHI/D3D12SwapChain.cpp b/engine/src/RHI/D3D12SwapChain.cpp index 424334fc..e812daaf 100644 --- a/engine/src/RHI/D3D12SwapChain.cpp +++ b/engine/src/RHI/D3D12SwapChain.cpp @@ -47,6 +47,18 @@ bool D3D12SwapChain::Initialize(IDXGIFactory4* factory, ID3D12CommandQueue* comm return true; } +bool D3D12SwapChain::Initialize(IDXGISwapChain* swapChain, uint32_t width, uint32_t height) { + HRESULT hResult = swapChain->QueryInterface(IID_PPV_ARGS(&m_swapChain)); + if (FAILED(hResult)) { + return false; + } + + m_width = width; + m_height = height; + + return true; +} + void D3D12SwapChain::Shutdown() { m_swapChain.Reset(); } diff --git a/tests/D3D12/main.cpp b/tests/D3D12/main.cpp index a643d87b..a2725d95 100644 --- a/tests/D3D12/main.cpp +++ b/tests/D3D12/main.cpp @@ -606,7 +606,7 @@ bool InitD3D12(HWND inHWND, int inWidth, int inHeight) { IDXGISwapChain* swapChain = nullptr; dxgiFactory->CreateSwapChain(gCommandQueue.GetCommandQueue(), &swapChainDesc, &swapChain); - gSwapChain.Initialize(dxgiFactory, gCommandQueue.GetCommandQueue(), inHWND, inWidth, inHeight, 2); + gSwapChain.Initialize(swapChain, inWidth, inHeight); D3D12_HEAP_PROPERTIES d3dHeapProperties = {}; d3dHeapProperties.Type = D3D12_HEAP_TYPE_DEFAULT;