Vulkan 的缓冲是可以存储任意数据的可以被显卡读取的内存。
和之前我们见到的 Vulkan 对象不同,缓冲对象并不自动地为它们自己分配内存。
填写 VkBufferCreateInfo 结构体:
VkBufferCreateInfo b u f f e r I n f o = {};
b u f f e r I n f o . sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO;
bufferInfo . size = sizeof ( vertices [ 0 ] ) * vertices . size () ;
b u f f e r I n f o . usage = VK_BUFFER_USAGE_VERTEX_BUFFER_BIT;
size 成员变量用于指定要创建的缓冲所占字节大小。
usage 成员变量用于指定缓冲中的数据的使用目的。
b u f f e r I n f o . sharingMode = VK_SHARING_MODE_EXCLUSIVE;
和交换链图像一样,缓冲可以被特定的队列族所拥有,也可以同时在
多个队列族之前共享。在这里,我们只使用了一个队列,所以选择使用独
有模式。
flags 成员变量用于配置缓冲的内存稀疏程度,我们将其设置为 0 使用
默认值。
缓冲不依赖交换链,所以我们不需要在交换链重建时重建缓冲。
应用程序结束时,我们需要清除我们创建的缓冲对象:
vkDestroyBuffer ( device , vertexBuffer , n u l l p t r ) ;
内存需求
缓冲创建后实际还没有给它分配任何内存。
分配缓冲内存前,