[toc]
# 组件对象模型
我们通常将 COM
视为一种接口,DirectX 通过使用引用计数的方法来管理这些组件占用的内存。
常用的三个和 COM 相关的方法如下:
- Get
- GetAddressOf
- Reset
# 纹理格式
2D 纹理是一种由数据元素构成的矩阵。它的用途之一是存储 2D 图像数据,即每个元素存储的都是一像素的颜色。
但是,纹理贴图的用处并非只有贴图。例如,有种 法线贴图
的技术,其纹理内每个元素存储的是一个 3D 向量,而非像素。
因此,尽管纹理贴图给人第一印象是用来存储图像像素,但实际上它的用途却十分广泛。
基于上述知识,我们可以认为纹理贴图的每个元素也不一定是像素,DX 中支持每个纹理贴图中存储的元素类型列表如下:
# 交换链和页面翻转
这个交换链需要使用到硬件管理的两个缓冲区, 前台缓冲区
和 后台缓冲区
。每次前台缓冲区绘制结束后会转变成后台缓冲区。
这种交换操作只需要交换两个缓冲区的指针即可 也有使用三重缓冲的情况,如 VSync
# 深度缓冲
即 Z-Buffer
, 使用 ZBuffer 的物体的绘制顺序已经无关紧要了,但是透明物体需要特别注意。
深度值存储的是像素的深度值,通常是归一化到某个空间内的值。但这个值并非只有 [01], 也可以是 [0255], 在 DX12 中可以通过设置深度缓冲区的格式来确定缓冲区内存储的值
# 资源与描述符
在发生控制命令 (读 / 写缓冲区) 之前,我们需要将本次绘制调用 (draw call) 相关的资源 绑定
到渲染流水线上。由于部分资源可能发生改变,那时就需要重新绑定。
通过 描述符
进行绑定。描述符在指定资源位置的同时,还可以指定资源的类型。
Tips:
视图(view)
和描述符(descriptor)
是同义词
# 多重采样技术
多重采样技术 - 抗锯齿
# SSAA 超采样
Super Sample Anti-Aliasing
方法很粗暴,使用屏幕像素的四倍大小进行绘制,显示时按 4 个像素一组进行 降采样
,每组求平均, 但是这种方法处理数量和内存都达到了之前的4倍
还有种方式是 MSAA(多重采样)
假设在 4x 采样下,MSAA 同样会采用 4 倍深度缓冲区和后台缓冲区,但是会将一个像素划分为四个 子像素
但在实际的计算中时,不会对每个子像素进行计算,而是计算四个子像素的中心点的平均值作为当前像素的输出值。
# 功能级别
DirectX11 之后,DX 引进了功能级别的概念, D3D_FEATURE_LEVEL
, 功能级别的目的是确定当前 GPU 所支持的最小功能集。即,如果用户不支持
# DirectX 图形基础结构
又称 DXGI (DirectX Graphics Infrastructure)
# 获取显示适配器列表
通过
1 | mdxgiFactory->EnumAdapters(i, &adapter) |
找到当前设备中的图形适配器列表