2017-07-27 52 views
1

我想在一个renderpass和两个sub-pass的vulkan中创建一个延迟渲染器。第一个应该是用于填充G-Buffer的几何通道,第二个应该是用于应用照明的阴影通道。现在的问题是,我无法围绕如何描述VkRenderPassCreateInfo中的子路径之间的依赖关系。描述多通道渲染的附件

VkRenderPassCreateInfo具有场:

pAttachments点的数目attachmentCount描述附件的属性,或者如果NULLattachmentCountVkAttachmentDescription结构的阵列。

VkSubpassDescription具有场:

pColorAttachmentscolorAttachmentCountVkAttachmentReference结构的数组,该目录将渲染过程的附件将被用作在subpass颜色的附件,并在每一个附件将在什么布局子通道。该数组的每个元素对应于一个片段着色器输出位置,即,如果着色器声明一个输出变量layout(location=X)然后它使用在pColorAttachments[X]

提供的附接所以我理解的VkSubpassDescriptionpColorAttachments申报的输出的布局每次通过。所以在我的例子中,第一个子通道将有4个输出:1个位置,1个正常,1个镜面和1个深度附件。第二个子通道有1个输出:显示在屏幕上的颜色。如果这是真的,VkRenderPassCreateInfopAttachments字段的用途是什么?

回答

3

渲染通道定义附件;它们分别是参考。这就是为什么该结构被称为:VkAttachmentReference;它引用由渲染通道定义的附件。渲染通道定义了具有VkAttachmentDescription对象数组的附件。 VkAttachmentReference只是该数组的索引。

对渲染过程中可以具有的附件数量以及单个子通道可以使用的附件数量有严格的限制。

+0

因此,renderpass指定了附件的总量和类型,并且子路径只是引用它们将使用的那些。非常感谢你。 – Dynamitos

+0

没错。这就是为什么当您创建帧缓冲区时,它的图像对应于渲染通道的附件(用'VkAttachmentDescription'对象数组指定的附件)。 – Ekzuzy