Vulkan/FrameBuffer

发布时间 2023-12-02 14:11:56作者: 经纬视界

帧缓冲(Framebuffer)代表由渲染管线进行渲染的一组图像。它们影响管线的最后几个阶段:深度模板测试,颜色混合,逻辑运算,多重采样等等。一个帧缓冲对象总是附着在一个渲染通道上并且可以用在多个具有相似模板编排的渲染通道中。

调用vkCreateFramebuffer创建帧缓冲对象。

VkFramebufferCreateInfo中,与帧缓冲兼容的渲染通道对象由renderpass指定。对于帧缓冲来说,两个兼容的渲染通道是指它们引用的附件是相同的。

绑定到帧缓冲对象的图像由pAttachments传递,它是一个VkImageview指针,数量由attachmentCount指定。该数量和渲染通道内指定的附件数量相同,并且图象视口和渲染通道内附件一一对应,子通道使用索引引用的附件就是对应到pAttachments中。如果你知道某个特别的渲染通道不适用某些附件,但是你依然希望帧缓冲于其兼容,那么pAttachments某些值可能需要设置为VkNullHandle

即使帧缓冲内每个图像都有自己的宽度、高度和层数,你也必须指定帧缓冲的维度大小,包括widthheightlayers。你可以通过maxFramebufferWidth查看帧缓冲宽度限制,类似的高度和层数也可以通过着这种方法查看。

如果你不需要这缓冲对象,使用vkDestroyFramebuffer销毁。

销毁一个帧缓冲对象并不影响任何附着在帧缓冲对象上的图像数据。图像可以同时绑定到多个帧缓冲中,也可在一个帧缓冲中绑定到多个附件上,以此用多种方式使用图像数据。然而,即使图像没有销毁,你应该确保不再使用已销毁的帧缓冲对象。