Replace depth buffer creation with D3D12Texture wrapper

This commit is contained in:
2026-03-15 19:54:00 +08:00
parent 632cba821d
commit 38e23e45c4
3 changed files with 38 additions and 29 deletions

View File

@@ -59,7 +59,6 @@ XCEngine::RHI::D3D12CommandQueue gCommandQueue;
XCEngine::RHI::D3D12SwapChain gSwapChain;
// 渲染目标 (SwapChain的后台Buffer)
ID3D12Resource* gDSRT = nullptr; // 深度模板缓冲
ID3D12Resource* gColorRTs[2]; // 颜色缓冲 (双缓冲)
int gCurrentRTIndex = 0;
@@ -84,6 +83,7 @@ XCEngine::RHI::D3D12Shader gPixelShader;
XCEngine::RHI::D3D12Buffer gConstantBuffer; // matrices
XCEngine::RHI::D3D12Buffer gMaterialBuffer; // material data
XCEngine::RHI::D3D12Texture gTexture; // earth texture
XCEngine::RHI::D3D12Texture gDepthStencil; // depth stencil buffer
XCEngine::RHI::D3D12ShaderResourceView gTextureSRV; // texture SRV
// 同步对象
@@ -486,34 +486,8 @@ bool InitD3D12(HWND inHWND, int inWidth, int inHeight) {
dxgiFactory->CreateSwapChain(gCommandQueue.GetCommandQueue(), &swapChainDesc, &swapChain);
gSwapChain.Initialize(swapChain, inWidth, inHeight);
D3D12_HEAP_PROPERTIES d3dHeapProperties = {};
d3dHeapProperties.Type = D3D12_HEAP_TYPE_DEFAULT;
D3D12_RESOURCE_DESC d3d12ResourceDesc = {};
d3d12ResourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE2D;
d3d12ResourceDesc.Alignment = 0;
d3d12ResourceDesc.Width = inWidth;
d3d12ResourceDesc.Height = inHeight;
d3d12ResourceDesc.DepthOrArraySize = 1;
d3d12ResourceDesc.MipLevels = 1;
d3d12ResourceDesc.Format = DXGI_FORMAT_D24_UNORM_S8_UINT;
d3d12ResourceDesc.SampleDesc.Count = 1;
d3d12ResourceDesc.SampleDesc.Quality = 0;
d3d12ResourceDesc.Layout = D3D12_TEXTURE_LAYOUT_UNKNOWN;
d3d12ResourceDesc.Flags = D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL;
D3D12_CLEAR_VALUE dsClearValue = {};
dsClearValue.Format = DXGI_FORMAT_D24_UNORM_S8_UINT;
dsClearValue.DepthStencil.Depth = 1.0f;
dsClearValue.DepthStencil.Stencil = 0;
device->CreateCommittedResource(&d3dHeapProperties,
D3D12_HEAP_FLAG_NONE,
&d3d12ResourceDesc,
D3D12_RESOURCE_STATE_DEPTH_WRITE,
&dsClearValue,
IID_PPV_ARGS(&gDSRT)
);
gDepthStencil.InitializeDepthStencil(device, inWidth, inHeight);
ID3D12Resource* gDSRT = gDepthStencil.GetResource();
D3D12_DESCRIPTOR_HEAP_DESC d3dDescriptorHeapDescRTV = {};
d3dDescriptorHeapDescRTV.NumDescriptors = 2;