您的位置:首页 > Web前端

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

2016-09-19 20:49 309 查看
原文地址 : 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


std::vector<VDeleter<VkFramebuffer>> swapChainFramebuffers;

void createFramebuffers() {
swapChainFramebuffers.resize(swapChainImageViews.size(),
VDeleter<VkFramebuffer> {device, vkDestroyFramebuffer});

}


先定义一个函数,然后再填写关键语句。

// 遍历每一个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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息