vulakn教程--Drawing a Triangle--Draw--Framebuffer

发表于2016-12-05
评论0 1.3k浏览
原文地址 : 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

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引