5.1 KiB
5.1 KiB
D3D12CommandList
命名空间: XCEngine::RHI
类型: class
头文件: XCEngine/RHI/D3D12/D3D12CommandList.h
描述: DirectX 12 命令列表封装类,负责录制图形和计算命令
概述
D3D12CommandList 是 DirectX 12 命令列表的封装类,继承自 RHICommandList 接口。它负责录制所有图形渲染命令,包括状态设置、绘制调用、资源状态转换、复制操作等。D3D12CommandList 支持命令列表重置和关闭以实现命令重用,内部维护资源状态跟踪以优化状态转换屏障。
该类是渲染管线的核心,负责将所有渲染操作命令化并提交到 GPU 执行。
公共方法
| 方法 | 描述 |
|---|---|
D3D12CommandList() |
默认构造函数 |
~D3D12CommandList() |
虚析构函数 |
| Initialize | 初始化命令列表 |
| Shutdown | 关闭命令列表 |
| Reset | 重置命令列表 |
| Close | 关闭命令列表 |
| GetCommandList | 获取底层命令列表指针 |
| TransitionBarrier | 设置资源转换屏障 |
| UAVBarrier | 设置 UAV 屏障 |
| AliasBarrier | 设置别名屏障 |
| SetPipelineState | 设置管道状态 |
| SetViewport | 设置视口 |
| SetViewports | 设置多个视口 |
| SetScissorRect | 设置裁剪矩形 |
| SetScissorRects | 设置多个裁剪矩形 |
| SetPrimitiveTopology | 设置图元拓扑 |
| SetRenderTargets | 设置渲染目标 |
| SetVertexBuffer | 设置顶点缓冲区 |
| SetVertexBuffers | 设置多个顶点缓冲区 |
| SetIndexBuffer | 设置索引缓冲区 |
| SetStencilRef | 设置模板参考值 |
| SetDepthStencilState | 设置深度模板状态 |
| SetBlendState | 设置混合状态 |
| SetBlendFactor | 设置混合因子 |
| SetDepthBias | 设置深度偏移 |
| Draw | 绘制调用 |
| DrawIndexed | 绘制索引图元 |
| DrawInstancedIndirect | 间接实例绘制 |
| DrawIndexedInstancedIndirect | 间接索引实例绘制 |
| Clear | 清除缓冲区 |
| ClearRenderTarget | 清除渲染目标 |
| ClearDepthStencil | 清除深度模板 |
| CopyResource | 复制资源 |
| CopyBuffer | 复制缓冲区 |
| CopyTexture | 复制纹理 |
| BeginQuery | 开始查询 |
| EndQuery | 结束查询 |
| ResolveQueryData | 解析查询数据 |
| Dispatch | 分发计算任务 |
| DispatchIndirect | 间接分发计算任务 |
| ExecuteBundle | 执行命令束 |
使用示例
#include <XCEngine/RHI/D3D12/D3D12CommandList.h>
using namespace XCEngine::RHI;
// 创建命令列表
D3D12CommandList commandList;
commandList.Initialize(device, CommandQueueType::Direct);
// 开始录制命令
commandList.Reset();
// 设置渲染目标
commandList.SetRenderTargets(1, &renderTargetView, nullptr);
float clearColor[] = { 0.0f, 0.0f, 0.0f, 1.0f };
commandList.ClearRenderTarget(renderTargetView, clearColor);
// 设置视口
Viewport viewport = { 0.0f, 0.0f, 1280.0f, 720.0f, 0.0f, 1.0f };
commandList.SetViewport(viewport);
// 设置图元拓扑
commandList.SetPrimitiveTopology(PrimitiveTopology::TriangleList);
// 绑定顶点缓冲区
commandList.SetVertexBuffer(0, vertexBuffer, 0, sizeof(Vertex));
// 绑定索引缓冲区
commandList.SetIndexBuffer(indexBuffer, 0, Format::R32_UInt);
// 绑定管道状态
commandList.SetPipelineState(pipelineState);
// 绘制
commandList.DrawIndexed(indexCount, 1, 0, 0, 0);
// 关闭命令列表
commandList.Close();
// 提交到命令队列
commandQueue->ExecuteCommandListsInternal(1, &cmdList);
相关文档
- D3D12 模块概览 - D3D12 模块总览
- RHICommandList - RHI 命令列表基类
- D3D12CommandQueue - 命令队列