refactor: 继续用 D3D12CommandList 替换原生 API
- 添加更多 wrapper 方法: SetDescriptorHeaps, SetGraphicsRootConstantBufferView, SetGraphicsRoot32BitConstants, SetGraphicsRootDescriptorTable, SetGraphicsRootShaderResourceView - 使用 wrapper 方法替换 main.cpp 中的原生 API 调用 - 测试通过
This commit is contained in:
@@ -842,10 +842,9 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
|
||||
}
|
||||
|
||||
InitD3D12(hwnd, 1280, 720);
|
||||
ID3D12GraphicsCommandList* commandList = GetCommandList();
|
||||
ID3D12CommandAllocator* commandAllocator = GetCommandAllocator();
|
||||
StaticMeshComponent staticMeshComponent;
|
||||
staticMeshComponent.InitFromFile(commandList, "Res/Model/Sphere.lhsm");
|
||||
staticMeshComponent.InitFromFile(gCommandList.GetCommandList(), "Res/Model/Sphere.lhsm");
|
||||
|
||||
ID3D12RootSignature* rootSignature = InitRootSignature();
|
||||
D3D12_SHADER_BYTECODE vs, gs, ps;
|
||||
@@ -890,7 +889,7 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
|
||||
int imageWidth, imageHeight, imageChannel;
|
||||
stbi_uc* pixels = stbi_load("Res/Image/earth_d.jpg", &imageWidth, &imageHeight, &imageChannel, 4);
|
||||
Log("[DEBUG] Texture loaded: width=%d, height=%d, channels=%d, pixels=%p\n", imageWidth, imageHeight, imageChannel, pixels);
|
||||
ID3D12Resource* texture = CreateTexture2D(commandList, pixels,
|
||||
ID3D12Resource* texture = CreateTexture2D(gCommandList.GetCommandList(), pixels,
|
||||
imageWidth * imageHeight * imageChannel, imageWidth, imageHeight, DXGI_FORMAT_R8G8B8A8_UNORM);
|
||||
delete[] pixels;
|
||||
ID3D12Device* d3dDevice = GetD3DDevice();
|
||||
@@ -944,20 +943,20 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
|
||||
color[0] = timeSinceAppStartInSecond;
|
||||
commandAllocator->Reset();
|
||||
gCommandList.Reset(gCommandAllocator.GetCommandAllocator());
|
||||
BeginRenderToSwapChain(commandList);
|
||||
commandList->SetPipelineState(pso);
|
||||
commandList->SetGraphicsRootSignature(rootSignature);
|
||||
commandList->SetDescriptorHeaps(_countof(descriptorHeaps), descriptorHeaps);
|
||||
commandList->SetGraphicsRootConstantBufferView(0, cb->GetGPUVirtualAddress());
|
||||
commandList->SetGraphicsRoot32BitConstants(1, 4, color, 0);
|
||||
commandList->SetGraphicsRootDescriptorTable(2, srvHeap->GetGPUDescriptorHandleForHeapStart());
|
||||
commandList->SetGraphicsRootShaderResourceView(3, sb->GetGPUVirtualAddress());
|
||||
commandList->IASetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
|
||||
staticMeshComponent.Render(commandList);
|
||||
BeginRenderToSwapChain(gCommandList.GetCommandList());
|
||||
gCommandList.SetPipelineState(pso);
|
||||
gCommandList.SetRootSignature(rootSignature);
|
||||
gCommandList.SetDescriptorHeaps(_countof(descriptorHeaps), descriptorHeaps);
|
||||
gCommandList.SetGraphicsRootConstantBufferView(0, cb->GetGPUVirtualAddress());
|
||||
gCommandList.SetGraphicsRoot32BitConstants(1, 4, color, 0);
|
||||
gCommandList.SetGraphicsRootDescriptorTable(2, srvHeap->GetGPUDescriptorHandleForHeapStart());
|
||||
gCommandList.SetGraphicsRootShaderResourceView(3, sb->GetGPUVirtualAddress());
|
||||
gCommandList.SetPrimitiveTopology(XCEngine::RHI::PrimitiveTopology::TriangleList);
|
||||
staticMeshComponent.Render(gCommandList.GetCommandList());
|
||||
|
||||
// On screenshot frame, don't transition to PRESENT - keep RENDER_TARGET for screenshot
|
||||
if (frameCount != 30) {
|
||||
EndRenderToSwapChain(commandList);
|
||||
EndRenderToSwapChain(gCommandList.GetCommandList());
|
||||
}
|
||||
EndCommandList();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user