第1章 开始前的准备 1
1.1 创建DirectX 12项目 1
1.1.1 安装Windows 10和Visual Studio 2015 1
1.1.2 新建解决方案和项目 1
1.1.3 配置使用Windows 10 SDK 3
1.1.4 新建main.cpp 4
1.1.5 新建rendermain.cpp 7
1.1.6 链接dxgi.lib和d3d12.lib库 7
1.1.7 生成并调试 8
1.2 COM简介 9
1.2.1 构建分布式系统 9
1.2.2 接口和实现的彻底分离 10
章末小结 10
第2章 开始Direct3D 12编程 11
2.1 设备、命令队列和交换链 11
2.1.1 启用调试层 11
2.1.2 创建设备 11
2.1.3 创建命令队列 13
2.1.4 创建交换链 15
2.1.5 呈现交换链缓冲 18
2.2 渲染到交换链缓冲前的准备 19
2.2.1 渲染到交换链缓冲的两种方式 19
2.2.2 创建渲染目标视图 20
2.2.3 创建命令分配器和命令列表 22
2.3 以归零方式渲染到交换链缓冲 24
2.3.1 转换资源屏障 24
2.3.2 执行命令列表 26
2.3.3 小结 27
2.4 以绘制方式渲染到交换链缓冲 28
2.4.1 图形流水线初探 28
2.4.2 绘制一个三角形 44
章末小结 68
第3章 多线程 69
3.1 命令队列 69
3.1.1 不同命令之间的原子性 69
3.1.2 同一命令内部的并发性 70
3.2 围栏 71
3.3 命令分配器和命令列表 73
3.3.1 复习并深入 73
3.3.2 捆绑包 75
3.4 资源屏障 78
3.4.1 转换资源屏障 79
3.4.2 别名资源屏障 82
3.4.3 无序访问视图资源屏障 83
3.5 Draw Call 83
章末小结 84
第4章 资源 85
4.1 资源的结构 85
4.1.1 逻辑结构 85
4.1.2 物理结构 89
4.2 资源的创建 95
4.2.1 GPU架构 95
4.2.2 资源堆 97
4.2.3 资源 101
4.3 CPU访问资源 105
4.3.1 概念 105
4.3.2 加载DDS文件(一) 107
4.4 GPU访问资源 110
4.4.1 复制——加载DDS文件(二) 110
4.4.2 解析——MSAA 112
4.5 图形流水线访问资源 115
4.5.1 索引缓冲 115
4.5.2 顶点缓冲 118
4.5.3 流输出缓冲 125
4.5.4 描述符堆和描述符 133
4.5.5 根签名再探 136
章末小结 157
第5章 图形流水线再探 158
5.1 输出混合阶段 158
5.1.1 深度阶段 160
5.1.2 模板阶段 163
5.1.3 融合阶段 167
5.2 几何着色器阶段 173
5.3 细分阶段 178
5.3.1 外壳着色器阶段 179
5.3.2 细分阶段 181
5.3.3 域着色器阶段 184
5.3.4 小结 185
章末小结 190
第6章 计算流水线 191
6.1 计算流水线状态 191
6.2 计算流水线启动 194
6.3 无序访问资源视图 195
6.4 二次贝塞尔曲线 197
章末小结 203
第7章 GPU内部传参 204
7.1 谓词 204
7.2 间接执行 206
7.2.1 创建命令签名 206
7.2.2 添如间接执行命令 209
7.3 查询 212
章末小结 219
第8章 字体引擎 220
8.1 TrueType字体 220
8.2 绘制字形 225
章末小结 247