What is the difference between framebuffer and image in Vulkan?

旧巷老猫 提交于 2019-12-03 02:25:35
  • VkFramebuffer + VkRenderPass defines the render target.

  • Render pass defines which attachment will be written with colors.

  • VkFramebuffer defines which VkImageView is to be which attachment.

  • VkImageView defines which part of VkImage to use.

  • VkImage defines which VkMemory is used and a format of the texel.


Or maybe in opposite sequence:

  • VkMemory is just a sequence of N bytes in memory.

  • VkImage object adds to it e.g. information about the format (so you can address by texels, not bytes).

  • VkImageView object helps select part of the VkImage (like stringView, arrayView or whathaveyou) also can help to match to some incompatible interface (by converting format on the fly).

  • VkFramebuffer binds a VkImageView with an attachment.

  • VkRenderpass defines which attachment will be drawn into

So it's not like you do not use an image. You do, through the Vulkan Framebuffer.

Swapchain image is no different from any other image. Except that the driver is the owner of the image. You can't destroy it directly or allocate it yourself. You just borrow it from the driver for the duration between acquire and present operation.

There's (usually) more of the swapchain images for the purposes of buffering and advance rendering. AFAIK you would need a separate VkFramebuffer for each image (which is annoying, but more in tune with what actually happens underneath).

(There's definitely a pretty diagram in this. Maybe later...)

Probably the best single sentence from the Vulkan spec that describes framebuffers is:

The specific image views that will be used for the attachments, and their dimensions, are specified in VkFramebuffer objects.

Yes, you would need a VkFramebuffer object for each image in a swapchain, but you generally would need to allocate only one VkMemory for a depth buffer VkImage and then add the VkImageView for that single depth buffer VkImage to all of your framebuffers.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!