【问题标题】:Vulkan render to textureVulkan 渲染到纹理
【发布时间】:2020-04-07 20:40:26
【问题描述】:

在现有的在交换链中绘制几何图形的渲染器中,我需要在纹理中渲染该几何图形的某些部分,其他部分必须保留在屏幕上。所有几何图形都记录在一个命令缓冲区中。我不需要每次都渲染这个纹理。 我创建了目标图像、图像视图和帧缓冲区,但我不知道现在该做什么。 我认为我不需要特定的管道,也不需要新的特定描述符集,因为所有内容都正确呈现在屏幕上。 我是否需要另一个渲染通道、子通道或其他任何东西?

【问题讨论】:

    标签: vulkan render-to-texture


    【解决方案1】:

    确实,您需要一个单独的渲染通道来填充您的目标图像。由于渲染通道存储了对图像的引用(作为附件),因此需要一个单独的引用。

    在该渲染通道中,您可以使用子通道依赖项将目标图像转换为正确的布局。您的第一个转换应该是 VK_ACCESS_SHADER_READ_BIT 到 VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT 用于写入目标图像,一旦完成,您就可以从 VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT 转换回 VK_ACCESS_SHADER_READ_BIT 以便您可以例如在视觉通道中渲染您的目标图像。如果设备支持,另一种方法是将它们传送到交换链。

    如果需要参考,可以查看my offscreen rendering sample。

    【讨论】:

    • 谢谢萨沙。我已经阅读了您的示例,但我对它的理解还不够。我只看到一个对 vkCreateRenderPass() 的调用,我天真地等待着另一个。而且我很难分辨哪个部分用于主渲染通道,哪个部分用于子通道。因此,如何使子通道可选?
    • 主渲染通道是在 Vulkan Sample 基类中创建的。该示例不使用子通道。它使用两个单独的渲染通道。
    猜你喜欢
    • 2016-08-14
    • 2023-01-20
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多