帧缓冲区
介绍
在之前的章节中,我们讨论了交换链图像和图像视图,现在我们将创建帧缓冲区对象来包装这些图像视图,以便在渲染过程中使用。帧缓冲区对象引用所有表示附件的 VkImageView 对象,例如颜色、深度和模板缓冲区。在我们的情况下,我们只需要一个颜色附件。
创建帧缓冲区
首先,添加一个类成员来存储帧缓冲区:
std::vector<vk::raii::Framebuffer> swapChainFramebuffers;
然后,在 initVulkan 中调用 createFramebuffers 函数:
void initVulkan() {
createInstance();
setupDebugMessenger();
createSurface();
pickPhysicalDevice();
createLogicalDevice();
createSwapChain();
createImageViews();
createFramebuffers();
}
void createFramebuffers() {
}
帧缓冲区的创建非常简单。我们只需要为交换链中的每个图像视图创建一个帧缓冲区:
void createFramebuffers() {
swapChainFramebuffers.clear();
for (auto imageView : swapChainImageViews) {
vk::FramebufferCreateInfo framebufferInfo{ .renderPass = renderPass, .attachmentCount = 1, .pAttachments = &imageView, .width = swapChainExtent.width, .height = swapChainExtent.height, .layers = 1 };
swapChainFramebuffers.emplace_back(device, framebufferInfo);
}
}
请注意,我们使用的是动态渲染,因此不需要传统的渲染通道。相反,我们将在命令缓冲区中直接指定附件。