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函数创建交换链。

猜你喜欢LIKE
相关推荐HOT
更多>>
为什么云爆发非常重要?
一、什么是云爆发云爆发是一种在本地基础设施到达峰值容量时使用云计算资源的配置方法。当企业内部数据中心的计算资源不足时,他们会将额外的工...详情>>
2023-10-10 23:23:27
有哪些不同类型的 NAS 设备?
一、有哪些不同类型的 NAS 设备?NAS 供应商生产如下类型的 NAS:基于计算机的 NAS一些 NAS 设备是带有处理器和操作系统的专用计算机。虽然从技...详情>>
2023-10-10 21:53:16
6模37频和7模37频区别?
一、6模37频和7模37频区别6模37频和7模37频区别是6模37频就是支持TD-LTE、FDD-LTE、TD-SCDMA、EVDO&CDMA、WCDMA、GSM六种不同的通信模式。CDMA...详情>>
2023-10-10 18:57:01
开通抖音小店怎么办营业执照
在当下社交媒体风靡的时代,越来越多人从抖音中找到商业机会,开通抖音小店成为越来越多人的选择。而开通抖音小店需要营业执照,办理营业执照也...详情>>
2023-10-10 05:46:41热门推荐
使用音频转文本转换器的好处有哪些?
沸为什么云爆发非常重要?
热DNS 服务的类型有哪些?
热如何创建 API?
新有哪些不同类型的 NAS 设备?
parameterType传入参数实体类和map有什么区别?
java web 和 android 两者的学习路线什么区别?
DX12中comptr对象中getaddressof与取地址运算符的区别?
数字化和数据化有什么区别?
6模37频和7模37频区别?
Haskell中的package.yaml与stack.yaml有什么区别?
SQL中的exists 与 not exists 有什么区别?
apk和app的区别?
海外版抖音小店怎么注册不了账号
技术干货






