组件对象模型(Component Object Model, COM)可视为接口。
COM对象会统计其引用次数,因此,在使用完接口时,应调用Release方法。当COM对象的引用计数为0时,它将自行释放自己所占用的内存。
Windows运行库(Windows Runtime Library, WRL)提供了Microsoft::WRL::ComPtr类(#include<wrl.h>),可以当作COM的智能指针。可以省去手动调用Release方法的麻烦。
2D纹理(2D texture)是一种由数据元素构成的矩阵。一种数据数组。一种资源。
纹理只能由存储DXGI_FORMAT枚举类型中描述的特定格式的数据元素组成。例如:DXGI_FORMAT_R32G32B32_FLOAT,DXGI_FORMAT_R16G16B16A16_UNORM等等。
DXGI_FORMAT枚举类型除了组成纹理还能用于描述顶点以及索引的数据格式。
前台缓冲区(front buffer)存储的是当前显示在屏幕上的图像数据;后台缓冲区(back buffer)存储的是被绘制的动画的下一帧图形数据。
前后台缓冲的互换操作称为呈现(提交,显示,presenting)。互换操作只需要交换前后台缓冲区的两个指针就能实现。
前后台缓冲区构成了交换链(swap chain)。用IDXGISwapChain接口表示,该接口存储了前后台缓冲区的两种纹理。
前后台缓冲区又被称为双缓冲(double buffering)。
深度缓冲区(depth buffer)是存储特定像素的深度信息的纹理资源。深度值的范围为0.0~1.0。0代表视野内看到的离自己最近的像素点,1代表视野内看到的离自己最远的像素点。
深度缓冲区中的元素与后台缓冲区内的像素呈一一对应关系。如果后台缓冲区的分辨率为1280x1024,那么深度缓冲区中就有1280x1024个深度元素。
深度缓冲技术原理是计算每个像素的深度值,并进行深度测试(depth test)。深度测试用于对竞争写入后台缓冲区中同一像素的多个像素深度值进行比较。具有最小深度值的像素(离观察者最近的像素)会获得胜利,它将被写入后台缓冲区中。
在进行绘制命令(绘制调用,draw call)之前,必须要通过描述符来对本次绘制相关的资源进行绑定(bind 或称 链接,link)到渲染流水线上。
描述符实际上为一个中间层。作用一方面是指定资源数据,另一方面是为GPU解释该资源:该资源将如何使用(该资源将被绑定到流水线的哪个阶段上)。
视图(view)与描述符(descriptor)是同义词。例如:常量缓冲区视图(constant buffer view)与常量缓冲区描述符(constant buffer descriptor)表达的是同一事物。
CBV描述符表示常量缓冲区视图(constant buffer view)。SRV描述符表示着色器资源视图(shader resource view)。UAV描述符表示无序访问视图(unordered access view)。
采样器(sampler)描述符表示采样器资源(用于纹理贴图)。
RTV描述符表示渲染目标视图资源(render target view)。
DSV描述符表示深度/模板视图资源(depth/stencil view)。
描述符堆(descriptor heap)可看作描述符数组。