DX Hello Bundle

前言

​ 此篇将以一个简单的示例,展示如何使用捆绑包(bundle)绘制三角形,输出和绘制三角形篇的结果是一样的。由于之前讲过最基本的绘制流程与组件,因此以下内容只是新加内容

流程图

Hello 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://github.com/microsoft/DirectX-Graphics-Samples

原文链接: https://www.cnblogs.com/chenglixue/p/17124926.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    DX Hello Bundle

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/318250

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月16日 下午3:03
下一篇 2023年2月16日 下午3:04

相关推荐