11## Introduction
22
3- L'objet ` VkDescriptorSetLayout ` que nous avons créé au chapitre précédent décrit les descripteurs que nous devons lier
4- pour les opérations de rendu. Dans ce chapitre nous allons créer les véritables sets de descripteurs, un pour chaque
5- ` VkBuffer ` , afin que nous puissions chacun les lier au descripteur UBO.
3+ L'objet ` VkDescriptorSetLayout ` que nous avons créé dans le chapitre précédent décrit les descripteurs que nous devons
4+ lier pour les opérations de rendu. Dans ce chapitre nous allons créer les véritables sets de descripteurs, un pour
5+ chaque ` VkBuffer ` , afin que nous puissions chacun les lier au descripteur de l' UBO côté shader .
66
77## Pool de descripteurs
88
@@ -43,15 +43,15 @@ poolInfo.poolSizeCount = 1;
4343poolInfo.pPoolSizes = &poolSize;
4444```
4545
46- Nous devons aussi spécifier le nombre maximum de sets de descriptors que nous sommes susceptibles d'allouer.
46+ Nous devons aussi spécifier le nombre maximum de sets de descripteurs que nous sommes susceptibles d'allouer.
4747
4848``` c++
49- poolInfo.maxSets = static_cast <uint32_t >(swapChainImages.size());;
49+ poolInfo.maxSets = static_cast <uint32_t >(swapChainImages.size());
5050```
5151
5252La stucture possède un membre optionnel également présent pour les command pools. Il permet d'indiquer que les
5353sets peuvent être libérés indépendemment les uns des autres avec la valeur
54- ` VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT ` . Comme nous ne voulons pas toucher aux descripteurs pendant que le
54+ ` VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT ` . Comme nous n'allons pas toucher aux descripteurs pendant que le
5555programme s'exécute, nous n'avons pas besoin de l'utiliser. Indiquez ` 0 ` pour ce champ.
5656
5757``` c++
@@ -60,11 +60,11 @@ VkDescriptorPool descriptorPool;
6060...
6161
6262if (vkCreateDescriptorPool(device, &poolInfo, nullptr , &descriptorPool) != VK_SUCCESS) {
63- throw std::runtime_error("echec lors de la creation de la pool de descripteurs!");
63+ throw std::runtime_error("echec de la creation de la pool de descripteurs!");
6464}
6565```
6666
67- Créez un nouveau membre donnée pour référencer la pool, puis appelez ` vkCreateDescriptorPool ` . La pool doit alors être
67+ Créez un nouveau membre donnée pour référencer la pool, puis appelez ` vkCreateDescriptorPool ` . La pool doit être
6868détruite à la fin du programme, comme la plupart des ressources liées au rendu.
6969
7070``` c++
@@ -77,7 +77,7 @@ void cleanup() {
7777}
7878```
7979
80- ## Set de descriptors
80+ ## Set de descripteurs
8181
8282Nous pouvons maintenant allouer les sets de descipteurs. Créez pour cela la fonction ` createDescriptorSets ` :
8383
@@ -123,13 +123,13 @@ std::vector<VkDescriptorSet> descriptorSets;
123123
124124descriptorSets.resize(swapChainImages.size());
125125if (vkAllocateDescriptorSets(device, &allocInfo, descriptorSets.data()) != VK_SUCCESS) {
126- throw std::runtime_error("echec lors de l'allocation d'un set de descripteurs!");
126+ throw std::runtime_error("echec de l'allocation d'un set de descripteurs!");
127127}
128128```
129129
130130Il n'est pas nécessaire de détruire les sets de descripteurs explicitement, car leur libération est induite par la
131- destruction de la pool. L'appel à ` vkAllocateDescriptorSets ` alloue donc tous les sets, chacun possédant un descripteur
132- de buffer uniform .
131+ destruction de la pool. L'appel à ` vkAllocateDescriptorSets ` alloue donc tous les sets, chacun possédant un unique
132+ descripteur d'UBO .
133133
134134Nous avons créé les sets mais nous n'avons pas paramétré les descripteurs. Nous allons maintenant créer une boucle pour
135135rectifier ce problème :
@@ -152,7 +152,7 @@ for (size_t i = 0; i < swapChainImages.size(); i++) {
152152}
153153```
154154
155- Nous allons utiliser tout le buffer, donc nous pourrions indiquer ` VK_WHOLE_SIZE ` . La configuration des
155+ Nous allons utiliser tout le buffer, il est donc aussi possible d' indiquer ` VK_WHOLE_SIZE ` . La configuration des
156156descripteurs est maintenant mise à jour avec la fonction ` vkUpdateDescriptorSets ` . Elle prend un tableau de
157157` VkWriteDescriptorSet ` en paramètre.
158158
@@ -178,8 +178,8 @@ type en même temps. La fonction commence à `dstArrayElement` et s'étend sur `
178178
179179``` c++
180180descriptorWrite.pBufferInfo = &bufferInfo;
181- descriptorWrite.pImageInfo = nullptr ; // Optionnel
182- descriptorWrite.pTexelBufferView = nullptr ; // Optionnel
181+ descriptorWrite.pImageInfo = nullptr ; // Optionel
182+ descriptorWrite.pTexelBufferView = nullptr ; // Optionel
183183```
184184
185185Le dernier champ que nous allons utiliser est ` pBufferInfo ` . Il permet de fournir ` descriptorCount ` structures qui
@@ -197,8 +197,8 @@ Les mises à jour sont appliquées quand nous appellons `vkUpdateDescriptorSets`
197197## Utiliser des sets de descripteurs
198198
199199Nous devons maintenant étendre `createCommandBuffers` pour qu'elle lie les sets de descripteurs aux descripteurs des
200- shaders avec la commande `cmdBindDescriptorSets`. Il faut invoquer cette commande dans la configuration des buffers de
201- commande avant l'appel à `vkCmdDrawIndexed`.
200+ shaders avec la commande `cmdBindDescriptorSets`. Il faut invoquer cette commande dans l'enregistrement des command
201+ buffers avant l'appel à `vkCmdDrawIndexed`.
202202
203203```c++
204204vkCmdBindDescriptorSets(commandBuffers[i], VK_PIPELINE_BIND_POINT_GRAPHICS, pipelineLayout, 0, 1, &descriptorSets[i], 0, nullptr);
@@ -229,7 +229,7 @@ Maintenant vous devriez voir ceci en lançant votre programme :
229229![ ] ( /images/spinning_quad.png )
230230
231231Le rectangle est maintenant un carré car la matrice de projection corrige son aspect. La fonction ` updateUniformBuffer `
232- traite les redimensionnements d'écran, il n'est donc pas nécessaire de recréer les descripteurs dans
232+ inclut d'office les redimensionnements d'écran, il n'est donc pas nécessaire de recréer les descripteurs dans
233233` recreateSwapChain ` .
234234
235235## Plusieurs sets de descripteurs
@@ -243,8 +243,8 @@ layout(set = 0, binding = 0) uniform UniformBufferObject { ... }
243243```
244244
245245Vous pouvez utiliser cette possibilité pour placer dans différents sets les descripteurs dépendant d'objets et les
246- descripteurs partagés. De cette manière vous éviter de relier une partie des descripteurs, ce qui peut être plus
247- performant.
246+ descripteurs partagés. De cette manière vous éviter de relier constemment une partie des descripteurs, ce qui peut être
247+ plus performant.
248248
249249[Code C++](/code/22_descriptor_sets.cpp) /
250250[Vertex shader](/code/21_shader_ubo.vert) /
0 commit comments