总结

实际上,很少有程序为每个缓冲对象都调用vkAllocateMemory函数分配关联内存。物体设备允许同时存在的内存分配次数是有限制的,它最大为maxMemoryAllocationCount。即使在高端硬件上,比如NVIDIA GTX 1080,maxMemoryAllocationCount也只有4096这么大。所以,通常我们会一次申请一个很大块的内存,然后基于这个内存实现自己的内存分配器为我们创建的对象通过偏移参数分配内存。

我们可以自己实现内存分配器,也可以使用GPUOpen提供的VulkanMemoryAllocator内存分配器。在本教程,我们的内存分配次数实际上很小,所以我们为每个需要内存的对象调用vkAllocateMemory函数分配内存。

本章节代码:

C++:

https://vulkan-tutorial.com/code/19_staging_buffer.cpp

Vertex Shader:

https://vulkan-tutorial.com/code/17_shader_vertexbuffer.vert

Fragment Shader:

https://vulkan-tutorial.com/code/17_shader_vertexbuffer.frag