Vulkan中不同顶点格式的网格顶点是否可共用同一个vertex buffer
Vulkan多格式顶点缓冲区使用问题解答
不同格式顶点能否共用同一个顶点缓冲区
- 完全可以将不同格式的顶点存入同一个
VkBuffer,不需要为每种格式单独创建顶点缓冲区对象 - Vulkan的顶点格式约束不与缓冲区本身绑定,而是由当前绑定图形管线的
VkPipelineVertexInputStateCreateInfo顶点输入布局、vkCmdBindVertexBuffers的偏移量与绑定点配置共同决定 - 实际使用仅需要满足:不同格式的顶点数据块在缓冲区中存储时,每个块的起始地址符合设备限制
VkPhysicalDeviceLimits::minVertexInputBindingAlignment的对齐要求。绘制不同网格时,重新调用vkCmdBindVertexBuffers传入同一个缓冲区、对应数据块的起始偏移,同时切换适配对应顶点格式的图形管线即可正常渲染。
vkCmdBindVertexBuffers偏移量单位说明
- 该函数的
pOffsets数组参数的单位为字节,而非顶点步长 - 对应官方手册参数说明的中文翻译:
pOffsets是指向字节偏移量数组的指针,每个偏移量与pBuffers数组内的缓冲区一一对应,代表从对应缓冲区起始位置到该顶点绑定点读取数据的起始位置的字节距离 - 额外强制要求:所有传入的偏移量必须是设备限制
minVertexInputBindingAlignment的整数倍,否则会触发校验层错误或未定义行为。
内容的提问来源于stack exchange,提问作者Vulkanoid
相关产品推荐
相关产品推荐

