66 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
---
 | 
						||
title: DirectX12学习笔记(2)——Direct3D初始化
 | 
						||
date: 2023-03-01 19:39:43
 | 
						||
excerpt:
 | 
						||
tags:
 | 
						||
rating: ⭐
 | 
						||
---
 | 
						||
# Com接口
 | 
						||
需要包含头文件#include <wrl.h>
 | 
						||
 | 
						||
常用方法
 | 
						||
- Get():取得Com接口对象。
 | 
						||
- GetAdressof():取得Com接口指针地址。
 | 
						||
- Rest():释放相关使用。
 | 
						||
 | 
						||
# 交换链
 | 
						||
D3D使用IDXGISwapChain控制前后缓存交换。
 | 
						||
- ResizeBuffers()
 | 
						||
- Present():呈现缓冲区内容。
 | 
						||
 | 
						||
# 资源描述符号
 | 
						||
1. 常量缓冲区视图(CBV)/SRV/UAV
 | 
						||
2. 采样器(Sample)
 | 
						||
3. 渲染目标视图(RTV)
 | 
						||
4. 深度/模版视图(DSV)
 | 
						||
 | 
						||
# 多重采样技术
 | 
						||
解析(resolve,或者可以称之为降采样)
 | 
						||
 | 
						||
## 利用D3D进行多重采样
 | 
						||
首先填写DXGI_SAMPLE_DESC:
 | 
						||
```c++
 | 
						||
typedef struct DXGI_SAMPLE_DESC
 | 
						||
{
 | 
						||
	UINT Count;
 | 
						||
	UINT Quality;
 | 
						||
} DXGI_SAMPLE_DESC;
 | 
						||
```
 | 
						||
之后使用ID3D12Device::CheckFeatureSupport查询到对应的质量级别:
 | 
						||
 | 
						||
# DXGI
 | 
						||
- DXGI_MODE_DESC: 分辨率、逐行扫描、缩放方式。
 | 
						||
- DXGI_MODE_SCANLINE_ORDER:缩放优先级。
 | 
						||
- DXGI_MODE_SCALING:缩放方式。
 | 
						||
 | 
						||
# 功能支持检测
 | 
						||
使用ID3D12Device::CheckFeatureSupport()检查功能支持情况。
 | 
						||
- D3D12_FEATURE
 | 
						||
	- D3D12_FEATURE_D3D12_OPTIONS
 | 
						||
	- D3D12_FEATURE_ARCHITECHTURE
 | 
						||
	- D3D12_FEATURE_FEATURE_LEVELS
 | 
						||
	- D3D12_FEATURE_FORMAT_SUPPORT
 | 
						||
	- D3D12_FEATURE_MULTISAMPLE_QUALITY_LEVELS
 | 
						||
 | 
						||
# CPU与GPU间的交互
 | 
						||
## 命令队列
 | 
						||
DX12的命令队列被抽象为ID3D12CommandQueue。使用ID3D12Device::CreateCommandQueue()来创建。
 | 
						||
```c++
 | 
						||
Microsoft::WRL::ComPtr<ID3D12Debug> mCommandQueue;
 | 
						||
D3D12_COMMAND_QUEUE_DESC queueDesc={};
 | 
						||
queueDesc.Type = D3D12_COMMAND_LIST_TYPE_DIRECT;
 | 
						||
queueDesc.Flags = D3D12_COMMAND_QUEUE_FLAG_NONE;
 | 
						||
ThrowIfFailed(md3Device->CreateCommandQueue(&queueDesc,IID_PPV_ARGS(&mCommandQueue)));
 | 
						||
```
 | 
						||
 | 
						||
IID_PPV_ARGS |