Vulkan渲染至纹理

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

7

确切地说,您需要一个单独的渲染通道来填充目标图像。由于渲染通道将图像存储为附件引用,因此需要一个单独的渲染通道。

在该渲染通道中,您可以使用子通道依赖项将目标图像转换为适当的布局。您的第一次转换应从VK_ACCESS_SHADER_READ_BITVK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT以写入目标图像,完成后您再从VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT转换回VK_ACCESS_SHADER_READ_BIT,这样您就可以在可视化通道中呈现目标图像了。如果设备支持,另一种方法是将它们复制到交换链。

如果您需要参考,可以查看我的离屏渲染示例代码


谢谢Sascha。我已经看了你的示例,但我没有完全理解它。我只看到了一次对vkCreateRenderPass()的调用,我天真地等待着另一个调用。而且我很难分辨哪部分是主渲染通道,哪部分是子通道。因此,如何使子通道可选? - Leon
主渲染通道是在Vulkan示例基类中创建的。该示例不使用子通道,而是使用两个单独的渲染通道。 - Sascha Willems

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接