最近我想知道一个游戏,如果有很多模型,每个模型都需要顶点缓冲区来绘制。如下三个选项,哪一个最有效?
答案 0 :(得分:5)
您正在混淆两个不同的问题......内存管理和内存更新。
对于内存管理,OpenGL和Vulkan的传统观念是,您希望在底层API中进行少量分配并自行进行内存管理,以便您可以在不同偏移量的单个缓冲区中存储多个顶点数据集。这对于能够执行间接绘制至关重要,您可以在其中执行单个命令来渲染许多模型。因为您无法更改该命令中的绑定,所以您只能渲染全部位于单个顶点缓冲区内的模型。
对于内存更新,您需要记住,并非所有内存都必须使用vkMapMemory
进行映射。通常只能映射系统内存,而GPU本地内存则不能。当顶点数据在GPU上时,最佳性能将会出现,因此最佳做法是使用由可映射内存组成的暂存缓冲区,然后使用它转移到设备本地内存的实际缓冲区。