匿名用户

如果您将场景和UI渲染分成不同的不同渲染通道,您需要告诉第一个渲染通道的颜色附件以保留内容,而第二个渲染通道UI加载帧缓冲区的内容。

VK_ATTACHMENT_LOAD_OP_CLEARloadOp

因此,在您的场景中,您需要在第一次传递中存储内容,以确保不会由于优化而丢弃这些内容:

std::array<VkAttachmentDescription, 2> attachments = {};
// Attachment 0 = Color attachment
attachments[0].storeOp = VK_ATTACHMENT_STORE_OP_STORE;
...

在第二次渲染过程中,需要将其设置为加载以前的内容:

std::array<VkAttachmentDescription, 2> attachments = {};
// Attachment 0 = Color attachment
attachments[0].loadOp = VK_ATTACHMENT_LOAD_OP_LOAD;
...

如果提交多个命令缓冲区,还需要通过使用适当的同步原语(如信号量或管道屏障)(例如通过renderpass的子过程隐式)来确保正确的命令顺序。

另一种可能更简单的方法(取决于您的设置)是简单地将UI渲染添加到与场景渲染相同的命令缓冲区中。这样您只需在场景几何之上渲染您的UI而无需同步。尽管这可能不是所有用例的选项。或者您可以使用子通道,包括(重)渲染通道。