最近我想知道一个游戏,如果有很多模型,并且他们每个人都需要顶点缓冲区来绘制。就像下面三个选项一样,哪一个最有效?不使用暂存缓冲区的原因是什么?
- 创建几个小顶点缓冲区并在绘制这些模型之前用vkMapMemory更新它。
- 创建几个小顶点缓冲区并使用分段缓冲区进行更新。
- 创建足够大的顶点缓冲区并使用它。
最近我想知道一个游戏,如果有很多模型,并且他们每个人都需要顶点缓冲区来绘制。就像下面三个选项一样,哪一个最有效?不使用暂存缓冲区的原因是什么?
你在混淆两个不同的问题......内存管理和内存更新。
对于内存管理,OpenGL和Vulkan的传统观点是,您希望在底层API中进行少量分配,并自己进行内存管理,以便可以将多个顶点数据集以不同的偏移量存储在单个缓冲区中。这对于能够进行间接绘制至关重要,因为您可以在其中执行单个命令来绘制多个模型。因为您不能更改该命令中的绑定,所以您只能渲染全部位于单个顶点缓冲区内的模型。
对于内存更新,您需要记住并非所有内存都必须使用vkMapMemory
进行映射。通常只能映射系统内存,而GPU本地内存则不能。当顶点数据位于GPU上时,最佳性能将会达到,因此最佳做法是使用由可映射内存组成的暂存缓冲区,然后使用它将其转移到设备本地内存的实际缓冲区。
我不明白你的问题标题。此外,它似乎与问题内容不相关。你还需要详细说明#3 - 你不清楚你的意思;大缓冲没有**不会以某种方式免除您对内存传输的需求。 – krOoze