# D3D12CommandList **命名空间**: `XCEngine::RHI` **类型**: `class` **头文件**: `XCEngine/RHI/D3D12/D3D12CommandList.h` **描述**: DirectX 12 命令列表封装类,负责录制图形和计算命令 ## 概述 D3D12CommandList 是 DirectX 12 命令列表的封装类,继承自 RHICommandList 接口。它负责录制所有图形渲染命令,包括状态设置、绘制调用、资源状态转换、复制操作等。D3D12CommandList 支持命令列表重置和关闭以实现命令重用,内部维护资源状态跟踪以优化状态转换屏障。 该类是渲染管线的核心,负责将所有渲染操作命令化并提交到 GPU 执行。 ## 公共方法 | 方法 | 描述 | |------|------| | `D3D12CommandList()` | 默认构造函数 | | `~D3D12CommandList()` | 虚析构函数 | | [Initialize](d3d12-command-list-initialize.md) | 初始化命令列表 | | [Shutdown](d3d12-command-list-shutdown.md) | 关闭命令列表 | | [Reset](d3d12-command-list-reset.md) | 重置命令列表 | | [Close](d3d12-command-list-close.md) | 关闭命令列表 | | [GetCommandList](d3d12-command-list-get-command-list.md) | 获取底层命令列表指针 | | [TransitionBarrier](d3d12-command-list-transition-barrier.md) | 设置资源转换屏障 | | [UAVBarrier](d3d12-command-list-uav-barrier.md) | 设置 UAV 屏障 | | [AliasBarrier](d3d12-command-list-alias-barrier.md) | 设置别名屏障 | | [SetPipelineState](d3d12-command-list-set-pipeline-state.md) | 设置管道状态 | | [SetViewport](d3d12-command-list-set-viewport.md) | 设置视口 | | [SetViewports](d3d12-command-list-set-viewports.md) | 设置多个视口 | | [SetScissorRect](d3d12-command-list-set-scissor-rect.md) | 设置裁剪矩形 | | [SetScissorRects](d3d12-command-list-set-scissor-rects.md) | 设置多个裁剪矩形 | | [SetPrimitiveTopology](d3d12-command-list-set-primitive-topology.md) | 设置图元拓扑 | | [SetRenderTargets](d3d12-command-list-set-render-targets.md) | 设置渲染目标 | | [SetVertexBuffer](d3d12-command-list-set-vertex-buffer.md) | 设置顶点缓冲区 | | [SetVertexBuffers](d3d12-command-list-set-vertex-buffers.md) | 设置多个顶点缓冲区 | | [SetIndexBuffer](d3d12-command-list-set-index-buffer.md) | 设置索引缓冲区 | | [SetStencilRef](d3d12-command-list-set-stencil-ref.md) | 设置模板参考值 | | [SetDepthStencilState](d3d12-command-list-set-depth-stencil-state.md) | 设置深度模板状态 | | [SetBlendState](d3d12-command-list-set-blend-state.md) | 设置混合状态 | | [SetBlendFactor](d3d12-command-list-set-blend-factor.md) | 设置混合因子 | | [SetDepthBias](d3d12-command-list-set-depth-bias.md) | 设置深度偏移 | | [Draw](d3d12-command-list-draw.md) | 绘制调用 | | [DrawIndexed](d3d12-command-list-draw-indexed.md) | 绘制索引图元 | | [DrawInstancedIndirect](d3d12-command-list-draw-instanced-indirect.md) | 间接实例绘制 | | [DrawIndexedInstancedIndirect](d3d12-command-list-draw-indexed-instanced-indirect.md) | 间接索引实例绘制 | | [Clear](d3d12-command-list-clear.md) | 清除缓冲区 | | [ClearRenderTarget](d3d12-command-list-clear-render-target.md) | 清除渲染目标 | | [ClearDepthStencil](d3d12-command-list-clear-depth-stencil.md) | 清除深度模板 | | [CopyResource](d3d12-command-list-copy-resource.md) | 复制资源 | | [CopyBuffer](d3d12-command-list-copy-buffer.md) | 复制缓冲区 | | [CopyTexture](d3d12-command-list-copy-texture.md) | 复制纹理 | | [BeginQuery](d3d12-command-list-begin-query.md) | 开始查询 | | [EndQuery](d3d12-command-list-end-query.md) | 结束查询 | | [ResolveQueryData](d3d12-command-list-resolve-query-data.md) | 解析查询数据 | | [Dispatch](d3d12-command-list-dispatch.md) | 分发计算任务 | | [DispatchIndirect](d3d12-command-list-dispatch-indirect.md) | 间接分发计算任务 | | [ExecuteBundle](d3d12-command-list-execute-bundle.md) | 执行命令束 | ## 使用示例 ```cpp #include 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.md) - D3D12 模块总览 - [RHICommandList](../rhi-command-list.md) - RHI 命令列表基类 - [D3D12CommandQueue](d3d12-command-queue.md) - 命令队列