清理

最后,不要忘记在createTextureImage函数的结尾清除我们使用的暂存缓冲和它关联的内存:

transitionImageLayout(textureImage, VK_FORMAT_R8G8B8A8_UNORM, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);

    vkDestroyBuffer(device, stagingBuffer, nullptr);
    vkFreeMemory(device, stagingBufferMemory, nullptr);
}

纹理图像一直被使用到程序结束才被我们清除:

void cleanup() {
    cleanupSwapChain();

    vkDestroyImage(device, textureImage, nullptr);
    vkFreeMemory(device, textureImageMemory, nullptr);

        ...
}

图像数据被加载到图像对象后,还需要一定的设置才能被访问。下一章节,我们会介绍访问我们加载的图像数据的方法。

本章节代码:

C++:

https://vulkan-tutorial.com/code/23_texture_image.cpp

Vertex Shader:

https://vulkan-tutorial.com/code/21_shader_ubo.vert

Fragment Shader:

https://vulkan-tutorial.com/code/21_shader_ubo.frag