VkPipelineColorBlendAttachmentState逐帧缓冲区配置含义及绑定方式咨询
你的两个猜想都不准确,颜色混合配置与帧缓冲区的对应关系是通过渲染通道的附件索引体系间接串联的,三者的绑定逻辑分层如下:
VkPipelineColorBlendAttachmentState数组的索引,和当前绑定管线的子通道的颜色附件槽位索引 严格一一对应。你引用的Vulkan规范条文的要求本质是:管线的颜色混合配置数组长度,必须足够覆盖该子通道用到的所有颜色附件槽位。比如数组的第0个元素,就对子通道VkSubpassDescription::pColorAttachments[0]指向的附件生效,第1个元素对pColorAttachments[1]生效,以此类推。- 子通道
VkSubpassDescription::pColorAttachments数组中存储的是渲染通道(VkRenderPass)全局附件描述数组的索引,而非帧缓冲区的索引。比如pColorAttachments[0] = 1,就表示子通道的0号颜色槽位,使用的是渲染通道附件描述数组中索引为1的附件的配置。 - 帧缓冲区
VkFramebufferCreateInfo::pAttachments数组的索引,和绑定的渲染通道的全局附件描述数组的索引 严格一一对应。比如pAttachments[1]对应的ImageView,就专供渲染通道附件索引为1的附件使用,刚好匹配上文中子通道0号颜色槽位引用的附件。
你按imageView数量创建的多个帧缓冲区,都是兼容同一个渲染通道的,因此它们的pAttachments顺序完全和渲染通道的附件描述顺序对齐,对应索引的附件格式、用途完全一致,所以不需要为不同的帧缓冲区单独修改颜色混合配置。你之前看到的教程中“每个绑定帧缓冲区的配置”属于表述歧义,准确来说是「每个子通道颜色槽位对应附件的混合配置」,只要渲染通道的子通道附件配置不变,同一份管线颜色混合配置可以用于所有兼容该渲染通道的帧缓冲区。
内容的提问来源于stack exchange,提问作者Nor-s
相关产品推荐
相关产品推荐

