DX12中comptr对象中getaddressof与取地址运算符的区别?
一、DX12中comptr对象中getaddressof与取地址运算符的区别
com的&会把管理的对象reset掉的,之后取指针地址。getaddressof就是单纯取指针地址。对于dx12来说,都只是初始化的时候用一下,基本只对空com用。
DirectX 12是微软最新的图形API库,只在Win10系统上提供支持(如果不是Win10必须要升级成Win10才能用)。对这套API,我最大的感触就是特别复杂,因为它暴露了很多底层的方法。即便是我学过DX9,但是面对DX12的时候依旧会是一脸懵逼的状态,不仅是因为DX12暴露了太多方法,还有就是它封装方法的思路。好了,闲话就说到这里,下面我会用我理解的思路来介绍DX12绘制流程,并且给出一套可运行的代码。
DX12的绘制流程大概是这样的:
首先,绘制需要一个绘制的环境。绘制环境是在代码层对硬件环境的一种抽象,所有的绘制都是在这个绘制环境中完成的,可以说绘制环境才是我们的“硬件”。DX12对绘制环境的抽象是ID3D12Device。
然后,绘制自然需要资源。这里的资源就包括用来暂存渲染结果的缓冲区,包括渲染缓冲区和深度缓冲区。
最后,绘制需要绘制指令。必须让GPU知道我们想怎么样绘制才行。
DX12使用的COM技术,什么是COM技术,简单的理解就是从一个统一的公共基类继承出来的子类,用这种技术最大的好处就是资源的分配和释放可以不用太操心。
延伸阅读:
二、创建交换链
交换链是一种资源,但它比较特殊,它是当前正在显示的数据和下一帧将显示的数据的保存地。现代的绘制方式通常是这样,一个交换链有2个缓冲区,分别是前缓冲区和后缓冲区,前缓冲区中的数据是当前显示(能看到的)数据,后缓冲区的数据是下一帧要显示的数据,当需要显示后缓冲区中的数据时,将后缓冲区设置为“前”缓冲区就行了,这是一个非常巧妙的设定。
创建交换链的难点在于要描述创建什么样的交换链,这个描述结构的成员很多很繁杂,可以参考官方的[说明文档](DXGI_SWAP_CHAIN_DESC)。创建交换链的流程非常简单,只有三步:1、释放已有的交换链。
2、填充描述结构,指明要创建什么样的交换链。
3、调用Factory的CreateSwapChain函数创建交换链。

相关推荐HOT
更多>>
a记录和cname记录区别?
一、a记录和cname记录区别a记录A 记录用来记录域名对应的 IP 地址,下主机记录是域名前缀,记录值是 IP 地址,其他无需修改。主域名的主机记录...详情>>
2023-10-13 16:46:07
amd显卡和gtx显卡区别?
一、amd显卡和gtx显卡区别区别A卡:也就是AMD显卡,以前叫ATI显卡,后来被AMD收购以后AMD也是全球少数一个即生产高端CPU又生产高端GPU的厂家。...详情>>
2023-10-11 22:44:04
二进制、八进制、十进制和十六进制有什么区别?
一、二进制、八进制、十进制和十六进制的区别二进制、八进制、十进制和十六进制都是数字表示方式,但它们之间有一些区别。二进制:二进制是一种...详情>>
2023-10-11 21:40:36
二进制、八进制、十进制和十六进制有什么区别?
一、二进制、八进制、十进制和十六进制的区别二进制、八进制、十进制和十六进制都是数字表示方式,但它们之间有一些区别。二进制:二进制是一种...详情>>
2023-10-11 16:56:09