Graphics 什么';don';不使用暂存缓冲区?

Graphics 什么';don';不使用暂存缓冲区?,graphics,game-engine,vulkan,Graphics,Game Engine,Vulkan,最近我在想一个游戏,是否有很多模型,每个模型都需要顶点缓冲区来绘制。比如下面三个选项,哪一个最有效 在绘制这些模型之前,创建几个小顶点缓冲区并使用vkMapMemory更新它 创建几个小顶点缓冲区并使用暂存缓冲区进行更新 创建几个足够大的顶点缓冲区并使用它 你把两个不同的问题混为一谈。。。内存管理和内存更新 对于内存管理,OpenGL和Vulkan的传统智慧是,您希望在底层API中进行少量分配,并自己进行内存管理,以便可以在单个缓冲区中以不同的偏移量存储多个顶点数据集。这对于能够进行间接绘制至关

最近我在想一个游戏,是否有很多模型,每个模型都需要顶点缓冲区来绘制。比如下面三个选项,哪一个最有效

  • 在绘制这些模型之前,创建几个小顶点缓冲区并使用vkMapMemory更新它
  • 创建几个小顶点缓冲区并使用暂存缓冲区进行更新
  • 创建几个足够大的顶点缓冲区并使用它

  • 你把两个不同的问题混为一谈。。。内存管理和内存更新

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


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

    我不明白你的题目。此外,它似乎与问题内容脱节。你还需要详细说明#3——你的意思还不清楚;大缓冲区并不能免除您对内存传输的需求。感谢您的澄清,使用间接绘图可以在一个命令中渲染多个模型,但许多平台不支持它。是否有其他选项来渲染许多模型,特别是那些模型有自己的顶点缓冲区。据我所知,所有Vulkan实现和大多数桌面OpenGL实现(任何支持4.3及以上版本的实现)都支持间接多重绘制。真的吗?例如,您是否曾尝试在高通平台上查询vulkan对此功能的支持?