Vulkan - 两个不同的 finalLayout 是否需要两个不同的 RenderPass?
Vulkan - Is there need for two different RenderPasses for two different finalLayouts?
vulkan Renderpass 对象也定义了渲染目标在渲染过程完成时转换到的最终布局。
假设我有一个用于执行渲染任务 A 的 renderpass,但在一种情况下我需要在屏幕上表示结果(最终布局然后是 VK_IMAGE_LAYOUT_PRESENT_SRC_KHR),而在其他情况下我需要让它准备好进行另一次渲染(最终布局布局是 VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL),
是否需要为这两种情况创建两个 renderpass 对象?
渲染过程也有初始布局,它指定图像在渲染过程开始之前所处的布局。这与为每个子通道定义的布局相结合,导致渲染通道系统为各种子通道执行隐式布局转换。
所以您需要做的就是告诉第二个渲染通道附件将在当前布局中,并适当地设置子通道布局。当然,附件的加载操作应该是加载数据而不是清除数据或其他任何东西。
好的,感谢@Nicol Bolas 我明白我在这里遗漏了什么,为了避免其他新手也犯这个错误,我在这里解释一下我的错误。
创建管道时需要将 renderpass 句柄设置为 VkGraphicsPipelineCreateInfo::renderPass。
像我这样的菜鸟理解,就是创建了一个renderpass,加上一个pipeline,只能用这个pipeline渲染。这是绝对不正确的。此参数仅告知管线应在何种类型的 renderpass(渲染目标排列)上渲染。但是 renderpass 没有耦合到这个管道。可以使用不同的管线在同一个渲染通道中进行绘制,一个管线可以与不同的渲染通道一起使用,只要这些渲染通道具有与创建管线所依据的结构相似的结构即可。
所以关于我在这个 post 中的问题 - 不需要两条管线,但我们可以使用相同的管线供两个渲染通道使用。
vulkan Renderpass 对象也定义了渲染目标在渲染过程完成时转换到的最终布局。 假设我有一个用于执行渲染任务 A 的 renderpass,但在一种情况下我需要在屏幕上表示结果(最终布局然后是 VK_IMAGE_LAYOUT_PRESENT_SRC_KHR),而在其他情况下我需要让它准备好进行另一次渲染(最终布局布局是 VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL), 是否需要为这两种情况创建两个 renderpass 对象?
渲染过程也有初始布局,它指定图像在渲染过程开始之前所处的布局。这与为每个子通道定义的布局相结合,导致渲染通道系统为各种子通道执行隐式布局转换。
所以您需要做的就是告诉第二个渲染通道附件将在当前布局中,并适当地设置子通道布局。当然,附件的加载操作应该是加载数据而不是清除数据或其他任何东西。
好的,感谢@Nicol Bolas 我明白我在这里遗漏了什么,为了避免其他新手也犯这个错误,我在这里解释一下我的错误。
创建管道时需要将 renderpass 句柄设置为 VkGraphicsPipelineCreateInfo::renderPass。
像我这样的菜鸟理解,就是创建了一个renderpass,加上一个pipeline,只能用这个pipeline渲染。这是绝对不正确的。此参数仅告知管线应在何种类型的 renderpass(渲染目标排列)上渲染。但是 renderpass 没有耦合到这个管道。可以使用不同的管线在同一个渲染通道中进行绘制,一个管线可以与不同的渲染通道一起使用,只要这些渲染通道具有与创建管线所依据的结构相似的结构即可。
所以关于我在这个 post 中的问题 - 不需要两条管线,但我们可以使用相同的管线供两个渲染通道使用。