![6d481a7e893a4264f2347f522af82ee6.png](https://img-blog.csdnimg.cn/img_convert/6d481a7e893a4264f2347f522af82ee6.png)
前言:
俗话说得好,基础不牢,地动山摇。大家好我又来摸鱼了,继续上次没写完的基础DX12图形API分析。还是那句话,欢迎大家在评论区批评指正你们觉得不妥的地方,大家一起交流学习嘛,没啥不好的。
挂一下前篇的链接:
ILLmew:DX12削笔机(小笔记)基础DX12API介绍(1)zhuanlan.zhihu.com![db53781147053fbb652c6ffd4f918916.png](https://img-blog.csdnimg.cn/img_convert/db53781147053fbb652c6ffd4f918916.png)
废话不多说!我们继续吧!
正文:
笔接上文,了解清楚了上文的所有知识后,我们便可以初始化我们的DX12。那是初始化一个DX12图形应用所需要的最少的依赖。
说一个上文忘记说的东西,虽然很不起眼,但是很重要。
ID3D12Debug:
在我们每次对我们的DX12应用进行初始化的时候,都别忘记在创建ID3D12Device之前创建一个ID3D12Debug,通过::D3D12GetDebugInterface()(在d3d12.h的全局作用域中)我们可以获取当前进行Debug所需要的必要接口信息,然后通过ID3D12Debug.EnableDebugLayer()之后,我们就启用了DX12的调试层。(当然,我们要注意仅在我们应用的Debug版本中启用它)这样子,每次我们对DX12进行了不恰当的操作之后(如传错了参数,调用的顺序不对),在通过ThrowIfFailed()宏(实际内容为throw一个error)和catch。我们就可以获得大致的错误信息描述,再通过详细的debug,就可以锁定问题出现的位置。
ID3D12RootSignature:
接着,我们来讲根签名。首先,什么是签名?小时候你爸爸妈妈在你的作业上留下的名字就是一种签名,代表着他们阅读过你做的作业。所谓签名,可以理解为是某一事物的一种独特的象征。那么根签名,就是着色器的签名。
着色器(shader)是一种运行在GPU上面的程序,可以自定义编程GPU的渲染管线。根签名,就是在执行绘制命令之前,将应用程序绑定到流水线上面的资源映射到指定着色器对应的输入寄存器(register)的一个绑定说明。注意!在绘制开始之前,根签名一定要为着色器提供执行期间内需要绑定到渲染流水线的所有资源,并且会由当前的流水线状态对象(pipeline state object)对其进行验证。
这么说完,大家觉得可能还是会有点绕,有点抽象,那我们就来举一个栗子。这是我们在Cpp中见到的最普通的函数形式: