帧缓冲区在 Vulkan 中究竟是啥意思

Posted

技术标签:

【中文标题】帧缓冲区在 Vulkan 中究竟是啥意思【英文标题】:What exactly does framebuffer mean in Vulkan帧缓冲区在 Vulkan 中究竟是什么意思 【发布时间】:2020-07-06 09:59:39 【问题描述】:

我对RenderPass、Image和Framebuffer的概念有些模糊,尤其是FrameBuffer,但是它是不是一块用于存储像素数据的内存,如果是,它与Image有什么不同? 或者渲染流程是这样的: 渲染后的像素先存入Framebuffer,再存入Image?

【问题讨论】:

你知道FrameBuffers do in OpenGL吗? @Polygnome 刚看了还是没看懂,framebuffer只是一个组合多个buffer的结构?GPU实际上并不是写像素到它,而是写到附加它的buffer ? 这能回答你的问题吗? What is the difference between framebuffer and image in Vulkan? 【参考方案1】:

Vulkan 中的对象与 API 所暗示的差不多。 VkFramebuffer 不会(直接)附加到任何 VkDeviceMemory 分配,因此它显然不是“用于存储像素数据的一块内存”。 Vulkan 规范非常简单地列出了VkFramebuffer 的角色:

帧缓冲区表示渲染通道实例使用的特定内存附件的集合。

这就是它们所做的一切:它们保存特定渲染通道实例将使用的所有图像附件。

【讨论】:

非常感谢,这个答案很清楚,但是如果是这样,为什么我在shader中通过texture2D()得到了绑定到Framebuffer的Image的像素而不是实时的像素渲染的是前一帧的像素,也就是说这个像素不是直接写入Image的吗?中间有个buffer吧? @AndLightLight:我不明白你的意思。而且由于我看不到您的代码,因此我无法告诉您为什么会发生您所描述的事情。

以上是关于帧缓冲区在 Vulkan 中究竟是啥意思的主要内容,如果未能解决你的问题,请参考以下文章

Vulkan Tutorial 15 Framebuffers

我的帧缓冲区有啥问题?

Vulkan Tutorial 13 Render passes

快速交换帧缓冲区 OpenGL

缓存是什么意思?

Linux 帧缓冲图形和 VSync