“VkPipelineColorBlendAttachmentState 包含每个附加帧缓冲区的配置”是什么意思?

Nor*_*r-s 4 vulkan

我阅读了颜色混合Vulkan 教程。

这个页面说:

第一个结构体 VkPipelineColorBlendAttachmentState 包含每个附加帧缓冲区的配置,第二个结构体 VkPipelineColorBlendStateCreateInfo 包含全局颜色混合设置。在我们的例子中,我们只有一个帧缓冲区

第二个结构引用所有帧缓冲区的结构数组

然而,在帧缓冲区一章中,创建了与 imageView 数量一样多的帧缓冲区。

但与之相关的代码是相同的。

并且每帧缓冲区结构没有与帧缓冲区相关的成员。

如何将颜色混合附件附加到帧缓冲区?

我的猜测是,在记录命令时(即渲染通道开始时),它会通过 VkFramebufferCreateInfo::pAttachments 自动附加,对吗?

或者通过 VkSubpassDescription::pColorAttachments ?

因为规范说:

AttachmentCount 的值必须大于使用此管道的子通道的 VkSubpassDescription::pColorAttachments 或 VkSubpassDescription2::pColorAttachments 中非 VK_ATTACHMENT_UNUSED 的所有颜色附件的索引。

Nic*_*las 6

有时,教程不使用正确的措辞。这是其中之一。

回想一下,管道是针对特定渲染通道的特定子通道构建的。另请记住,子通道具有一个(除其他外)颜色附件列表,这些附件代表该子通道中渲染操作的渲染目标。

本教程的意思VkPipelineColorBlendAttachmentState定义管道指定的子通道中特定附件的混合状态。结构体数组VkPipelineColorBlendAttachmentState反映了正在为其构建管道的子通道中使用的颜色附件数组。因此 的第三个元素对应于为其构建管道的子通道的VkPipelineColorBlendStateCreateInfo::pAttachments第三个元素。VkSubpassDescription::pColorAttachments

由于某种原因,本教程将这些附件称为“附加帧缓冲区”,因为这绝对是错误的术语。它们只是附件。

帧缓冲区提供在开始渲染通道时将用作附件的图像。但管道并不(真正)关心您使用什么图像对象。它关心您正在谈论的子通道中的颜色附件。