Vulkan® Memory Allocator::Quick start (VMA::第一章::快速入门)

日志

2020/10/14 增加快速入门、环境配置、初始化、资源创建


Version 3.0.0-development (2020-06-24)


快速入门


配置环境

Vulkan Memory Allocator 使用标准格式定义的单头文件工程,不需要其他库文件。你可以将头文件直接加入到你的工程源码中。

"单头文件"并不意味着所有的声明都是用C++声明,有些是使用内联函数或者模板声明的。意思是说实现是和接口在同一个文件中。并且使用编译器宏做扩展。如果配置不对将会引发链接错误。

正确的配置做法:

  1. 在每个你要使用VMA的CPP文件中包含"vk_mem_alloc.h"头文件
  2. 在每个包含"vk_mem_alloc.h"头文件的前面激活内部定义宏:VMA_IMPLEMENTATION
#define VMA_IMPLEMENTATION
#include "vk_mem_alloc.h"

对于零散的CPP文件来说,这样声明是一个好主意。

当前VMA虽然是使用C++书写,但也有兼容C语言的接口。因此 vk_mem_alloc.h 可以在C和C++项目中使用。但是VMA_IMPLEMENTATION 宏必须作为c++的一部分进行编译而不是作为C语言编译。

请注意该库内部包含了<vulkan/vulkan.h>头文件,如果是Windows系统又会包含  <windows.h> 头文件,如果你需要一些特殊的宏(比如 Windows 的 WIN32_LEAN_AND_MEAN,Vulkan 的 VK_USE_PLATFORM_WIN32_KHR)必须在包含含"vk_mem_alloc.h"头文件的前面定义声明。


初始化

初始化步骤:

  1. 初始化Vulkan并创建 VkPhysical、VkDevice 和 VkInstance 句柄
  2. 填写 VmaAllocatorCreateInfo 结构体并且通过 vmaCreateAllocator() 函数创建 VmaAllocator 句柄对象
VmaAllocatorCreateInfo allocatorInfo = {};
allocatorInfo.physicalDevice = physicalDevice;
allocatorInfo.device = device;
allocatorInfo.instance = instance;
 
VmaAllocator allocator;
vmaCreateAllocator(&allocatorInfo, &allocator);

资源创建

当你想创建缓存(VkBuffer)和图片(VkImage)时:

  1. 填写 VkBufferCreateInfo 或 VkImageCreateInfo 结构体
  2. 填写 VmaAllocationCreateInfo 结构体
  3. 调用 vmaCreateBuffer() 或 vmaCreateImage() 创建 VkBuffer 或 VkImage 并其库内部已经将需要的内存分配并绑定完成。
VkBufferCreateInfo bufferInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO };
bufferInfo.size = 65536;
bufferInfo.usage = VK_BUFFER_USAGE_VERTEX_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT;
 
VmaAllocationCreateInfo allocInfo = {};
allocInfo.usage = VMA_MEMORY_USAGE_GPU_ONLY;
 
VkBuffer buffer;
VmaAllocation allocation;
vmaCreateBuffer(allocator, &bufferInfo, &allocInfo, &buffer, &allocation, nullptr);

最后不要忘记用完销毁回收

vmaDestroyBuffer(allocator, buffer, allocation);
vmaDestroyAllocator(allocator)

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值