不使用暂存缓冲区的原因是什么?

时间:2017-07-07 09:12:41

标签: graphics game-engine vulkan

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

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

1 个答案:

答案 0 :(得分:5)

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

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

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