Overview
Vulkan
中的缓存资源通过VkBuffer
对象来表示,是一种用于存储通用数据的资源,可以用来存储顶点数据,索引数据,Uniforms
数据块等
VkBuffer
表示的是一个线性内存块,这说明它的内存布局是连续的,类似于数组,这种布局适合存储顺序访问的数据,比如 顶点数据和索引数据,也支持随机访问
VkBuffer 创建
创建 VkBuffer
时,可以通过设置 VkBufferCreateInfo
不同的 usage
标志来指定 VkBuffer
的用途
vkCreateBuffer
的函数原型是:
VKAPI_ATTR VkResult VKAPI_CALL vkCreateBuffer(
VkDevice device,
const VkBufferCreateInfo* pCreateInfo,
const VkAllocationCallbacks* pAllocator,
VkBuffer* pBuffer);
其中的关键配置信息是pCreateInfo
,其类型VkBufferCreateInfo
定义如下:
typedef struct VkBufferCreateInfo {
VkStructureType sType; // 必须为 VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO
const void* pNext; // nullptr
VkBufferCreateFlags flags; // 0
VkDeviceSize size; // 缓存大小,单位为字节
VkBufferUsageFlags usage; // usage ,important
VkSharingMode sharingMode; // 缓存的共享模式
uint32_t queueFamilyIndexCount; // 指定 pQueueFamilyIndices 数组中元素数量
const uint32_t* pQueueFamilyIndices;// 指定将会访问该缓存的设备队列
} VkBufferCreateInfo;
其中需要重点关注的是 VkBufferUsageFlags
,定义如下:
typedef enum VkBufferUsageFlagBits {
VK_BUFFER_USAGE_TRANSFER_SRC_BIT = 0x00000001,
VK_BUFFER_USAGE_TRANSFER_DST_BIT = 0x00000002,
VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT = 0x00000004,
VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT = 0x00000008,
VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT = 0x00000010,
VK_BUFFER_USAGE_STORAGE_BUFFER_BIT = 0x00000020,
VK_BUFFER_USAGE_INDEX_BUFFER_BIT = 0x000