暂存缓冲
我们创建一个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);