不使用登台缓冲区的原因是什么?

jam*_*mes -2 graphics game-engine vulkan

最近我想知道一个游戏,如果有很多模型,每个模型都需要顶点缓冲区来绘制.如下三个选项,哪一个最有效?

  1. 创建几个小顶点缓冲区并在绘制这些模型之前使用vkMapMemory更新它.
  2. 创建几个小顶点缓冲区并使用临时缓冲区进行更新.
  3. 创建几个足够大的顶点缓冲区并使用它.

Jhe*_*ico 5

你正在混淆两个不同的问题......内存管理和内存更新.

对于内存管理,OpenGL和Vulkan的传统智慧是您希望在底层API中进行少量分配并自行进行内存管理,以便您可以在不同偏移量的单个缓冲区中存储多个顶点数据集.这对于能够执行间接绘制至关重要,您可以在其中执行单个命令来渲染许多模型.因为您无法更改该命令中的绑定,所以只能渲染全部位于单个顶点缓冲区内的模型.

对于内存更新,您需要记住,并非所有内存都必须使用映射vkMapMemory.通常只能映射系统内存,而GPU本地内存则不能.当顶点数据在GPU上时,最佳性能将会出现,因此最佳做法是使用由可映射内存组成的暂存缓冲区,然后使用它转移到设备本地内存的实际缓冲区.