c++ - Vulkan/VMA 更改缓冲区大小类似于`realloc`
问题描述
假设我遇到了一种情况,我想更改 vulkan 缓冲区 (VkBuffer) 的大小。例如,如果我想向现有的顶点缓冲区添加更多顶点。我将如何增大/缩小 VkBuffer?我会被迫只创建一个新缓冲区并放弃旧缓冲区,还是有类似于 C 的功能realloc
?它是否以 vulkan 扩展的形式存在?
此外,我正在使用 Vulkan 内存分配器 (VMA)。如果有这样的realloc
功能,我想要使用 VMA 和原始 vulkan 的两种解决方案。
解决方案
VMA 和 Vulkan 扩展中都没有realloc
。
从历史上看,有vmaResizeAllocation()
,但它已被弃用,现在已不复存在。
为了增长,您需要预测并预先分配一些额外的大小,或者获得新的分配。对于收缩,您可以使用已有的内存,或者获得一个新的。
如果您获得新的分配,则必须进行显式复制,这也可能对同步产生影响。所以它有点超出了 VMA 的范围,对于许多分配器算法来说也可能不是那么好。
推荐阅读
- sql - 如何连接两个不同条件的表
- mysql - 无法使用临时表添加或更新子行错误?
- configuration - 如何防止 snmpd 监听 161 端口?
- elasticsearch - Grafana 变量 显示来自 Elasticsearch 的多个术语
- dji-sdk - 离线使用 DJI SDK
- css - 网站不允许在 IOS 上滚动(适用于桌面和 Android)
- mysql - MYSQL,具有数百万行的多个表的低性能分组
- c# - 通过反射找到特定的方法
- kubernetes - 如何为多租户环境使用动态持久卷配置
- python - 如何从 python 中运行 bash 脚本并获取所有输出?