vulakn教程--Drawing a Triangle--Draw--Framebuffer
发表于2016-12-05
原文地址 : vulkan-tutorial
Framebuffers
我们已在之前的章节中多次提到FrameBuffer 并且在创建Render Pass时,我们期望拥有一个和Swap Chain 里image具有相同格式(format)的FrameBuffer。 接下来我们就将创建这种FrameBufefr.
我们将attachments包裹在FrameBuffer中,FrameBuffer 通过引用VkImageView来关联所有的attachments。在我们案例中只有一个attachment :color attachment 。然而作为attachment的image取决于在显示的时候Swap Chain 到底返回的是哪一个image,这就意味着我们需要为Swap Chain里的每一个image 创建一个FrameBuffer。
1
2
3
4
5
6
7
std::vector swapChainFramebuffers;
void createFramebuffers() {
swapChainFramebuffers.resize(swapChainImageViews.size(),
VDeleter {device, vkDestroyFramebuffer});
}
先定义一个函数,然后再填写关键语句。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// 遍历每一个imageView (image) 为它创建Framebuffer
for (size_t i = 0; i < swapChainImageViews.size(); i++) {
VkImageView attachments[] = {
swapChainImageViews[i]
};
VkFramebufferCreateInfo framebufferInfo = {};
framebufferInfo.sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO;
framebufferInfo.renderPass = renderPass;
// 这里的 attachmentCount 与pAttachments 和Render Pass 里的
// pAttachment 相关联。
framebufferInfo.attachmentCount = 1;
framebufferInfo.pAttachments = attachments;
framebufferInfo.width = swapChainExtent.width;
framebufferInfo.height = swapChainExtent.height;
framebufferInfo.layers = 1;
if (vkCreateFramebuffer(device, &framebufferInfo, nullptr, &swapChainFramebuffers[i]) != VK_SUCCESS) {
throw std::runtime_error("failed to create framebuffer!");
}
}
原文源码 : source code