c++ - 描述多 channel 渲染的附件

标签 c++ render renderer vulkan

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

VkRenderPassCreateInfo有一个字段:

pAttachments指向 attachmentCount 的数组数量VkAttachmentDescription描述附件属性的结构,或 NULL如果attachmentCount为零。

但是 VkSubpassDescription有一个字段:

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

据我了解 pColorAttachmentsVkSubpassDescription声明每遍输出的布局。所以在我的示例中,第一个子 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/

相关文章:

C++ 错误报告接口(interface)

javascript - react 路由器组件不呈现

c# - GameObject.renderer 弃用

c++ - 断言动态消息?

c++ - 什么时候应该使用 static_cast、dynamic_cast、const_cast 和 reinterpret_cast?

R Shiny -为同一分析渲染多个输出

android - Opengl-es手动调用onDrawFrame

java - 当我设置 Object.class 时,JTable DefaultCellRenderer 不适用于 BigDecimal 类型

c++ - 将最令人烦恼的解析强制消歧为函数声明

javascript - MeteorJS - 为什么数据更改时我的页面不重新渲染?