D3D的初始化
CPU与GPU间的同步
围栏用ID3DFence接口表示
视图==描述符 描述内存的数据类型等信息
在使用深度缓冲区之前,先创建相关的深度视图并把它绑定在渲染流水线上。创建渲染目标视图同理。
frames per second FPS 每秒渲染帧数 流畅度的标杆
封装隐藏实现细节 把精力集中在需要关注的特定主题上
顶点 与 索引
四个顶点有两组索引 组成两个三角形
把复用的三角形顶点数据转换为索引这种数据结构
输入布局描述
描述顶点的类型格式等数值的类型
在D12所有资源用ID3D12Resource接口表示
GPU资源都存在堆(heap)中,其本质是具有特定属性的GPU显存块。
default heap 向这堆提交的资源唯有GPU可以访问
Upload heap 向这堆提交的资源都要经CPU传至GPU (常量缓冲区)
Read-back heap 向这堆提交的资源都需要由CPU读取的资源
系统内存 —> 上传缓冲区 —> 顶点缓冲区 —> 顶点缓冲区视图 —> 输入槽
常量缓冲区由CPU每帧更新一次 创建到上传堆
根签名:执行绘制命令之前 资源会被映射到着色器对应的输入寄存器,类似于函数签名,参数列表以及返回值
.cso (compiled share object)已编译的着色器对象 离线编译生成
流水线状态对象(Pipeline State Object)集合了大量的流水线状态信息,为了保证性能我们将所有这些对象都集中在一起,一并送至渲染流水线。尽量减少PSO次数。
D3D实际上是一个状态机(state machine),里面的实物保持着他们的状态,直至我们将其改变。
D3D初始化步骤:
1.用D3D12CreateDevice函数创建 ID3D12Device接口实例
2.创建一个ID3D12Fence对象,并查询描述符大小
3.依次创建命令队列,命令列表分配器和主命令列表
4.描述并创建交换链
5.创建应用程序所需要的描述符堆
7.调整后台缓冲区大小,并为它创建渲染目标视图RTV
8.创建深度缓冲区以及关联深度视图DSV
9.设置视口和裁切矩形