在vulkan中,VkVertexInputAttributeDescription的绑定成员是什么



根据我可以根据错误消息收集的信息,对于VkVertexInputAttributeDescription,绑定和位置必须不同,但我似乎不理解绑定的目的或如何使用它。我知道位置与顶点着色器的输入所在地有关,但绑定的用途是什么?这是一种基于搜索结果的索引,但它是一个什么索引?在什么情况下会使用绑定号作为参考?它有什么用处?它做什么?

VkVertexInputBindingDescription

有一个成员

inputRate

具有类型

VkVertexInputRate

inputRate

可以是两个值之一:

VK_VERTEX_PUT_RATE_VERTEX,VK_VEREX_INPUT_RATE_INSTANCE

也就是说,您可以使用绑定索引来区分逐顶点数据和逐实例数据

根据规范(1.2版(:

location是该属性的着色器绑定位置编号。

binding是该属性从中获取数据的绑定号。

例如,假设我们的Vertex结构如下:

struct Vertex
{
float pos[3];
float normal[3];
float texcoord[2];
float color[4];
};

在这里,我们有四个具有不同大小和偏移的属性。它们中的每一个都必须有自己的位置。例如,位置0用于作为位置的第一个属性。您可以在单独的VkVertexInputAttributeDescription中指定这些信息。

稍后,您需要填充一个名为VkVertexInputBindingDescription的结构。它指定它的绑定点和它可以包含的顶点的步长(顶点属性的总大小(。

因此VkVertexInputAttributeDescriptionVkVertexInputBindingDescription是不同的概念。您只能在创建VkPipelineVertexInputStateCreateInfo时将它们组合在一起。这里将使用VkVertexInputAttributeDescription中指定的绑定值。基本上,Vulkan将检查VkVertexInputAttributeDescription中描述的此类绑定点是否存在于定义的VkVertexInputBindingDescription中。如果是,它会将它们连接在一起以进行着色阶段。

规范也指出了这一点

对于的每个元素指定的每个绑定pVertexAttributeDescriptions,VkVertexInputBindingDescription必须存在于pVertexBindingDescriptions中,具有相同的绑定值

pVertexBindingDescriptions的所有元素都必须描述不同的绑定号

pVertexAttributeDescriptions的所有元素都必须描述不同的属性位置

最新更新