2017-07-27 2 views
1

J'essaye de créer un rendu différé dans vulkan avec un renderpass et deux sous-passes. Le premier devrait être le passage de géométrie pour remplir le G-Buffer et le second devrait être la passe d'ombrage pour appliquer l'éclairage. Le problème est maintenant que je ne peux pas comprendre comment je devrais décrire les dépendances entre les sous-classes dans le VkRenderPassCreateInfo.Décrire les pièces jointes pour le rendu multipass

Le VkRenderPassCreateInfo a un champ:

pAttachments pointe vers un tableau de attachmentCount nombre de VkAttachmentDescription structures décrivant les propriétés des pièces jointes ou NULL si attachmentCount est égal à zéro.

Mais le VkSubpassDescription a un champ:

pColorAttachments est un tableau de colorAttachmentCountVkAttachmentReference structures qui répertorie des pièces jointes du passage rendu sera utilisé comme pièces jointes de couleur dans la subpass, et que la mise en page chaque pièce jointe sera en cours le subpass. Chaque élément du tableau correspond à un emplacement de sortie de fragment shader, à savoir si le shader a déclaré une variable de sortie layout(location=X) il utilise l'accessoire fourni dans pColorAttachments[X]

donc à ma compréhension de la pColorAttachments du VkSubpassDescription déclarer la mise en page de la sortie chaque passe. Donc dans mon exemple, le premier subpass aurait 4 sorties: 1 position, 1 normale, 1 spéculaire et 1 profondeur. Et le second subpass aurait 1 sortie: la couleur qui est affichée sur l'écran. Si tel est le cas, quel est le but du champ pAttachments dans le champ ?

Répondre

3

Les passes de rendu définissent les pièces jointes; sous-classes référence eux. C'est pourquoi la structure est appelée: VkAttachmentReference; il référence une pièce jointe définie par le rendu. La passe de rendu définit les pièces jointes avec un tableau d'objets VkAttachmentDescription. Le VkAttachmentReference est juste un index dans ce tableau.

Il existe une limite stricte au nombre de pièces jointes que vous pouvez avoir dans un rendu, ainsi qu'au nombre de pièces jointes qu'un sous-passe individuel peut utiliser.

+0

Ainsi, le renderpass spécifie la quantité totale et le type de pièces jointes et les sous-classes ne font que référence à celles qu'elles utiliseront. Merci beaucoup. – Dynamitos

+0

C'est vrai. C'est pourquoi, lorsque vous créez un framebuffer, ses images correspondent aux attachements du pass de rendu (ceux spécifiés avec un tableau d'objets 'VkAttachmentDescription'). – Ekzuzy