处理窗口大小变化
当窗口大小变化时,需要对深度缓冲进行处理,让深度缓冲的大小和新的窗口大小相匹配。为此我们扩展recreateSwapChain函数在窗口大小改变时重建深度缓冲:
void recreateSwapChain() {
vkDeviceWaitIdle(device);
cleanupSwapChain();
createSwapChain();
createImageViews();
createRenderPass();
createGraphicsPipeline();
createDepthResources();
createFramebuffers();
createCommandBuffers();
}
最后,需要注意在交换链的清除函数cleanupSwapChain中添加对深度缓冲相关的清除操作:
void cleanupSwapChain() {
vkDestroyImageView(device, depthImageView, nullptr);
vkDestroyImage(device, depthImage, nullptr);
vkFreeMemory(device, depthImageMemory, nullptr);
...
}
至此,我们就可以使用深度测试来渲染三维对象。在下一章节,我们将介绍如何绘制一个带有纹理的三维模型。
本章节代码:
C++:
https://vulkan-tutorial.com/code/26_depth_buffering.cpp
Vertex Shader:
https://vulkan-tutorial.com/code/26_shader_depth.vert
Fragment Shader: