一:概述
我们现在可以通过使用Vertex Buffer的形式,将顶点的任意属性传递到顶点着色器,但全局变量如何传递给着色器呢?从这一篇文章开始,我们将进入3D图形绘制阶段,这需要一个模型视图投影矩阵。我们可以将其作为顶点数据放到Vertex buffer中,但这会浪费内存,并且每当发生矩阵变换时,我们都需要更新顶点缓冲区。这些矩阵变换可能在每一帧中都会发生(如改变相机视角位置等)。
在Vulkan中解决这个问题的正确方法是使用资源描述符。描述符是一种让着色器自由访问像缓冲区和图像等资源的方式。我们将设置一个包含变换矩阵的缓冲区,并让顶点着色器通过描述符访问它们。描述符的使用包括三个部分:
1. 在管线创建期间指定描述符布局。
2. 从描述符池中分配描述符集。
3. 在渲染期间绑定描述符集。
描述符布局(descriptor layout)指定将被管线访问的资源类型(大白话: 描述符布局其实就是描述资源的数据类型,存储格式,大小等信息,有了这些信息,着色器其才能访问,要不然资源就是一堆二进制数据,不知道它表示的是啥