08/18/2020
图形管道
图像管道与之前的多重采样的代码创建的基本保持一致
- 黄色矩阵为可编译管道,由程序员写着色器代码
- 白色管道为固定管道,由驱动程序编写,我们可以修改它们的状态
- 第一步绘制命令由命令缓冲区中的vkCmdDraw开始执行流程图(从上往下)
- 在绘制命令之前需要绑定各个所需要的资源,比如管道,缓冲区,描述符。即左右两边的资源
顶点输入状态(Vertex Input State)
顶点着色器能够理解顶点数据,它必须声明和已定义的顶点属性对应的输入。需要在顶点着色器中欧创建一个带有Inut存储类的变量,使用in类型的变量即可表达。
顶点缓冲区的传输
- 顶点绑定描述
- 顶点属性描述
- R32G32B32A32 代表着vec4类型
- R32G32B32 代表vec3类型
- location 与GLSL着色器的location对应
- binding 与 绑定描述的binding相连
创建缓冲区
- 通过逻辑设备,创建缓冲区和分配缓冲区资源
- 通过内存映射,把数据传输到内存中
重点
Data在主机内存中,VkDeviceMemory在设备显存中,如果需要传输,需要使用vkMapMemory把设备显存的这块地址映射到主机内存中,然后使用拷贝函数传输数据,最后结束映射vkUnmapMemory。
描述符
- 分配描述符集合而不是创建
- 描述符集合主要明确描述符集合布局和描述符池
- 描述符池子规定了生成的描述符的数量和类型,和最大描述符集合数量
- 描述符集合布局规定了着色器中的描述符的位置,数量和类型
- 描述符集合布局中的每个描述符数量决定了描述符池子中对应的描述符的数量
- 管道布局包含着一个或者多个描述符集合布局
写入数据/资源到描述符中
VkDescriptorBufferInfo bufferInfo{