image - Vulkan 中的帧缓冲区和图像有什么区别?

标签 image framebuffer vulkan

我知道帧缓冲区是渲染管道的最终目的地,交换链包含许多图像。那么这两件事之间是什么关系呢?哪个是实际的渲染目标?并且framebuffer稍后会在image view上附加当前帧的最终图片吗?如果是,它将如何转移?

通过油漆或图表来描述这一点会很高兴。

最佳答案

  • VkFramebuffer + VkRenderPass定义渲染目标。
  • 渲染 channel 定义了哪个附件将被写入颜色。
  • VkFramebuffer定义哪个 VkImageView是要成为哪个依恋。
  • VkImageView定义 VkImage 的哪一部分使用。
  • VkImage定义哪个 VkMemory使用和纹素的格式。


  • 或者可能以相反的顺序:
  • VkMemory只是内存中 N 个字节的序列。
  • VkImage对象添加到它,例如有关格式的信息(因此您可以通过纹素而不是字节来寻址)。
  • VkImageView object 有助于仅选择 VkImage 的一部分(数组或 mip) (如 stringView、arrayView 或你所做的)。还可以帮助匹配一些不兼容的接口(interface)(通过类型转换格式)。
  • VkFramebuffer绑定(bind)一个 VkImageView带附件。
  • VkRenderpass定义将被绘制到
  • 中的附件

    所以这不像你不使用图像。你可以通过 Vulkan Framebuffer 做到这一点。

    交换链图像与任何其他图像没有什么不同。除了司机是图像的所有者。您不能直接销毁它或自己分配它。您只需在获取和当前操作之间的持续时间内从驱动程序中借用它。

    出于缓冲和提前渲染的目的,(通常)有更多的交换链图像。 AFAIK 你需要一个单独的 VkFramebuffer对于每个图像( 烦人,但更符合下面实际发生的情况)。

    enter image description here

    关于image - Vulkan 中的帧缓冲区和图像有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39557141/

    相关文章:

    html - CSS Accordion 图片不显示在 WordPress 网站上

    ios - 深度纹理作为颜色附件

    java - 如何在 libgdx 中重用帧缓冲区纹理

    vulkan - 为什么有些命令只能在渲染过程之外记录?

    android - 使用 WINGDING.ttf 字体在 Canvas 上绘制文本在 Android 上不起作用

    php - Magento 1.9 fatal error Mage_Configurableswatches_Helper_Productimg' 找不到

    framebuffer - android framebuffer和linux framebuffer的区别

    c - Vulkan - 同步对单个缓冲区的访问

    vulkan - 在 Vulkan 中混合时的首选格式

    jQuery.Cycle 在第一次加载时显示小图像