10000 easy and robust cmake build process. by liudeyuan2021 · Pull Request #295 · Overv/VulkanTutorial · GitHub
[go: up one dir, main page]

Skip to content

easy and robust cmake build process. #295

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 614 commits into
base: main
Choose a base branch
from
Open
Changes from 1 commit
Commits
Show all changes
614 commits
Select commit Hold shift + click to select a range
cf94675
Rephrased Drawing a Triangle -> Pipeline introduction
Jun 14, 2019
01a36cf
Rephrased Drawing a Triangle -> Shader modules
Jun 14, 2019
21d8385
Specified the French name of fixed function stages when saying it fir…
Jun 14, 2019
63cf731
Rephrased Drawing a triangle -> Fixed functions
Jun 15, 2019
29c63f7
Rephrased Drawing a triangle -> Render pass
Jun 15, 2019
4771537
Rephrased Drawing a triangle -> Pipeline conclusion
Jun 15, 2019
0785703
Minor grammar error
Jun 15, 2019
8638db0
Rephrased Drawing a triangle -> Framebuffers
Jun 15, 2019
66c217c
Rephrased Drawing a triangle -> Command buffers
Jun 15, 2019
c42cc20
Rephrased Drawing a triangle -> Rendering and presentation
Jun 15, 2019
b289600
Rephrased Drawing a triangle -> Swap chain recreation
Jun 15, 2019
7e449a0
Rephrased Introduction
Jun 15, 2019
c72a930
Quick last changes to Introduction
Jun 15, 2019
b8800df
Rephrased and renamed Vertex buffer -> Vertex input description
Jun 16, 2019
fd444f8
Rephrased Vertex buffer -> Vertex buffer creation
Jun 16, 2019
c2be500
Rephrased Vertex buffer -> Staging buffer
Jun 16, 2019
1226657
Rephrased Vertex buffer -> Index buffer
Jun 16, 2019
acf60b5
Translated folder names to French
Jun 16, 2019
07e73d3
Rephrased Uniform buffers -> Descriptor layout and buffer
Jun 16, 2019
f2070a3
Rephrased Uniform buffers -> Descriptor pool and sets
Jun 16, 2019
8cd8a2c
Rephrased Uniform buffers -> Images
Jun 16, 2019
e8340d3
Rephrased and renamed Texture mapping -> Image view and sampler
Jun 17, 2019
91557fc
Rephrased and renamed Texture mapping -> Combined image sampler
Jun 17, 2019
f692205
Rephrased and renamed Depth buffer
Jun 17, 2019
f3cd785
Rephrased and renamed Loading models
Jun 17, 2019
dd32c4f
Rephrased and renamed Generating mipmaps
Jun 17, 2019
799d6c9
Rephrased Multisampling
Jun 17, 2019
b5093ef
Rephrased the FAQ
Jun 17, 2019
959284c
Removed inconsistent capital letters in titles
Jun 17, 2019
9223e69
Reworked introduction to be as appealing as possible
Jun 17, 2019
78df325
Caught up with all the updates to the English version
Jun 17, 2019
294e3c3
Added translation of privacy policy
Jun 17, 2019
ab4317f
add generation for multy language
Jun 17, 2019
7a01988
remove BOM from file and remove file from génération of html
Jun 17, 2019
1e0cd32
correct future link for pdf and epub
Jun 17, 2019
7137403
Just a little change in the script to make it nicer
Jun 17, 2019
3ba5990
Change to new theme name
Overv Jul 7, 2019
ecbe631
Change privacy policy to no longer be a special case page for navigation
Overv Jul 7, 2019
5d168d8
Switch to new Daux deployment
Overv Jul 8, 2019
720bc72
Fix privacy policies having extra header and rebuild ebooks
Overv Jul 8, 2019
3917f83
Change validation layer chapter to specify that debug messengers are …
Overv Jul 13, 2019
e0d36fe
Remove outdated section about driver support for VK_PRESENT_MODE_FIFO…
Overv Jul 15, 2019
acd19c8
Change validation layer chapter
Krenodeno Jul 18, 2019
9752a52
Merge pull request #142 from MacGamerFR/patch-4
Overv Jul 18, 2019
10000 c07a344
fix xcode-paths picture
Shikugawa Jul 24, 2019
c70c364
Remove SIMULTANEOUS_USE flag from draw command buffers as this is not…
Overv Jul 24, 2019
5d994f0
Merge pull request #143 from Shikugawa/fix-xcode-paths
Overv Jul 25, 2019
ddb1aa5
Change shader compilation to use glslc rather than glslangvalidator
Overv Jul 28, 2019
4440cad
Update required C++ and compiler version
LesleyLai Jul 29, 2019
46ce27c
Merge pull request #145 from LesleyLai/patch-1
Overv Jul 29, 2019
98e518f
Clarify debug messenger code position
Overv Aug 7, 2019
47b093b
Fix old references to setupDebugCallback
Overv Aug 15, 2019
c5be771
Fix clockwise/counter-clockwise mixup
Overv Aug 22, 2019
439ea47
Clarify use of std::optional (fixes #147)
Overv Aug 24, 2019
f2b4a1c
Drop numeric_limits in favour of limits in stdint.h
Overv Aug 24, 2019
58d73f5
Remove redundant depth image transition
Overv Sep 23, 2019
ceb4199
Remove redundant queueCount checks
Overv Oct 22, 2019
9f66dd1
Fix broken patch of queueCount
Overv Oct 24, 2019
6fcc422
Improve correctness of statement about srcSubpass/dstSubpass requirem…
Overv Oct 25, 2019
a9a88be
Fix frames in flight synchronization edge case
Overv Oct 28, 2019
9d280f3
Update ebooks
Overv Oct 28, 2019
cdb08cf
Fix bad vkResetFences placement in triangle chapter
Overv Nov 3, 2019
9c28de9
Remove superfluous transition from multisampling chapter
Overv Nov 3, 2019
92fe220
Fix logic of getMaxUsableSampleCount
Overv Nov 8, 2019
612b58c
Remove irrelevant flag from draw command buffers
Krenodeno Nov 18, 2019
ac92f02
Use GLSLC instead of GlslangValidator
Krenodeno Nov 18, 2019
7da8898
fix typo
Krenodeno Nov 18, 2019
53b2e68
update C++ compiler requirements
Krenodeno Nov 18, 2019
563f1b0
Fix clockwise/counterclockwise mixup
Krenodeno Nov 18, 2019
3f339d1
clarify use of std::optional
Krenodeno Nov 18, 2019
2f3cf07
remove redundant depth image transition
Krenodeno Nov 18, 2019
37c06ba
improve correctness of subpasses dependencies
Krenodeno Nov 18, 2019
c73725f
Fix frames in flight sync edge case
Krenodeno Nov 18, 2019
beea0d3
fix bad vkResetFences call place
Krenodeno Nov 18, 2019
989b24f
remove superfluous transitions from multisampling
Krenodeno Nov 18, 2019
ef70365
fix logic of getMaxUsaleSampleCount
Krenodeno Nov 18, 2019
2c551bf
Fix possible freeze in recreateSwapChain
Overv Nov 21, 2019
7eb5590
Fix possible freeze in recreateSwapChain
Krenodeno Nov 27, 2019
e4130cb
Merge pull request #155 from MacGamerFR/French-update
Overv Nov 30, 2019
1e7aabb
Update name of vkcube executable
Overv Dec 17, 2019
8a84832
Remove reference to nonexistent Docs directory
Overv Dec 17, 2019
346b497
Note the possibility of validation layer errors rather than increasin…
Overv Jan 7, 2020
bcca3e4
Note the possibility of validation layer errors
Krenodeno Feb 4, 2020
85d6868
Merge pull request #164 from MacGamerFR/patch-5
Overv Feb 4, 2020
2baf477
Update validation layer chapter for newer SDK behaviour
Overv Feb 4, 2020
6f1882c
Fix tutorial mixing up linear and SRGB colors (fixes #163)
Overv Feb 5, 2020
c9151f7
Add link to Java port of the tutorial (#165)
Overv Feb 21, 2020
d22a355
Update tutorial images to correctly represent interpolation in linear…
Overv Mar 15, 2020
56389ad
Update ebooks
Overv Mar 15, 2020
c2b850a
Remove pointless access mask bit (fixes #168)
Overv Mar 17, 2020
f594383
Dev env: Update min compiler requirements for C++17
akien-mga Mar 22, 2020
5032a68
Merge pull request #170 from akien-mga/dev-env-c++17
Overv Mar 23, 2020
f68735c
fix #171 boken links; E-book epub/pdf
usagi Mar 27, 2020
3d6725d
Merge pull request #172 from usagi/fixup-broken-links
Overv Mar 27, 2020
2171557
Code: Use uint32_t for WIDTH and HEIGHT to prevent narrowing conversion
akien-mga Apr 7, 2020
03e8ea7
Merge pull request #174 from akien-mga/WIDTH-HEIGHT-uint32_t
Overv Apr 7, 2020
f81fde8
Fixed some typos
tsonge Apr 16, 2020
b87aa27
Remove unused header and improve C++ wording
vittorioromeo Apr 17, 2020
8358f43
Improve wording and C++ usage
vittorioromeo Apr 17, 2020
238d236
Merge pull request #175 from tsonge/master
Overv Apr 18, 2020
16cb531
Merge pull request #176 from SuperV1234/patch-1
Overv Apr 18, 2020
de17297
Fix wrong texture coordinates in texture mapping chapter
Overv Apr 19, 2020
a55eb00
Fix MacOS paths for the latest version of the SDK
Overv Apr 19, 2020
bfd6ce9
Merge pull request #177 from SuperV1234/patch-2
Overv Apr 19, 2020
64edd11
Optimize newlines (extension of #177)
Overv Apr 19, 2020
1d6b5b0
Change code to use value initialization
Overv Apr 19, 2020
8ce6698
Fix syntax error
Overv Apr 20, 2020
90aa269
Replace example 3D model with permissively licensed one
Overv Apr 28, 2020
a009702
an error in the translate
celestecote21 May 2, 2020
94037f9
Fix typo
morganw-code May 3, 2020
b28aefa
Merge pull request #179 from morganw-code/patch-1
Overv May 3, 2020
724e927
Merge pull request #178 from celestecote21/master
Overv May 3, 2020
426f9d5
Fix wrong VkSamplerCreateInfo type assignments.
pablode May 5, 2020
bbbee1d
Merge pull request #180 from pablode/samplerinfo-type-fix
Overv May 7, 2020
94ece90
Fixed queue family bit name
LittleWhite-tb May 17, 2020
d8d808d
Superfluous semi-colon
LittleWhite-tb May 19, 2020
d69d4b1
Merge pull request #184 from LittleWhite-tb/patch-2
Overv May 19, 2020
420b221
Merge pull request #183 from LittleWhite-tb/patch-1
Overv May 19, 2020
5253cee
fixes typos and several other small defects
LittleWhite-tb May 26, 2020
ecd1343
Fix merge conflict
LittleWhite-tb May 26, 2020
2314752
Fixes my own mistakes
LittleWhite-tb May 26, 2020
a2a2335
Merge branch 'fixes-fr2' of https://github.com/LittleWhite-tb/VulkanT…
Overv May 26, 2020
376bef0
Fix file permissions
Overv May 26, 2020
67a0c45
Merge branch 'LittleWhite-tb-fixes-fr2'
Overv May 26, 2020
2313d5e
Update FAQ link
Overv May 29, 2020
37e4d54
Replace dead link to transformation matrices guide
Overv Jun 3, 2020
bf620e9
fix typo in 01_Swap_chain.md
ericoporto Jun 21, 2020
998d1d1
Merge pull request #190 from ericoporto/patch-1
Overv Jun 21, 2020
1fc78f6
Update 02_Fonctions_fixées.md
Jun 28, 2020
7ba8366
Fix typo
arcturu Jun 28, 2020
d0fe89c
Merge pull request #192 from arcturu/patch-1
Overv Jun 28, 2020
167cd81
Merge pull request #193 from Vorps/patch-1
Overv Jul 20, 2020
4e0f304
Dev env: fix #189; setting up Vulkan on Linux needs updates
abnercoimbre Aug 23, 2020
d975576
Merge pull request #198 from abnercoimbre/master
Overv Aug 25, 2020
03836d5
update french translation of setup chapter
Krenodeno Sep 1, 2020
7a702f0
Merge pull request #199 from Krenodeno/patch-6
Overv Sep 1, 2020
b44f167
fix typos
Krenodeno Sep 8, 2020
47eef7e
Merge pull request #200 from Krenodeno/patch-7
Overv Sep 8, 2020
c895f88
Update screenshot of validation layer message
Overv Sep 8, 2020
d341d5a
Add missing LDFLAGS
Overv Sep 8, 2020
cf13048
Fix typo
maltekliemann Sep 13, 2020
b57e177
Add remark regarding queue type for vkCmdBlitImage
maltekliemann Sep 13, 2020
b697a9f
Merge pull request #205 from maltekliemann/fix/typo-vkCmdBlitImage
Overv Sep 17, 2020
64832b8
Merge pull request #206 from maltekliemann/ref/dedicated-transfer-que…
Overv Sep 17, 2020
661eb79
Remove confusing remark about depthWriteEnable
Overv Sep 17, 2020
2b9b24f
Fix typo
maltekliemann Oct 4, 2020
6c709b8
Fix chooseSwapExtent for HDPI/retina displays
maltekliemann Oct 4, 2020
61ceb30
Merge pull request #208 from maltekliemann/patch-1
Overv Oct 5, 2020
7ff694b
Update FAQ Link
LittleWhite-tb Oct 9, 2020
0fff4b1
Fix typo on function name
LittleWhite-tb Oct 9, 2020
46b4e26
Use french translation for tutorial link
LittleWhite-tb Oct 9, 2020
9d0fe78
Fix typos
LittleWhite-tb Oct 9, 2020
339c48d
Sync with new flags for GLFW
LittleWhite-tb Oct 9, 2020
6fca04a
Add remark regarding queue type
LittleWhite-tb Oct 9, 2020
994b5be
Remove confusing remark about depthWriteEnable
LittleWhite-tb Oct 9, 2020
8f7cc95
Merge pull request #211 from LittleWhite-tb/sync-fr
Overv Oct 10, 2020
f0f4207
Incorporate changes to chooseSwapExtent
maltekliemann Oct 6, 2020
4f9f405
Update GLFW setup instructions for macOS
jpaquim Oct 23, 2020
d2d23cc
Fix description of vkAllocateDescriptorSets error
maltekliemann Oct 27, 2020
af27607
Spelling
Overv Oct 27, 2020
4ece62e
Merge pull request #210 from maltekliemann/fix/hdpi-swapchain-extent
Overv Oct 27, 2020
e7156e6
Merge pull request #212 from jpaquim/patch-1
Overv Oct 27, 2020
6393c07
Fix syntax error in depth chapter (thanks Nic Canning)
Overv Oct 27, 2020
f257236
Merge pull request #213 from maltekliemann/fix/combined-image-sampler…
Overv Oct 28, 2020
1caae48
Fix potential synchronization problem with depth buffer transition an…
Overv Nov 6, 2020
baa107b
Fix mirrored texture coordinates in tutorial (fixes #215)
Overv Nov 12, 2020
e23e906
Add `spirv-tools` package to 02_Development_environment.md
jsgoller1 Nov 22, 2020
6e3e28e
Fix maxSamplerAnisotropy limit not verified (fixes #216)
Overv Nov 29, 2020
a2b2fc3
Merge pull request #218 from jsgoller1/patch-1
Overv Nov 29, 2020
99f5233
Update 00_Window_surface.md
mrsaleh Jan 13, 2021
8f8b0dd
Update 00_Window_surface.md
mrsaleh Jan 13, 2021
444260e
Update 05_window_surface.cpp
mrsaleh Jan 13, 2021
8c972e4
Update 00_Window_surface.md
mrsaleh Jan 13, 2021
e5fc806
Fix french typo
punkymaniac Jan 21, 2021
d80d8f9
Merge pull request #223 from punkymaniac/patch-1
Overv Jan 29, 2021
2c7ccbe
Restore 05_window_surface.cpp
Overv Jan 29, 2021
6c028cf
Update 00_Window_surface.md
Overv Jan 29, 2021
5827414
Merge pull request #222 from mrsaleh/patch-1
Overv Jan 29, 2021
290d65c
Be more explicit about extra include for std::min/std::max (fixes #225)
Overv Feb 20, 2021
7619952
Ensure that imagesInFlight has the right size after swap chain recrea…
Overv Feb 20, 2021
131d519
Add link to VS2019 sample repo
Overv Apr 2, 2021
eca5a20
Add instructions for Fedora setup
bkmgit Apr 8, 2021
7f739dd
Instructions for setup on Fedora in French.
bkmgit Apr 8, 2021
69148cb
Merge pull request #234 from bkmgit/bkmgit-Fedora-Setup-English
Overv May 13, 2021
ded3cb8
Merge pull request #235 from bkmgit/bkmgit-Fedora-setup-French
Overv May 13, 2021
f4b6177
Update ebook script to work with new Inkscape versions
Overv May 13, 2021
83c78c3
Clarify presentation mode explanations (fixes #237)
Overv May 13, 2021
c9c2762
Add proper cover image to epub versions of ebook
Overv May 16, 2021
24f5779
Add links to French versions of ebooks to README
Overv May 16, 2021
b2a4682
Update 00_Images.md
nicolas92g May 29, 2021
154dcd1
Merge pull request #239 from nicolas92g/patch-3
Overv May 30, 2021
6a1e494
Initialize debugCreateInfo everywhere
charles-lunarg Jun 12, 2021
2804836
Merge pull request #242 from charles-lunarg/master
Overv Jun 13, 2021
cd5452b
Replace min/max combination with clamp (resolves #240)
Overv Jun 13, 2021
54b0eda
Properly remove GL_ARB_separate_shader_objects references (fixes #112)
Overv Jun 15, 2021
2c92cc0
Use native language name in "languages" option.
chirsz-ever Jul 11, 2021
935147a
Merge pull request #246 from chirsz-ever/fix-210711
Overv Jul 19, 2021
e8ab01a
Add extra braces when setting VkClearValue
TestingPlant Jul 20, 2021
4b36689
Merge pull request #247 from TestingPlant/master
Overv Jul 24, 2021
6baf7fb
Apple M1 Added
rithulkamesh Aug 15, 2021
9f90e93
Update 00_Introduction.md
rithulkamesh Aug 23, 2021
401962b
Update 00_Introduction.md
rithulkamesh Aug 23, 2021
7f486be
Merge pull request #248 from rithulkamesh/patch-1
Overv Aug 23, 2021
cac1e92
Code samples: add CMakeLists.txt
kovrov Aug 18, 2021
73cca6f
Remove reference to nonexistent validation layer warning (fixes #250)
Overv Sep 19, 2021
e19f354
Fix typo
Overv Sep 19, 2021
5f0a745
Merge pull request #249 from kovrov/cmake
Overv Sep 19, 2021
ebeac99
Update link to Ray Tracing book
catleeball Nov 7, 2021
109d5d9
Merge pull request #253 from catleeball/patch-1
Overv Nov 8, 2021
a800a0a
Update 04_Swap_chain_recreation.md
Talon1024 Nov 14, 2021
7eae20d
Merge pull request #254 from Talon1024/patch-1
Overv Nov 15, 2021
949560e
Mention std::clamp in explanatory comment instead of min/max
Dec 17, 2021
4013f80
Merge pull request #256 from ralphtheninja/std-clamp
Overv Dec 20, 2021
730f8bf
Fix minor typo in french translation
ZaOniRinku Dec 28, 2021
e80dd8f
Merge pull request #258 from ZaOniRinku/master
Overv Dec 28, 2021
88b50d1
Add full name for vkBindXMemory functions
ZaOniRinku Dec 29, 2021
efe81be
Merge pull request #259 from ZaOniRinku/master
Overv Dec 29, 2021
30ca7a4
Fixed getMaxUsableSampleCount() formatting
thesusian Jan 15, 2022
43c0379
Chnage createFrameBuffers to createFramebuffers
thesusian Jan 15, 2022
8c71f7b
Merge pull request #262 from thesusian/patch-2
Overv Jan 18, 2022
a076519
Merge pull request #261 from thesusian/patch-1
Overv Jan 18, 2022
57ddc52
Updated links in the sidebar
SaschaWillems Jan 22, 2022
a93cb9f
Updated links to chunked Vulkan 1.2 spec
SaschaWillems Jan 22, 2022
ee8ac8a
Add Arch Linux support
Rubo3 Jan 31, 2022
f87df8e
Merge pull request #264 from Rubo3/patch-1
Overv Feb 5, 2022
8d863fd
Changed links according to QA
SaschaWillems Feb 6, 2022
bba0bc0
Updating 1.2 to 1.3 spec links
SaschaWillems Feb 6, 2022
cd67237
Merge pull request #263 from SaschaWillems/update-links
Overv Feb 6, 2022
eaa9f7d
Edit tutorial to reset & record command buffers each frame (#255)
charles-lunarg Feb 21, 2022
fefcaaa
Use std::numeric_limits<uint32_t>::max()
thp Feb 12, 2022
d7f26ca
Use std::numeric_limits<uint32_t>::max()
Overv Feb 21, 2022
608b986
vkDestroyDescriptorPool added to Descriptor pool and sets (#273)
Onyrew Mar 1, 2022
5282357
Describe how to install libxxf86vm and libxi (fixes #275)
Overv Mar 8, 2022
17dec07
Don't hardcode dynamicState count in code example
Overv Mar 8, 2022
ea275f6
Fix code snippet that was not updated as part of #255
Overv Mar 8, 2022
4ac2bd3
Add notice to French translation about updates to English version
Overv Mar 8, 2022
a007725
Add a note about the rear side of the model (fixes #277)
Overv Mar 29, 2022
0ff6aca
Update PDFs (fixes #279)
Overv Apr 10, 2022
c01b1b9
Redundant word removed (#282)
Apr 19, 2022
dce8e86
Fix typo (fixes #283)
Overv Apr 25, 2022
5a90bda
Remove outdated reference to swapchain (#285)
rHermes May 2, 2022
d46855c
Fix syntax error & inconsistency in sample code
Overv May 7, 2022
6519906
Fix small problem in "Depth buffering" (#289)
rHermes May 16, 2022
29ab167
Fix parts of the tutorial that weren't update to match the code (fixe…
Overv May 16, 2022
cbf32cc
Fix inconsistency between tutorial and code
Overv May 21, 2022
f5fcfbc
Fix vertex buffer/shader mixup
Overv Jun 27, 2022
8780354
Update tutorial to use dynamic state for viewport and scissor (#293)
SaschaWillems Jul 3, 2022
306dfc5
easy and robust cmake build file.
liudeyuan2021 Jul 7, 2022
b2b4514
some fixes for cmakelists.txt
liudeyuan2021 Jul 7, 2022
c35c766
some fixes for cmakelists.txt
liudeyuan2021 Jul 7, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Rephrased Drawing a Triangle -> Shader modules
  • Loading branch information
Alexis Ronez committed Jun 17, 2019
commit 01a36cf16778b1bccc2a234f991810f2aaa93863
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
À la différence d'anciens APIs, le code des shaders doit être fourni à Vulkan sous la forme de bytecode et non sous une
forme compréhensible par l'homme, comme [GLSL](https://en.wikipedia.org/wiki/OpenGL_Shading_Language) ou
forme facilement compréhensible par l'homme, comme [GLSL](https://en.wikipedia.org/wiki/OpenGL_Shading_Language) ou
[HLSL](https://en.wikipedia.org/wiki/High-Level_Shading_Language). Ce format est appelé
[SPIR-V](https://www.khronos.org/spir) et est conçu pour fonctionner avec Vulkan et OpenCL (deux APIs de Khronos). Ce
format peut servir à écrire du code éxécuté sur la carte graphique et pour les graphismes et pour le calcul, mais nous
format peut servir à écrire du code éxécuté sur la carte graphique pour les graphismes et pour le calcul, mais nous
nous concentrerons sur la pipeline graphique dans ce tutoriel.

L'avantage d'un tel format est que le compilateur spécifique de la carte graphique a beaucoup moins de travail.
L'expérience a de plus montré qu'avec les syntaxes compréhensibles par l'homme, certains compilateurs étaient très
laxistes par rapport à la spécification qui leur était fournie. Si vous écriviez du code complexe, il pouvait être
accepté par l'une et pas par l'autre, ou pire s'éxécuter différemment. Avec le format de plus bas niveau qu'est
SPIR-V, ces erreurs seront normalement évitées.
L'avantage d'un tel format est que le compilateur spécifique de la carte graphique a beaucoup moins de travail
d'interprétation. L'expérience a en effet montré qu'avec les syntaxes compréhensibles par l'homme, certains
compilateurs étaient très laxistes par rapport à la spécification qui leur était fournie. Si vous écriviez du code
complexe, il pouvait être accepté par l'un et pas par l'autre, ou pire s'éxécuter différemment. Avec le format de
plus bas niveau qu'est SPIR-V, ces problèmes seront normalement éliminés.

Cela ne veut cependant pas dire que nous devrons écrire ces bytecodes à la main. Khronos fournit lui-même un
compilateur transformant GLSL en SPIR-V. Ce compilateur standard vérifiera que votre code correspond à la spécification.
Expand All @@ -20,7 +20,7 @@ objet à traiter. Plutôt que d'utiliser des paramètres et des valeurs de retou
pour les entrées et sorties des invocations. Le language possède des fonctionnalités avancées pour aider le travail
avec les mathématiques nécessaires aux graphismes, avec par exemple des vecteurs, des matrices et des fonctions pour
les traiter. On y trouve des fonctions pour réaliser des produits vectoriels ou des réflexions d'un vecteurs par
rapport à un autre. Le type pour le vecteur d'appelle `vec` et est suivi d'un nombre indiquant le nombre d'éléments,
rapport à un autre. Le type pour les vecteurs s'appelle `vec` et est suivi d'un nombre indiquant le nombre d'éléments,
par exemple `vec3`. On peut accéder à ses données comme des membres avec par exemple `.y`, mais aussi créer de nouveaux
vecteurs avec plusieurs indications, par exemple `vec3(1.0, 2.0, 3.0).xz` qui crée un `vec2` égal à `(1.0, 3.0)`.
Leurs constructeurs peuvent aussi être des combinaisons de vecteurs et de valeurs. Par exemple il est possible de
Expand All @@ -30,16 +30,17 @@ Comme nous l'avons dit au chapitre précédent, nous devrons écrire un vertex s
afficher un triangle à l'écran. Les deux prochaines sections couvrirons ce travail, puis nous verrons comment créer
des bytecodes SPIR-V avec ce code.

## Vertex shader
## Le vertex shader

Le vertex shader traite chaque vertex envoyé depuis le programme C++. Il récupère des données telles la position, la
normale, la couleur ou les coordonnées de texture. Ses sorties sont la position du vertex dans l'espace de l'écran et
Le vertex shader traite chaque sommet envoyé depuis le programme C++. Il récupère des données telles la position, la
normale, la couleur ou les coordonnées de texture. Ses sorties sont la position du somment dans l'espace de l'écran et
les autres attributs qui doivent être fournies au reste de la pipeline, comme la couleur ou les coordonnées de texture.
Ces valeurs seront interpolées lors de la rasterization afin de produire un dégradé continu.
Ces valeurs seront interpolées lors de la rasterization afin de produire un dégradé continu. Ainsi les invocation du
fragment shader recevrons des vecteurs dégradés entre deux sommets.

Une _clip coordinate_ est un vecteur à quatre éléments émis par le vertex shader. Il est ensuite transformé en une
_normalized screen coordinate_ en divisant ses trois premiers composants par le quatrième. Ces coordonnées sont des
[coordonnées homogènes](https://en.wikipedia.org/wiki/Homogeneous_coordinates) qui permettent d'accéder au frambuffer
[coordonnées homogènes](https://fr.wikipedia.org/wiki/Coordonn%C3%A9es_homog%C3%A8nes) qui permettent d'accéder au frambuffer
grâce à un repère de [-1, 1] par [-1, 1]. Il ressemble à cela :

![](/images/normalized_device_coordinates.svg)
Expand All @@ -48,7 +49,7 @@ Vous devriez déjà être familier de ces notions si vous avez déjà utilisé d
OpenGL avant vous vous rendrez compte que l'axe Y est maintenenant inversé et que l'axe Z va de 0 à 1, comme Direct3D.

Pour notre premier triangle nous n'appliquerons aucune transformation, nous nous contenterons de spécifier
directement les coordonnées des trois vertices pour créer la forme suivante :
directement les coordonnées des trois sommets pour créer la forme suivante :

![](/images/triangle_coordinates.svg)

Expand Down Expand Up @@ -79,18 +80,18 @@ void main() {
}
```

La fonction `main` est invoquée pour chaque vertex. La variable prédéfinie `gl_VertexIndex` contient l'index du
vertex à l'origine de l'invocation du `main`. Elle est en général utilisée comme index dans le vertex buffer, mais nous
La fonction `main` est invoquée pour chaque sommet. La variable prédéfinie `gl_VertexIndex` contient l'index du
sommet à l'origine de l'invocation du `main`. Elle est en général utilisée comme index dans le vertex buffer, mais nous
l'emploierons pour déterminer la coordonnée à émettre. Cette coordonnée est extraite d'un tableau prédéfini à trois
entrées, et est combinée avec un `z` à 0.0 et un `w` à 1.0 pour faire de la division une identité. La variable
prédiéfinie `gl_Position` fonctionne comme sortie pour les coordonnées. L'extension `GL_ARB_separate_shader_objects`
prédéfinie `gl_Position` fonctionne comme sortie pour les coordonnées. L'extension `GL_ARB_separate_shader_objects`
est requise pour fonctionnner avec Vulkan.

## Fragment shader
## Le fragment shader

Le triangle formé par les positions émises par le vertex shader remplit un certain nombre de fragments. Le fragment
shader est invoqué pour chacun d'entre eux et produit une couleur et une profondeur, qu'il envoie à un ou plusieurs
framebuffer(s). Un fragment shader colorant tout en rouge est fournit ici :
framebuffer(s). Un fragment shader colorant tout en rouge est ainsi écrit :

```glsl
#version 450
Expand All @@ -103,7 +104,7 @@ void main() {
}
```

Le `main` est appelé pour chaque fragment de la même manière que le vertex shader est appelé pour chaque vertex. Les
Le `main` est appelé pour chaque fragment de la même manière que le vertex shader est appelé pour chaque sommet. Les
couleurs sont des vecteurs de quatre composants : R, G, B et le canal alpha. Les valeurs doivent être incluses dans
[0, 1]. Au contraire de `gl_Position`, il n'y a pas (plus exactement il n'y a plus) de variable prédéfinie dans
laquelle entrer la valeur de la couleur. Vous devrez spécifier votre propre variable pour contenir la couleur du
Expand All @@ -117,7 +118,7 @@ Afficher ce que vous voyez sur cette image ne serait pas plus intéressant qu'un
![](/images/triangle_coordinates_colors.png)

Nous devons pour cela faire quelques petits changements aux deux shaders. Spécifions d'abord une couleur distincte
pour chaque vertex. Ces couleurs seront inscrites dans le vertex shader de la même manière que les positions :
pour chaque sommet. Ces couleurs seront inscrites dans le vertex shader de la même manière que les positions :

```glsl
vec3 colors[3] = vec3[](
Expand All @@ -127,9 +128,9 @@ vec3 colors[3] = vec3[](
);
```

Nous devons maintenant passer ces couleurs au fragment shader afin qu'il puisse émettre des valeurs interpolées au
framebuffer. Ajoutez une variable de sortie pour la couleur dans le vertex shader et donnez lui une valeur dans le
`main`:
Nous devons maintenant passer ces couleurs au fragment shader afin qu'il puisse émettre des valeurs interpolées et
dégradées au framebuffer. Ajoutez une variable de sortie pour la couleur dans le vertex shader et donnez lui une
valeur dans le `main`:

```glsl
layout(location = 0) out vec3 fragColor;
Expand All @@ -151,7 +152,7 @@ void main() {
}
```

Les deux variables n'ont pas nécessairement le même nom, elles seront reliées selon l'index fournit par la directive
Les deux variables n'ont pas nécessairement le même nom, elles seront reliées selon l'index fourni dans la directive
`location`. La fonction `main` doit être modifiée pour émettre une couleur possédant un canal alpha. Le résultat
montré dans l'image précédente est dû à l'interpolation réalisée lors de la rasterization.

Expand Down Expand Up @@ -210,27 +211,27 @@ Nous allons maintenant compiler ces shaders en bytecode SPIR-V à l'aide du prog

**Windows**

Créez un fichier `compile.bat` et inscrivez ceci à l'intérieur :
Créez un fichier `compile.bat` et copiez ceci dedans :

```bash
C:/VulkanSDK/1.0.17.0/Bin32/glslangValidator.exe -V shader.vert
C:/VulkanSDK/1.0.17.0/Bin32/glslangValidator.exe -V shader.frag
C:/VulkanSDK/x.x.x.x/Bin32/glslangValidator.exe -V shader.vert
C:/VulkanSDK/x.x.x.x/Bin32/glslangValidator.exe -V shader.frag
pause
```

Corrigez le chemin vers `glslangValidator.exe` pour que le .bat pointe effectivement là où le votre se trouve.
Corrigez le chemin vers `glslangValidator.exe` pour que le .bat pointe effectivement là où le vôtre se trouve.
Double-cliquez pour lancer ce script.

**Linux**

Créez un fichier `compile.sh` et inscrivez ceci à l'intérieur :
Créez un fichier `compile.sh` et copiez ceci dedans :

10000 ```bash
/home/user/VulkanSDK/x.x.x.x/x86_64/bin/glslangValidator -V shader.vert
/home/user/VulkanSDK/x.x.x.x/x86_64/bin/glslangValidator -V shader.frag
```

Corrigez le chemin menant au `glslangValidator` pour qu'il pointe là où il faut. Rendez le script exécutable avec la
Corrigez le chemin menant au `glslangValidator` pour qu'il pointe là où il est. Rendez le script exécutable avec la
commande `chmod +x compile.sh` et lancez-le.

**Fin des instructions spécifiques**
Expand All @@ -242,19 +243,19 @@ sont automatiquement dérivés du type de shader, mais vous pouvez les renommer
peut-être un message parlant de fonctionnalités manquantes mais vous pouvez l'ignorer sans problème.

Si votre shader contient une erreur de syntaxe le compilateur vous indiquera le problème et la ligne à laquelle il
apparait. Essayez de retirer un point-virgule et voyez l'efficacité du débugger. Essayez également de voir les
arguments supportés. Il peut par exemple se forcer à émettre le bytecode sous un format compréhensible permettant de
voir exactement ce que le shader fait et quelles optimisations le compilateur y a fait.
apparait. Essayez de retirer un point-virgule et voyez l'efficacité du debogueur. Essayez également de voir les
arguments supportés. Il est possible de le forcer à émettre le bytecode sous un format compréhensible permettant de
voir exactement ce que le shader fait et quelles optimisations le compilateur y a réalisées.

La compilation des shaders en ligne de commande est l'une des options les plus simples et les plus évidentes. C'est ce
que nous utiliserons dans ce tutoriel, mais il est aussi possible de compiler les shaders depuis votre code. Le SDK
inclue la librairie [libshaderc](https://github.com/google/shaderc) , qui permet de compiler le GLSL en SPIR-V depuis le
programme C++.
que nous utiliserons dans ce tutoriel. Sachez qu'il est également possible de compiler les shaders depuis votre code. Le
SDK inclue la librairie [libshaderc](https://github.com/google/shaderc) , qui permet de compiler le GLSL en SPIR-V
depuis le programme C++.

## Charger un shader

Maintenant quevous pouvez créer des shaders SPIR-V il est grand temps de les charger dans le programme et de les
intégrer à la pipeline graphique. Nous allons d'abord écrire une fonction pour assister au chargement des données
Maintenant que vous pouvez créer des shaders SPIR-V il est grand temps de les charger dans le programme et de les
intégrer à la pipeline graphique. Nous allons d'abord écrire une fonction qui réalisera le chargement des données
binaires à partir des fichiers.

```c++
Expand All @@ -266,13 +267,13 @@ static std::vector<char> readFile(const std::string& filename) {
std::ifstream file(filename, std::ios::ate | std::ios::binary);

if (!file.is_open()) {
throw std::runtime_error("échec lors de l'ouverture du fichier!");
throw std::runtime_error(std::string {"échec de l'ouverture du fichier "} + filename + "!");
}
}
```

La fonction `readFile` lira tous les octets du fichier qu'on lui indique et les retournera dans un `vertor` de
charactères servant ici d'octets. Nous ouvrons le fichier deux paramètres particuliers :
La fonction `readFile` lira tous les octets du fichier qu'on lui indique et les retournera dans un `vector` de
charactères servant ici d'octets. L'ouverture du fichier se fait avec deux paramètres particuliers :
* `ate` : permet de commencer la lecture à la fin du fichier
* `binary` : indique que le fichier doit être lu comme des octets et que ceux-ci ne doivent pas être formattés

Expand All @@ -283,7 +284,7 @@ fichier et nous pouvons ainsi allouer un stockage suffisant :
size_t fileSize = (size_t) file.tellg();
std::vector<char> buffer(fileSize);
```
Après cela nous revenons au déubut du fichier et lisons tous les octéts d'un coup :
Après cela nous revenons au déubut du fichier et lisons tous les octets d'un coup :

```c++
file.seekg(0);
Expand All @@ -307,27 +308,27 @@ void createGraphicsPipeline() {
}
```

Assurez-vous que les shaders soient correctement charger en affichant la taille des fichiers lus depuis votre
programme et comparez ces valeurs à la taille des fichiers.
Assurez-vous que les shaders soient correctement chargés en affichant la taille des fichiers lus depuis votre
programme puis en comparez ces valeurs à la taille des fichiers indiquées par l'OS.

## Créer des modeules shader
## Créer des modules shader

Avant de passer ce code à la pipeline nous devons en faire un `VkShaderModule`. Créez une fonction
`createShaderModule` qui fera ce travail.
Avant de passer ce code à la pipeline nous devons en faire un `VkShaderModule`. Créez pour cela une fonction
`createShaderModule`.

```c++
VkShaderModule createShaderModule(const std::vector<char>& code) {

}
```

Cette fonction aura comme paramètre le buffer contenant le bytecode et crééra un `VkShaderModule` de ce code.
Cette fonction prendra comme paramètre le buffer contenant le bytecode et crééra un `VkShaderModule` avec ce code.

La création d'un module shader est très simple, nous avons juste à indiquer un pointeur vers le buffer et la taille
La création d'un module shader est très simple. Nous avons juste à indiquer un pointeur vers le buffer et la taille
de ce buffer. Ces informations seront inscrites dans la structure `VkShaderModuleCreatInfo`. Le seul problème est que
la taille doit être donnée en octets mais le pointeur sur le code est du type `uint32_t` et non du type `char`. Nous
devrons donc utiliser `reinterpet_cast` sur notre pointeur. Avec un tel cast vous devez être certain que vos données
satisfont l'alignement mémoire d'un `uint32_t`. Heuresement pour nous l'objet allocateur de la classe `std::vector`
devrons donc utiliser `reinterpet_cast` sur notre pointeur. Cet opérateur de conversion nécessite que les données
aient un alignement compatible avec `uint32_t`. Heuresement pour nous l'objet allocateur de la classe `std::vector`
s'assure que les données satisfont le pire cas d'alignement.

```c++
Expand All @@ -343,20 +344,20 @@ Le `VkShaderModule` peut alors être créé en appelant la fonction `vkCreateSha
```c++
VkShaderModule shaderModule;
if (vkCreateShaderModule(device, &createInfo, nullptr, &shaderModule) != VK_SUCCESS) {
throw std::runtime_error("échec lors de la création d'un module shader!");
throw std::runtime_error("échec de la création d'un module shader!");
}
```

Les paramètres sont les mêmes que lors de la création des objets précédents : le logical device, le pointeur sur la
structure d'informations, le pointeur vers l'allocateur optionnnel et la référence à l'objet créé. Le buffer
Les paramètres sont les mêmes que pour la création des objets précédents : le logical device, le pointeur sur la
structure avec les informations, le pointeur vers l'allocateur optionnnel et la référence à l'objet créé. Le buffer
contenant le code peut être libéré immédiatement après l'appel. Retournez enfin le shader module créé :

```c++
return shaderModule;
```

Les modules shader ne sont requis que pendant la création de la pipeline shader, par conséquent nous ne les
stockerons pas dans des membres données de la classe mais seulement comme des variables dans la fonction
Les modules shader ne sont requis que pendant la création de la pipeline, par conséquent nous ne les
stockerons pas dans des membres données de la classe mais seulement comme des variables locales à la fonction
`createGraphicsPipeline` :

```c++
Expand Down Expand Up @@ -398,7 +399,7 @@ vertShaderStageInfo.stage = VK_SHADER_STAGE_VERTEX_BIT;
```

La première étape, sans compter le membre `sType`, consiste à dire à Vulkan à quelle étape le shader sera utilisé. Il
existe une énumération pour chacune des étapes possibles décrites dans le chapitre précédent.
existe une valeur d'énumération pour chacune des étapes possibles décrites dans le chapitre précédent.

```c++
vertShaderStageInfo.module = vertShaderModule;
Expand All @@ -409,11 +410,11 @@ Les deux membres suivants indiquent le module contenant le code et la fonction
combiner plusieurs fragment shaders dans un seul module et de les différencier à l'aide de leurs points d'entrée.
Nous nous contenterons du `main` standard.

Il existe un autre membre, celui-ci optionnel, appelé `pSpecializationInfo`, que nous n'utiliserons pas mais qu'il
est intéressant d'évoquer. Il vous permet de donner des valeurs à des constantes présentes dans le code du shader.
Il existe un autre membre, celui-ci optionnel, appelé `pSpecializationInfo`, que nous n'utiliserons pas mais qu'il
est intéressant d'évoquer. Il vous permet de donner des valeurs à des constantes présentes dans le code du shader.
Vous pouvez ainsi configurer le comportement d'un shader lors de la création de la pipeline, ce qui est plus efficace
que de le faire pendant l'affichage, car alors le compilateur (sui n'a toujours pas été invoqué!) peut éliminer des
pants entiers de code sous un `if` vérifiant la valeur d'une constante ainsi configurée. Si vous n'avez aucune
que de le faire pendant l'affichage, car alors le compilateur (qui n'a toujours pas été invoqué!) peut éliminer des
pants entiers de code sous un `if` vérifiant la valeur d'une constante ainsi configurée. Si vous n'avez aucune
constante mettez ce paramètre à `nullptr`.

Modifier la structure pour qu'elle corresponde au fragment shader est très simple :
Expand Down
0