logo资料库

Vulkan编程指南.pdf

第1页 / 共295页
第2页 / 共295页
第3页 / 共295页
第4页 / 共295页
第5页 / 共295页
第6页 / 共295页
第7页 / 共295页
第8页 / 共295页
资料共295页,剩余部分请下载后查看
前言
关于本书
电子书
教程结构
概述
Vulkan起源
画一个三角形
总结
API概念
校验层
开发环境
Windows
Linux
MacOS
基础代码
一般结构
资源管理
和GLFW交互
实例
创建一个实例
检测扩展支持
清理
校验层
校验层是什么?
使用校验层
消息回调
配置
物理设备和队列族
选择一个物理设备
设备需求检测
队列族
逻辑设备和队列
介绍
指定要创建的队列
指定使用的设备特性
创建逻辑设备
获取队列句柄
窗口表面
创建窗口表面
查询呈现支持
创建呈现队列
交换链
检测交换链支持
查询交换链支持细节
为交换链选择合适的设置
表面格式
呈现模式
交换范围
创建交换链
获取交换链图像
图像视图
图形管线概述
着色器模块
顶点着色器
片段着色器
逐顶点着色
编译着色器
载入着色器
创建着色器模块
创建着色器阶段
固定功能
顶点输入
输入装配
视口和裁剪
光栅化
多重采样
深度和模板测试
颜色混合
动态状态
管线布局
总结
渲染流程
配置
附着描述
子流程和附着引用
渲染流程
阶段总结
帧缓冲
指令缓冲
指令池
分配指令缓冲
记录指令到指令缓冲
开始渲染流程
基础绘制指令
结束渲染流程
渲染和呈现
配置
同步
信号量
从交换链获取图像
提交指令缓冲
子流程依赖
呈现
多帧并行渲染
总结
重建交换链
介绍
重建交换链
交换链不完全匹配和交换链过期
显式处理窗口大小改变
处理窗口最小化
顶点输入描述
介绍
顶点着色器
顶点数据
绑定描述
创建顶点缓冲
介绍
创建缓冲
内存需求
内存分配
填充顶点缓冲
绑定顶点缓冲
暂存缓冲
介绍
传输队列
创建缓冲的辅助函数
使用暂存缓冲
总结
索引缓冲
介绍
创建索引缓冲
使用索引缓冲
描述符布局和缓冲
介绍
顶点着色器
描述符集布局
uniform缓冲
更新uniform数据
描述符池和描述符集
介绍
描述符池
描述符集
使用描述符集
多个描述符集
图像
介绍
图像库
载入图像
暂存缓冲
纹理图像
布局变换
复制缓冲到图像
准备纹理图像
变换屏障掩码
清理
图像视图和采样器
纹理图像视图
采样器
各向异性设备特性
组合图像采样器
介绍
更新描述符
纹理坐标
着色器
深度缓冲
介绍
三维几何
深度图像和视图
渲染流程
帧缓冲
清除值
深度和模板状态
处理窗口大小变化
载入模型
介绍
网格样例
载入顶点和索引
顶点去重
生成细化贴图
介绍
创建图像
生成细化贴图
线性过滤支持
采样器
总结
多重采样
介绍
获取可用样本数
设置渲染目标
添加附着
提升质量
总结
FAQ
Vulkan 编程指南 Alexander Overvoorde 著 fangcun 译 2019 年 3 月 22 日 1
目录 1 序 目录 2 9 2 前言 13 2.1 关于本书 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.2 电子书 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.3 教程结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 3 概述 16 3.1 Vulkan 起源 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 3.2 画一个三角形 . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 3.3 总结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.4 API 概念 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.5 校验层 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 4 开发环境 22 4.1 Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 4.2 Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 4.3 MacOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 5 基础代码 45 5.1 一般结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 5.2 资源管理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 5.3 和 GLFW 交互 . . . . . . . . . . . . . . . . . . . . . . . . . . 47 6 实例 50 6.1 创建一个实例 . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 6.2 检测扩展支持 . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 6.3 清理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 7 校验层 54 7.1 校验层是什么? . . . . . . . . . . . . . . . . . . . . . . . . . . 54 7.2 使用校验层 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 7.3 消息回调 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 7.4 配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
目录 3 8 物理设备和队列族 65 8.1 选择一个物理设备 . . . . . . . . . . . . . . . . . . . . . . . . 65 8.2 设备需求检测 . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 8.3 队列族 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 9 逻辑设备和队列 71 9.1 介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 9.2 指定要创建的队列 . . . . . . . . . . . . . . . . . . . . . . . . 71 9.3 指定使用的设备特性 . . . . . . . . . . . . . . . . . . . . . . . 72 9.4 创建逻辑设备 . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 9.5 获取队列句柄 . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 10 窗口表面 75 10.1 创建窗口表面 . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 10.2 查询呈现支持 . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 10.3 创建呈现队列 . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 11 交换链 80 11.1 检测交换链支持 . . . . . . . . . . . . . . . . . . . . . . . . . . 80 11.2 查询交换链支持细节 . . . . . . . . . . . . . . . . . . . . . . . 82 11.3 为交换链选择合适的设置 . . . . . . . . . . . . . . . . . . . . 84 11.4 表面格式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 11.5 呈现模式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 11.6 交换范围 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 11.7 创建交换链 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 11.8 获取交换链图像 . . . . . . . . . . . . . . . . . . . . . . . . . . 93 12 图像视图 13 图形管线概述 95 98 14 着色器模块 102 14.1 顶点着色器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 14.2 片段着色器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 14.3 逐顶点着色 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
目录 4 14.4 编译着色器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 14.5 载入着色器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 14.6 创建着色器模块 . . . . . . . . . . . . . . . . . . . . . . . . . . 110 14.7 创建着色器阶段 . . . . . . . . . . . . . . . . . . . . . . . . . . 112 15 固定功能 114 15.1 顶点输入 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 15.2 输入装配 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 15.3 视口和裁剪 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 15.4 光栅化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 15.5 多重采样 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 15.6 深度和模板测试 . . . . . . . . . . . . . . . . . . . . . . . . . . 119 15.7 颜色混合 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 15.8 动态状态 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 15.9 管线布局 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 15.10 总结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 16 渲染流程 125 16.1 配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 16.2 附着描述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 16.3 子流程和附着引用 . . . . . . . . . . . . . . . . . . . . . . . . 127 16.4 渲染流程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 17 阶段总结 18 帧缓冲 130 133 19 指令缓冲 136 19.1 指令池 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 19.2 分配指令缓冲 . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 19.3 记录指令到指令缓冲 . . . . . . . . . . . . . . . . . . . . . . . 139 19.4 开始渲染流程 . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 19.5 基础绘制指令 . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 19.6 结束渲染流程 . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
目录 5 20 渲染和呈现 143 20.1 配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 20.2 同步 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 20.3 信号量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 20.4 从交换链获取图像 . . . . . . . . . . . . . . . . . . . . . . . . 145 20.5 提交指令缓冲 . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 20.6 子流程依赖 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 20.7 呈现 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 20.8 多帧并行渲染 . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 20.9 总结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 21 重建交换链 158 21.1 介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158 21.2 重建交换链 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158 21.3 交换链不完全匹配和交换链过期 . . . . . . . . . . . . . . . . . 161 21.4 显式处理窗口大小改变 . . . . . . . . . . . . . . . . . . . . . . 163 21.5 处理窗口最小化 . . . . . . . . . . . . . . . . . . . . . . . . . . 165 22 顶点输入描述 166 22.1 介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 22.2 顶点着色器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 22.3 顶点数据 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 22.4 绑定描述 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 23 创建顶点缓冲 169 23.1 介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 23.2 创建缓冲 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 23.3 内存需求 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 23.4 内存分配 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 23.5 填充顶点缓冲 . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 23.6 绑定顶点缓冲 . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 24 暂存缓冲 178 24.1 介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 24.2 传输队列 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
目录 6 24.3 创建缓冲的辅助函数 . . . . . . . . . . . . . . . . . . . . . . . 179 24.4 使用暂存缓冲 . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 24.5 总结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 25 索引缓冲 185 25.1 介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 25.2 创建索引缓冲 . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 25.3 使用索引缓冲 . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 26 描述符布局和缓冲 190 26.1 介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 26.2 顶点着色器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 26.3 描述符集布局 . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 26.4 uniform 缓冲 . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 26.5 更新 uniform 数据 . . . . . . . . . . . . . . . . . . . . . . . . 196 27 描述符池和描述符集 200 27.1 介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 27.2 描述符池 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 27.3 描述符集 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 27.4 使用描述符集 . . . . . . . . . . . . . . . . . . . . . . . . . . . 204 27.5 多个描述符集 . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 28 图像 207 28.1 介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 28.2 图像库 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 28.3 载入图像 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 28.4 暂存缓冲 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 28.5 纹理图像 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 28.6 布局变换 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 28.7 复制缓冲到图像 . . . . . . . . . . . . . . . . . . . . . . . . . . 220 28.8 准备纹理图像 . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 28.9 变换屏障掩码 . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 28.10 清理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
目录 7 29 图像视图和采样器 226 29.1 纹理图像视图 . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 29.2 采样器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 29.3 各向异性设备特性 . . . . . . . . . . . . . . . . . . . . . . . . 233 30 组合图像采样器 235 30.1 介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 30.2 更新描述符 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 30.3 纹理坐标 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 30.4 着色器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 31 深度缓冲 244 31.1 介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244 31.2 三维几何 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244 31.3 深度图像和视图 . . . . . . . . . . . . . . . . . . . . . . . . . . 247 31.4 渲染流程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 31.5 帧缓冲 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254 31.6 清除值 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255 31.7 深度和模板状态 . . . . . . . . . . . . . . . . . . . . . . . . . . 256 31.8 处理窗口大小变化 . . . . . . . . . . . . . . . . . . . . . . . . 257 32 载入模型 259 32.1 介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 32.2 库 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 32.3 网格样例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260 32.4 载入顶点和索引 . . . . . . . . . . . . . . . . . . . . . . . . . . 260 32.5 顶点去重 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265 33 生成细化贴图 268 33.1 介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268 33.2 创建图像 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268 33.3 生成细化贴图 . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 33.4 线性过滤支持 . . . . . . . . . . . . . . . . . . . . . . . . . . . 276 33.5 采样器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277 33.6 总结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
目录 8 34 多重采样 282 34.1 介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282 34.2 获取可用样本数 . . . . . . . . . . . . . . . . . . . . . . . . . . 283 34.3 设置渲染目标 . . . . . . . . . . . . . . . . . . . . . . . . . . . 285 34.4 添加附着 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288 34.5 提升质量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292 34.6 总结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293 35 FAQ 295
分享到:
收藏