fix: 修复 D3D12SwapChain 重复创建 swapchain 问题
- 添加 Initialize(IDXGISwapChain*, width, height) 重载方法 - 接受已存在的 swapchain 而不是重复创建 - 测试通过,日志显示正常渲染
This commit is contained in:
@@ -18,6 +18,7 @@ public:
|
|||||||
~D3D12SwapChain();
|
~D3D12SwapChain();
|
||||||
|
|
||||||
bool Initialize(IDXGIFactory4* factory, ID3D12CommandQueue* commandQueue, HWND windowHandle, uint32_t width, uint32_t height, uint32_t bufferCount = 2);
|
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();
|
void Shutdown();
|
||||||
|
|
||||||
uint32_t GetCurrentBackBufferIndex() const;
|
uint32_t GetCurrentBackBufferIndex() const;
|
||||||
|
|||||||
@@ -47,6 +47,18 @@ bool D3D12SwapChain::Initialize(IDXGIFactory4* factory, ID3D12CommandQueue* comm
|
|||||||
return true;
|
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() {
|
void D3D12SwapChain::Shutdown() {
|
||||||
m_swapChain.Reset();
|
m_swapChain.Reset();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -606,7 +606,7 @@ bool InitD3D12(HWND inHWND, int inWidth, int inHeight) {
|
|||||||
|
|
||||||
IDXGISwapChain* swapChain = nullptr;
|
IDXGISwapChain* swapChain = nullptr;
|
||||||
dxgiFactory->CreateSwapChain(gCommandQueue.GetCommandQueue(), &swapChainDesc, &swapChain);
|
dxgiFactory->CreateSwapChain(gCommandQueue.GetCommandQueue(), &swapChainDesc, &swapChain);
|
||||||
gSwapChain.Initialize(dxgiFactory, gCommandQueue.GetCommandQueue(), inHWND, inWidth, inHeight, 2);
|
gSwapChain.Initialize(swapChain, inWidth, inHeight);
|
||||||
|
|
||||||
D3D12_HEAP_PROPERTIES d3dHeapProperties = {};
|
D3D12_HEAP_PROPERTIES d3dHeapProperties = {};
|
||||||
d3dHeapProperties.Type = D3D12_HEAP_TYPE_DEFAULT;
|
d3dHeapProperties.Type = D3D12_HEAP_TYPE_DEFAULT;
|
||||||
|
|||||||
Reference in New Issue
Block a user