EkB*_*mYe 12 image framebuffer vulkan
我知道framebuffer是渲染管道的最终目的地,而swapchain包含许多图像.那么这两件事之间的关系是什么?哪一个是实际的渲染目标?帧缓冲区后来是否会在图像视图中附加当前帧的最终图片?如果是这样,它将如何转移?
通过油漆或图表描述这一点会很高兴.
krO*_*oze 27
VkFramebuffer+ VkRenderPass定义渲染目标.
渲染过程定义将使用颜色写入哪个附件.
VkFramebuffer定义VkImageView哪个附件.
VkImageView定义VkImage要使用的部分.
VkImage定义使用哪个VkMemory和texel的格式.
或者可能是相反的顺序:
VkMemory 只是内存中N个字节的序列.
VkImage 对象添加到它,例如有关格式的信息(因此您可以通过纹素而不是字节来寻址).
VkImageViewobject帮助选择部分VkImage(如stringView,arrayView或whathaveyou)也可以帮助匹配某些不兼容的接口(通过动态转换格式).
VkFramebufferVkImageView用附件绑定a .
VkRenderpass定义将绘制哪个附件
所以它不像你不使用图像.你通过Vulkan Framebuffer做到了.
交换链图像与任何其他图像没有区别.除了驱动程序是图像的所有者.你不能直接销毁它或自己分配它.您只需在获取和当前操作之间从驱动程序借用它.
为了缓冲和提前渲染,有(通常)更多的交换链图像.AFAIK你需要VkFramebuffer为每张图片单独拍摄(这很烦人,但更适合下面的实际情况).
(这里肯定有一个漂亮的图表.也许以后......)
Vulkan规范中描述帧缓冲区的最佳单句可能是:
在VkFramebuffer对象中指定了将用于附件的特定图像视图及其尺寸。
是的,VkFramebuffer交换链中的每个图像都需要一个对象,但是通常只需要VkMemory为一个深度缓冲区分配一个对象VkImage,然后VkImageView将该单个深度缓冲区的对象添加VkImage到所有帧缓冲区中。