暂存缓冲

我们创建一个CPU可见的缓冲,调用vkMapMemory函数映射内存,将图像像素数据复制到其中。在createTextureImage函数中添加临时的缓冲变量:

VkBuffer stagingBuffer;
VkDeviceMemory stagingBufferMemory;

我们使用的缓冲内存需要对CPU可见,这样,我们才能映射内存,将图像数据复制到其中:

createBuffer(imageSize, VK_BUFFER_USAGE_TRANSFER_SRC_BIT, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT, stagingBuffer, stagingBufferMemory);

接着,我们就可以映射内存,将图像数据复制到缓冲中:

void* data;
vkMapMemory(device, stagingBufferMemory, 0, imageSize, 0, &data);
memcpy(data, pixels, static_cast<size_t>(imageSize));
vkUnmapMemory(device, stagingBufferMemory);

最后,不要忘记清除我们解析得到的图像像素数据:

stbi_image_free(pixels);