帧缓冲

下一步就是修改创建帧缓冲的代码,绑定深度图像作为帧缓冲的深度附着。在createFramebuffers函数中指定深度图像视图对象作为帧缓冲的第二个附着:

std::array<VkImageView, 2> attachments = {
    swapChainImageViews[i],
    depthImageView
};

VkFramebufferCreateInfo framebufferInfo = {};
framebufferInfo.sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO;
framebufferInfo.renderPass = renderPass;
framebufferInfo.attachmentCount = static_cast<uint32_t>(attachments.size());
framebufferInfo.pAttachments = attachments.data();
framebufferInfo.width = swapChainExtent.width;
framebufferInfo.height = swapChainExtent.height;
framebufferInfo.layers = 1;

和每个交换链图像对应不同的颜色附着不同,使用我们这里的信号量设置,同时只会有一个子流程在执行,所以,这里我们只需要使用一个深度附着即可。

我们需要在createFramebuffers函数调用前创建深度图像相关的对象:

void initVulkan() {
        ...
    createDepthResources();
    createFramebuffers();
        ...
}