@@ -72,21 +72,21 @@ Il nous faut aussi mettre à jour les appels.
7272```c++
7373createImage(swapChainExtent.width, swapChainExtent.height, 1, depthFormat, VK_IMAGE_TILING_OPTIMAL, VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, depthImage, depthImageMemory);
7474...
75- createImage(texWidth, texHeight, mipLevels, VK_FORMAT_R8G8B8A8_SRGB , VK_IMAGE_TILING_OPTIMAL, VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_SAMPLED_BIT, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, textureImage, textureImageMemory);
75+ createImage(texWidth, texHeight, mipLevels, VK_FORMAT_R8G8B8A8_UNORM , VK_IMAGE_TILING_OPTIMAL, VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_SAMPLED_BIT, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, textureImage, textureImageMemory);
7676```
7777
7878``` c++
7979swapChainImageViews[i] = createImageView(swapChainImages[i], swapChainImageFormat, VK_IMAGE_ASPECT_COLOR_BIT, 1 );
8080...
8181depthImageView = createImageView(depthImage, depthFormat, VK_IMAGE_ASPECT_DEPTH_BIT, 1 );
8282...
83- textureImageView = createImageView(textureImage, VK_FORMAT_R8G8B8A8_SRGB , VK_IMAGE_ASPECT_COLOR_BIT, mipLevels);
83+ textureImageView = createImageView(textureImage, VK_FORMAT_R8G8B8A8_UNORM , VK_IMAGE_ASPECT_COLOR_BIT, mipLevels);
8484```
8585
8686``` c++
8787transitionImageLayout (depthImage, depthFormat, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, 1);
8888...
89- transitionImageLayout(textureImage, VK_FORMAT_R8G8B8A8_SRGB , VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, mipLevels);
89+ transitionImageLayout(textureImage, VK_FORMAT_R8G8B8A8_UNORM , VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, mipLevels);
9090```
9191
9292## Génération des mipmaps
@@ -102,12 +102,12 @@ création de l'image.
102102
103103```c++
104104...
105- createImage(texWidth, texHeight, mipLevels, VK_FORMAT_R8G8B8A8_SRGB , VK_IMAGE_TILING_OPTIMAL, VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_SAMPLED_BIT, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, textureImage, textureImageMemory);
105+ createImage(texWidth, texHeight, mipLevels, VK_FORMAT_R8G8B8A8_UNORM , VK_IMAGE_TILING_OPTIMAL, VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_SAMPLED_BIT, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, textureImage, textureImageMemory);
106106...
107107```
108108
109109Comme pour les autres opérations sur les images, la commande ` vkCmdBlitImage ` dépend de l'organisation de l'image sur
110- laquelle elle opère. Nous pourrions transitionner l'image vers ` VK_IMAGE_LAYOUT_GENERAL ` , mais les opérations
110+ laquelle elle opère. Nous pourrions transitionner l'image vers ` VK_IMAGE_LAYOUT_GENERAL ` , mais les opérations
111111prendraient beaucoup de temps. En fait il est possible de transitionner les niveaux de mipmaps indépendemment les uns
112112des autres. Nous pouvons donc mettre l'image initiale à ` VK_IMAGE_LAYOUT_TRANSFER_SCR_OPTIMAL ` et la chaîne de mipmaps
113113à ` VK_IMAGE_LAYOUT_DST_OPTIMAL ` . Nous pourrons réaliser les transitions à la fin de chaque opération.
@@ -118,7 +118,7 @@ donc devoir écrire quelque commandes liées aux barrières de pipeline. Supprim
118118
119119``` c++
120120...
121- transitionImageLayout (textureImage, VK_FORMAT_R8G8B8A8_SRGB , VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, mipLevels);
121+ transitionImageLayout (textureImage, VK_FORMAT_R8G8B8A8_UNORM , VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, mipLevels);
122122 copyBufferToImage(stagingBuffer, textureImage, static_cast<uint32_t>(texWidth), static_cast<uint32_t>(texHeight));
123123//transitionné vers VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL lors de la generation des mipmaps
124124...
@@ -266,7 +266,7 @@ n'a jamais servie de source à une copie.
266266Appelez finalement cette fonction depuis `createTextureImage` :
267267
268268```c++
269- transitionImageLayout(textureImage, VK_FORMAT_R8G8B8A8_SRGB , VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, mipLevels);
269+ transitionImageLayout(textureImage, VK_FORMAT_R8G8B8A8_UNORM , VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, mipLevels);
270270 copyBufferToImage(stagingBuffer, textureImage, static_cast<uint32_t>(texWidth), static_cast<uint32_t>(texHeight));
271271//transions vers VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL pendant la génération des mipmaps
272272...
@@ -287,7 +287,7 @@ Ajoutez d'abord un paramètre qui indique le format de l'image :
287287void createTextureImage () {
288288 ...
289289
290- generateMipmaps (textureImage, VK_FORMAT_R8G8B8A8_SRGB , texWidth, texHeight, mipLevels);
290+ generateMipmaps (textureImage, VK_FORMAT_R8G8B8A8_UNORM , texWidth, texHeight, mipLevels);
291291}
292292
293293void generateMipmaps (VkImage image, VkFormat imageFormat, int32_t texWidth, int32_t texHeight, uint32_t mipLevels) {
@@ -331,7 +331,7 @@ dans le fichier avec l'image de base. Le chargement de mipmaps prégénérées e
331331
332332Un objet ` VkImage ` contient les données de l'image et un objet ` VkSampler ` contrôle la lecture des données pendant le
333333rendu. Vulkan nous permet de spécifier les valeurs ` minLod ` , ` maxLod ` , ` mipLodBias ` et ` mipmapMode ` , où "Lod" signifie
334- * level of detail* (* niveau de détail* ). Pendant l’ échantillonnage d'une texture, le sampler sélectionne le niveau de
334+ * level of detail* (* niveau de détail* ). Pendant l' échantillonnage d'une texture, le sampler sélectionne le niveau de
335335mipmap à utiliser suivant ce pseudo-code :
336336
337337``` c++
@@ -372,15 +372,15 @@ Pour voir les résultats de ce chapitre, nous devons choisir les valeurs pour `t
372372void createTextureSampler () {
373373 ...
374374 samplerInfo.mipmapMode = VK_SAMPLER_MIPMAP_MODE_LINEAR;
375- samplerInfo.minLod = 0;
375+ samplerInfo.minLod = 0.0f ;
376376 samplerInfo.maxLod = static_cast<float>(mipLevels);
377- samplerInfo.mipLodBias = 0; // Optionnel
377+ samplerInfo.mipLodBias = 0.0f ; // Optionnel
378378 ...
379379}
380380```
381381
382- Pour utiliser la totalité des niveaux de mipmaps, nous mettons ` minLod ` à ` 0 ` et ` maxLod ` au nombre de niveaux de
383- mipmaps. Nous n'avons aucune raison d'altérer ` lod ` avec ` mipLodBias ` , alors nous pouvons le mettre à ` 0 ` .
382+ Pour utiliser la totalité des niveaux de mipmaps, nous mettons ` minLod ` à ` 0.0f ` et ` maxLod ` au nombre de niveaux de
383+ mipmaps. Nous n'avons aucune raison d'altérer ` lod ` avec ` mipLodBias ` , alors nous pouvons le mettre à ` 0.0f ` .
384384
385385Lancez votre programme et vous devriez voir ceci :
386386
@@ -391,7 +391,7 @@ différences.
391391
392392![ ] ( /images/mipmaps_comparison.png )
393393
394- La différence la plus évidente est le texte sur le paneau, plus lisse avec les mipmaps.
394+ La différence la plus évidente est l'écriture sur le paneau, plus lisse avec les mipmaps.
395395
396396Vous pouvez modifier les paramètres du sampler pour voir l'impact sur le rendu. Par exemple vous pouvez empêcher le
397397sampler d'utiliser le plus haut nivau de mipmap en ne lui indiquant pas le niveau le plus bas :
@@ -406,4 +406,4 @@ Ce paramètre produira ce rendu :
406406
407407[ Code C++] ( /code/28_mipmapping.cpp ) /
408408[ Vertex shader] ( /code/26_shader_depth.vert ) /
409- [ Fragment shader] ( /code/26_shader_depth.frag )
409+ [ Fragment shader] ( /code/26_shader_depth.frag )
0 commit comments