前言
此篇将以一个简单的示例,展示如何使用捆绑包(bundle)绘制三角形,输出和绘制三角形篇的结果是一样的。由于之前讲过最基本的绘制流程与组件,因此以下内容只是新加内容
流程图
header file
//一级命令列表和二级命令列表是有所不同的,因此我们额外创建一个捆绑包分配器来存储捆绑包所含的调用命令
ComPtr<ID3D12CommandAllocator> m_bundleAllocator;
ComPtr<ID3D12GraphicsCommandList> m_bundle;
source file
初始化管线
创建捆绑包分配器
ThrowIfFailed(m_device->CreateCommandAllocator(D3D12_COMMAND_LIST_TYPE_BUNDLE, IID_PPV_ARGS(&m_bundleAllocator)));
加载资源
创建捆绑包并加入命令,然后关闭
//向捆绑包加入的命令,尽量加入需重复调用的命令
ThrowIfFailed(m_device->CreateCommandList(0, D3D12_COMMAND_LIST_TYPE_BUNDLE, m_bundleAllocator.Get(), m_pipelineState.Get(), IID_PPV_ARGS(&m_bundle)));
m_bundle->SetGraphicsRootSignature(m_rootSignature.Get());
m_bundle->IASetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
m_bundle->IASetVertexBuffers(0, 1, &m_vertexBufferView);
m_bundle->DrawInstanced(3, 1, 0, 0);
ThrowIfFailed(m_bundle->Close());
渲染
填充命令列表
提交捆绑包
// Execute the commands stored in the bundle.
m_commandList->ExecuteBundle(m_bundle.Get());
捆绑包只在初始化时加入命令,由于后续渲染过程不会加入命令,因此无需关闭捆绑包
reference
原文链接: https://www.cnblogs.com/chenglixue/p/17124926.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/318250
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!