Implement IShader and ISwapChain interfaces for D3D12 backend

- D3D12Shader now implements IShader interface with GetBytecode, GetBytecodeSize, GetType, GetInputLayout
- D3D12SwapChain now implements ISwapChain interface with GetBackBuffer returning IResource*
- Added D3D12Texture back buffer storage to SwapChain
- Fixed ISwapChain const correctness (GetCurrentBackBufferIndex, GetBackBuffer)
- main.cpp: use GetD3D12Bytecode() instead of GetBytecode() for PSO creation
This commit is contained in:
2026-03-16 12:38:17 +08:00
parent f4d94bda3d
commit 554c48448b
10 changed files with 84 additions and 46 deletions

View File

@@ -56,6 +56,13 @@ bool D3D12SwapChain::Initialize(IDXGISwapChain* swapChain, uint32_t width, uint3
m_width = width;
m_height = height;
m_backBuffers.resize(m_bufferCount);
for (uint32_t i = 0; i < m_bufferCount; ++i) {
ID3D12Resource* resource = nullptr;
m_swapChain->GetBuffer(i, IID_PPV_ARGS(&resource));
m_backBuffers[i].InitializeFromExisting(resource);
}
return true;
}
@@ -67,10 +74,11 @@ uint32_t D3D12SwapChain::GetCurrentBackBufferIndex() const {
return m_swapChain->GetCurrentBackBufferIndex();
}
ID3D12Resource* D3D12SwapChain::GetBackBuffer(uint32_t index) const {
ID3D12Resource* resource = nullptr;
m_swapChain->GetBuffer(index, IID_PPV_ARGS(&resource));
return resource;
IResource* D3D12SwapChain::GetBackBuffer(uint32_t index) const {
if (index < m_backBuffers.size()) {
return const_cast<D3D12Texture*>(&m_backBuffers[index]);
}
return nullptr;
}
void D3D12SwapChain::Present(uint32_t syncInterval, uint32_t flags) {
@@ -83,5 +91,19 @@ void D3D12SwapChain::Resize(uint32_t width, uint32_t height) {
m_height = height;
}
void D3D12SwapChain::SetFullscreen(bool fullscreen) {
m_swapChain->SetFullscreenState(fullscreen, nullptr);
}
bool D3D12SwapChain::IsFullscreen() const {
BOOL fullscreen = FALSE;
m_swapChain->GetFullscreenState(&fullscreen, nullptr);
return fullscreen != FALSE;
}
void* D3D12SwapChain::GetNativeHandle() const {
return reinterpret_cast<void*>(m_swapChain.Get());
}
} // namespace RHI
} // namespace XCEngine