我正在尝试使用一个渲染 channel 和两个子 channel 在 vulkan 中创建一个延迟渲染器。第一个应该是填充 G-Buffer 的几何 channel ,第二个应该是应用光照的着色 channel 。现在的问题是我无法理解我应该如何描述 VkRenderPassCreateInfo
中子 channel 之间的依赖关系。 .
VkRenderPassCreateInfo
有一个字段:
pAttachments
指向 attachmentCount
的数组数量VkAttachmentDescription
描述附件属性的结构,或 NULL
如果attachmentCount
为零。
但是 VkSubpassDescription
有一个字段:
pColorAttachments
是 colorAttachmentCount
的数组VkAttachmentReference
列出哪些渲染 channel 的附件将用作子 channel 中的颜色附件的结构,以及每个附件在子 channel 中的布局。数组的每个元素对应于一个片段着色器输出位置,即如果着色器声明了一个输出变量 layout(location=X)
然后它使用 pColorAttachments[X]
中提供的附件
据我了解 pColorAttachments
的 VkSubpassDescription
声明每遍输出的布局。所以在我的示例中,第一个子 channel 将有 4 个输出:1 个位置、1 个法线、1 个镜面反射和 1 个深度附件。第二个子 channel 将有 1 个输出:屏幕上显示的颜色。如果这是真的,那么 pAttachments
的目的是什么? VkRenderPassCreateInfo
中的字段?
最佳答案
渲染 channel 定义附件;子传递 reference 它们。这就是为什么结构被称为:VkAttachmentReference
;它引用由渲染过程定义的附件。渲染过程使用 VkAttachmentDescription
对象数组定义附件。 VkAttachmentReference
只是该数组的索引。
渲染 channel 中可以拥有的附件数量以及单个子 channel 可以使用的附件数量都有硬性限制。
关于c++ - 描述多 channel 渲染的附件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45357742/