描述多通道渲染的附件

时间:2017-07-27 17:48:44

标签: c++ render renderer vulkan

我正在尝试在vulkan中创建一个延迟渲染器,其中包含一个renderpass和两个子遍。第一个应该是填充G-Buffer的几何通道,第二个应该是应用光照的着色通道。现在的问题是我无法理解如何描述VkRenderPassCreateInfo中子通道之间的依赖关系。

VkRenderPassCreateInfo有一个字段:

pAttachments指向描述附件属性的attachmentCountVkAttachmentDescription个结构数组,如果NULL为零,则为attachmentCount

但是VkSubpassDescription有一个字段:

pColorAttachments是一个colorAttachmentCount VkAttachmentReference结构数组,列出了哪些渲染通道的附件将用作子通道中的颜色附件,以及每个附件在哪个布局中子通道。数组的每个元素对应一个片段着色器输出位置,即如果着色器声明了输出变量layout(location=X),那么它使用pColorAttachments[X]中提供的附件

据我所知,pColorAttachments的{​​{1}}声明了每个传递输出的布局。所以在我的例子中,第一个子通道将有4个输出:1个位置,1个法线,1个镜面和1个深度附件。第二个子通道有1个输出:屏幕上显示的颜色。如果是这样,那么VkSubpassDescription中的pAttachments字段的目的是什么?

1 个答案:

答案 0 :(得分:3)

渲染过程定义附件; subpasses reference 他们。这就是结构被调用的原因:VkAttachmentReference;它引用了渲染过程定义的附件。渲染过程定义了带有VkAttachmentDescription个对象数组的附件。 VkAttachmentReference只是该数组的索引。

渲染过程中可以拥有的附件数量有一个硬性限制,以及单个子过程可以使用的附件数量。