Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ vulkan Π² Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°ΡΡΠ΅
Π§ΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Vulkan Π΄Π»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ
ΠΠ° ΠΌΠΈΠ½ΡΠ²ΡΠ΅ΠΉ Π½Π΅Π΄Π΅Π»Π΅ ΡΡΠ°Π»ΠΎ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ ΠΎ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΌ ΡΠ΅Π»ΠΈΠ·Π΅ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΡΠ½ΡΠ½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ Π½ΠΎΠ²ΡΠΉ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠΉ API Vulkan. ΠΠ΅ΡΠ²ΡΠΌΠΈ, ΠΊΡΠΎ ΠΎΠ±ΡΠ°ΡΠΈΠ» Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΡΡ Π½ΠΎΠ²ΠΎΡΡΡ, ΡΡΠ°Π»ΠΈ Π³Π΅ΠΉΠΌΠ΅ΡΡ Ρ Π½Π°ΡΡΠΎΠ»ΡΠ½ΡΠΌΠΈ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ°ΠΌΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Vulkan Π² ΠΏΠ΅ΡΠ²ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ Π·Π°ΡΡΠ°Π³ΠΈΠ²Π°Π΅Ρ ΡΠ°Π±ΠΎΡΡ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠ΅ΠΉ ΠΈ ΡΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ ΠΌΠΎΡΠ°Π»ΡΠ½ΠΎ ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠΉ ΡΡΠ°Π½Π΄Π°ΡΡ OpenGL ES. ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π΄Π΅Π±ΡΡΠΈΡΠΎΠ²Π°Π» Π΅ΡΡ Π² ΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½Π°, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΡ ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ Π½Π° ΠΎΠ΄Π½ΠΎΡΠ΄Π΅ΡΠ½ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°Ρ ΠΈ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ Π΄Π°ΠΆΠ΅ Π½Π΅ Π·Π°Π΄ΡΠΌΡΠ²Π°Π»ΠΈΡΡ ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΡΠ΄Π΅ΡΠ½ΡΡ Π²ΡΡΠΎΠΊΠΎΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΡΡΡΠΎΠΉΡΡΠ²Π°Ρ . ΠΠ΄Π½Π°ΠΊΠΎ Π²ΡΡ ΠΌΠ΅Π½ΡΠ΅ΡΡΡ, ΠΈ ΡΠΈΡΠ»ΠΎ Π΄ΠΎΡΡΡΠΏΠ½ΡΡ ΡΠ΄Π΅Ρ Π² Π½Π°ΡΡΠΎΠ»ΡΠ½ΡΡ ΠΈ ΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°Ρ ΡΠΆΠ΅ ΠΏΡΠΈΠ±Π»ΠΈΠΆΠ°Π΅ΡΡΡ ΠΊ Π΄ΡΠΆΠΈΠ½Π΅. ΠΠ»Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΈΡ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»Π° ΠΈ Π±ΡΠ»Π° Π½Π°ΡΠ°ΡΠ° ΡΠ°Π±ΠΎΡΠ° Π½Π°Π΄ Π½ΠΎΠ²ΡΠΌ API.
Π ΠΎΠ±ΡΠ΅ΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠΈ Vulkan Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡΠΈΠ½Π΅ΡΡΠΈ ΡΠ»ΡΡΡΠ΅Π½Π½ΡΠΉ ΠΈΠ³ΡΠΎΠ²ΠΎΠΉ ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΎΠΏΡΡ, Π° ΡΠ°ΠΊΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ Π²ΡΡΠΎΠΊΠΎΠ΅ ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎ ΠΈΠ³Ρ, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ Π½Π° Android. ΠΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΠΌΠΈ OpenGL ΠΈ Direct3D, Vulkan ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΡ ΠΈ Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅Π½ΡΡΠ°Π»ΡΠ½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ. Π’Π΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΠΎΡΠ½ΠΎΠ²Π°Π½Π° Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΎΡ AMD ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Mantle, ΠΎΠ΄Π½Π°ΠΊΠΎ Π²ΡΠΊΠΎΡΠ΅ ΠΈΠ΄Π΅Ρ Π±ΡΠ»Π° ΠΏΠΎΠ΄Ρ Π²Π°ΡΠ΅Π½Π° ΠΊΠΎΠ½ΡΠΎΡΡΠΈΡΠΌΠΎΠΌ Khronos Group, Π² ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΅Π³ΠΎΠ΄Π½Ρ Π²Ρ ΠΎΠ΄ΠΈΡ Π±ΠΎΠ»ΡΡΠ΅ 100 ΡΠ»Π΅Π½ΠΎΠ² ΠΏΠΎ Π²ΡΠ΅ΠΌΡ ΠΌΠΈΡΡ. Vulkan Π²Π΅ΡΡΠΈΠΈ 1.0 Π±ΡΠ» Π²ΡΠΏΡΡΠ΅Π½ Π΄Π»Ρ Windows, Linux ΠΈ Android. ΠΡΠΎΠ±Π΅Π½Π½ΠΎ Π±ΠΎΠ»ΡΡΠΎΠ΅ Π²Π»ΠΈΡΠ½ΠΈΠ΅ Vulkan ΠΎΠΊΠ°ΠΆΠ΅Ρ ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° ΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ ΠΏΡΡΠΌΠΎΠΉ Π΄ΠΎΡΡΡΠΏ ΠΊ GPU Π΄Π»Ρ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π½Π°Π΄ Π΅Π³ΠΎ ΡΠ°Π±ΠΎΡΠΎΠΉ. ΠΠΎΠΆΠ½ΠΎ ΠΎΠΆΠΈΠ΄Π°ΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΡΠ΅ΡΡΠ²Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, Π½ΠΎ ΠΈ ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ½Π΅ΡΠ³ΠΎΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΡ ΠΏΡΠΈ ΡΠΎΠΌ ΠΆΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅.
Π§ΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅Ρ
Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Vulkan Π΄Π»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ
NVIDIA ΡΠΆΠ΅ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π»Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΎΠ±ΡΠ°Π·Ρ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ², ΡΡΠΎΠ±Ρ ΡΠ΅ ΠΌΠΎΠ³Π»ΠΈ Π°Π΄Π°ΠΏΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΡ ΠΊ Π½ΡΠ½Π΅ΡΠ½ΠΈΠΌ Android-ΠΏΠ»Π°Π½ΡΠ΅ΡΠ°ΠΌ Ρ ΡΠΈΠΏΠ°ΠΌΠΈ NVIDIA, ΠΎΠ΄Π½Π°ΠΊΠΎ ΡΠ΅Π³ΠΎΠ΄Π½Ρ ΠΈΡ Π΄ΠΎΠ»Ρ Π½Π° ΡΡΠ½ΠΊΠ΅ ΠΌΠΈΠ·Π΅ΡΠ½Π°. Π‘ΡΠ΅Π΄ΠΈ Khronos Group ΠΌΠ΅Π»ΡΠΊΠ°ΡΡ ΠΈΠΌΠ΅Π½Π° ΠΈΠ·Π²Π΅ΡΡΠ½ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π΅ΠΉ, Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, Google, Samsung, Sony, Qualcomm, Huawei ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π΄ΡΡΠ³ΠΈΡ , ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΊΠ°ΠΊ ΡΠΊΠΎΡΠΎ ΠΎΠ½ΠΈ Π½Π°ΡΠ½ΡΡ Π²Π½Π΅Π΄ΡΡΡΡ Vulkan, ΡΠΊΠ°Π·Π°ΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎ. Π₯ΠΎΡΠ΅ΡΡΡ Π²Π΅ΡΠΈΡΡ, ΡΡΠΎ Google ΡΠ΄Π΅Π»Π°Π΅Ρ Vulkan ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½ΠΎΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΎΠΉ Π΄Π»Ρ Android, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΏΠΎΠΊΠ° ΡΡΠΎ ΠΎΠ± ΡΡΠΎΠΌ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΡΠΎΠΎΠ±ΡΠ°Π΅ΡΡΡ.
Vulkan. Π ΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°. ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ
Π― ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΡΠΈΠΊ ΠΈΠΆΠ΅Π²ΡΠΊΠΎΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ CG Tribe ΠΈ Π·Π΄Π΅ΡΡ Ρ Π±ΡΠ΄Ρ ΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°ΡΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π° ΠΊ Vulkan API. Π‘ΡΡΠ»ΠΊΠ° Π½Π° ΠΈΡΡΠΎΡΠ½ΠΈΠΊ β vulkan-tutorial.com. ΠΡΠΎ ΠΌΠΎΡ Π²ΡΠΎΡΠ°Ρ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΡΠ²ΡΡΠ΅Π½Π° ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Ρ ΡΠ°Π·Π΄Π΅Π»Π° Development Environment.
9. ΠΠ°Π³ΡΡΠ·ΠΊΠ° ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ
10. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΌΠΈΠΏ-ΠΊΠ°ΡΡ
FAQ
ΠΠΎΠ»ΠΈΡΠΈΠΊΠ° ΠΊΠΎΠ½ΡΠΈΠ΄Π΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎΡΡΠΈ
1. ΠΡΡΡΠΏΠ»Π΅Π½ΠΈΠ΅
2. ΠΡΠ°ΡΠΊΠΈΠΉ ΠΎΠ±Π·ΠΎΡ
3. ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ
Windows
ΠΡΠ»ΠΈ Π²Ρ Π·Π°Π½ΠΈΠΌΠ°Π΅ΡΠ΅ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΎΠΉ Π΄Π»Ρ Windows, ΡΠΎ, ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ Visual Studio. ΠΠ»Ρ ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ Π‘++17 Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Visual Studio 2017 ΠΈΠ»ΠΈ 2019. Π¨Π°Π³ΠΈ, ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠ΅ Π½ΠΈΠΆΠ΅, ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΡΡ Π΄Π»Ρ VS 2017.
Vulkan SDK
Π‘Π°ΠΌΡΠΌ Π²Π°ΠΆΠ½ΡΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠΌ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Ρ Vulkan ΡΠ²Π»ΡΠ΅ΡΡΡ SDK. ΠΠ½ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π² ΡΠ΅Π±Ρ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ, ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ ΡΠ»ΠΎΠΈ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ, ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΈ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊ ΡΡΠ½ΠΊΡΠΈΠΉ Vulkan. ΠΠ°Π³ΡΡΠ·ΡΠΈΠΊ ΠΈΡΠ΅Ρ ΠΌΠ΅ΡΠΎΠ΄Ρ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ° Π² ΡΠ°Π½ΡΠ°ΠΉΠΌΠ΅ (Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ) ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° GLEW Π΄Π»Ρ OpenGL.
SDK ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π³ΡΡΠ·ΠΈΡΡ Ρ ΡΠ°ΠΉΡΠ° LunarG. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π²Π½ΠΈΠ·Ρ ΡΡΡΠ°Π½ΠΈΡΡ. ΠΠ°ΠΌ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π°ΠΊΠΊΠ°ΡΠ½Ρ, ΠΎΠ΄Π½Π°ΠΊΠΎ Ρ Π½ΠΈΠΌ Ρ Π²Π°Ρ Π±ΡΠ΄Π΅Ρ Π΄ΠΎΡΡΡΠΏ ΠΊ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ.
ΠΡΠ»ΠΈ Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅, ΡΠ±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ Π²Π°ΡΠ° Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°ΡΡΠ° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Vulkan, Π° Π΄ΡΠ°ΠΉΠ²Π΅Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ Π΄ΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ Π²Π΅ΡΡΠΈΠΈ. Π‘ΠΌ. Π³Π»Π°Π²Ρ ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π΄Π°Π½Ρ ΡΡΡΠ»ΠΊΠΈ Π½Π° Π΄ΡΠ°ΠΉΠ²Π΅ΡΡ ΠΊΡΡΠΏΠ½ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π΅ΠΉ.
Π ΡΡΠΎΠΉ ΠΏΠ°ΠΏΠΊΠ΅ Π΅ΡΡΡ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌΠΈ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΡ glslangValidator.exe ΠΈ glslc.exe ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΡΠ΅ΠΉΠ΄Π΅ΡΠΎΠ² ΠΈΠ· GLSL Π² Π±Π°ΠΉΡ-ΠΊΠΎΠ΄. ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΡΡΠ° ΡΠ΅ΠΌΠ° Π±ΡΠ΄Π΅Ρ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Π° Π² Π³Π»Π°Π²Π΅ Π¨Π΅ΠΉΠ΄Π΅ΡΠ½ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ. Π ΠΏΠ°ΠΏΠΊΠ΅ Bin ΡΠ°ΠΊΠΆΠ΅ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ dll Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊΠ° Vulkan ΠΈ ΡΠ»ΠΎΡΠ² Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ, Π² ΠΏΠ°ΠΏΠΊΠ΅ Lib β ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, Π° Π² ΠΏΠ°ΠΏΠΊΠ΅ Include β Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ Vulkan. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΠ·ΡΡΠΈΡΡ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ°ΠΉΠ»Ρ, Π½ΠΎ Π΄Π»Ρ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π° ΠΎΠ½ΠΈ Π½Π°ΠΌ Π½Π΅ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΡΡΡΡ.
ΠΠ°ΠΊ ΡΠΆΠ΅ Π±ΡΠ»ΠΎ ΡΠΊΠ°Π·Π°Π½ΠΎ, Vulkan β ΡΡΠΎ API, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠΉ ΠΎΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π½Π΅Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠΊΠ½Π° Π΄Π»Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³Π°. Π§ΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΠΊΡΠΎΡΡΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΠΎΡΡΠΈ Vulkan ΠΈ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΡΠΆΠ°ΡΠΎΠ² Win32, ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ GLFW Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠΊΠ½Π°. ΠΡΡΡ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ Π΄ΠΎΡΡΡΠΏΠ½ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, SDL, Π½ΠΎ GLFW Π»ΡΡΡΠ΅ ΡΠ΅ΠΌ, ΡΡΠΎ ΠΎΠ½Π° Π°Π±ΡΡΡΠ°Π³ΠΈΡΡΠ΅Ρ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠΊΠ½Π°, Π½ΠΎ ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΠΎ-Π·Π°Π²ΠΈΡΠΈΠΌΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ.
Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ DirectX 12, Π² Vulkan Π½Π΅Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π΄Π»Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ Π°Π»Π³Π΅Π±ΡΡ, ΠΏΠΎΡΡΠΎΠΌΡ Π΅Π΅ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΡΠΊΠ°ΡΠ°ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ. GLM β ΡΡΠΎ ΡΠ΄ΠΎΠ±Π½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Π½Π°Ρ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Ρ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ API, ΠΎΠ½Π° ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Ρ OpenGL.
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° GLM β ΡΡΠΎ header only Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°. Π‘ΠΊΠ°ΡΠ°ΠΉΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ Π²Π΅ΡΡΠΈΡ ΠΈ ΡΠΎΡ ΡΠ°Π½ΠΈΡΠ΅ Π΅Π΅ Π² ΡΠ΄ΠΎΠ±Π½ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅. Π£ Π²Π°Ρ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎΠ»ΡΡΠΈΡΡΡΡ ΠΏΠΎΠ΄ΠΎΠ±Π½Π°Ρ ΡΡΡΡΠΊΡΡΡΠ° ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ²:
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° Visual Studio
ΠΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π²ΡΠ΅Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΡΡΡΠΎΠΈΡΡ ΠΏΡΠΎΠ΅ΠΊΡ Visual Studio Π΄Π»Ρ Vulkan ΠΈ Π½Π°ΠΏΠΈΡΠ°ΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΡΡΠΎΠ±Ρ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ Π²ΡΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ.
ΠΠΎΠ±Π°Π²ΡΡΠ΅ Π² ΡΠ°ΠΉΠ» ΠΊΠΎΠ΄, ΡΠΊΠ°Π·Π°Π½Π½ΡΠΉ Π½ΠΈΠΆΠ΅. ΠΠ°ΠΌ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΡΠ°ΡΡΡΡ ΠΏΠΎΠ½ΡΡΡ Π΅Π³ΠΎ ΡΠ΅ΠΉΡΠ°Ρ, Π²Π°ΠΆΠ½ΠΎ ΡΠ·Π½Π°ΡΡ, ΡΠΎΠ±Π΅ΡΠ΅ΡΡΡ Π»ΠΈ ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΡΡ Π»ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°. Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ Π³Π»Π°Π²Π΅ ΠΌΡ Π½Π°ΡΠ½Π΅ΠΌ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Ρ ΡΠ°ΠΌΡΡ Π°Π·ΠΎΠ².
ΠΠΎΠ±Π°Π²ΡΡΠ΅ include Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ Π΄Π»Ρ Vulkan, GLFW ΠΈ GLM:
ΠΠ΅ΡΠ΅ΠΉΠ΄ΠΈΡΠ΅ Π² Linker β General β Additional Library Directories ΠΈ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ lib-ΡΠ°ΠΉΠ»ΠΎΠ² Π΄Π»Ρ Vulkan ΠΈ GLFW:
ΠΠ²Π΅Π΄ΠΈΡΠ΅ ΠΈΠΌΠ΅Π½Π° lib-ΡΠ°ΠΉΠ»ΠΎΠ² Vulkan ΠΈ GLFW:
Π ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ° Π½Π° C++:
Π’Π΅ΠΏΠ΅ΡΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°ΠΊΡΡΡΡ Π΄ΠΈΠ°Π»ΠΎΠ³ Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΠΌΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ°. ΠΡΠ»ΠΈ Π²ΡΠ΅ ΡΠ΄Π΅Π»Π°Π½ΠΎ Π²Π΅ΡΠ½ΠΎ, ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΊΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ Π² ΠΊΠΎΠ΄Π΅ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ Π±ΡΠ΄Π΅Ρ.
ΠΠ΅ Π·Π°Π±ΡΠ΄ΡΡΠ΅ Π²ΡΠ±ΡΠ°ΡΡ Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ 64-Π±ΠΈΡΠ½ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ.
ΠΡΠΎΠ²Π΅ΡΡΡΠ΅, ΡΡΠΎΠ±Ρ ΡΠΈΡΠ»ΠΎ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΉ Π½Π΅ ΡΠ°Π²Π½ΡΠ»ΠΎΡΡ Π½ΡΠ»Ρ (Β«X extensions supportedΒ» Π² ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ).
ΠΠΎΠ·Π΄ΡΠ°Π²Π»ΡΠ΅ΠΌ, Π²Ρ Π³ΠΎΡΠΎΠ²Ρ ΠΊ ΡΠ°Π±ΠΎΡΠ΅ Ρ Vulkan!
Linux
ΠΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π½ΠΈΠΆΠ΅ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Ρ Π΄Π»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ Ubuntu, Π½ΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ ΠΈΠΌ, ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ² ΠΊΠΎΠΌΠ°Π½Π΄Ρ apt Π½Π° ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΠ΅ Π²Π°ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠ° ΠΏΠ°ΠΊΠ΅ΡΠΎΠ². ΠΠ°ΠΌ Π½ΡΠΆΠ΅Π½ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ Π‘++17 (GCC 7+ ΠΈΠ»ΠΈ Clang 5+). ΠΠ°ΠΌ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ ΡΡΠΈΠ»ΠΈΡΠ° make.
Vulkan Packages
Π‘Π°ΠΌΡΠΌΠΈ Π²Π°ΠΆΠ½ΡΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Vulkan ΠΏΠΎΠ΄ Linux ΡΠ²Π»ΡΡΡΡΡ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊ Vulkan, ΡΠ»ΠΎΠΈ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠΈΠ»ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ Π²Π°ΡΠ΅Π³ΠΎ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ° Ρ Vulkan:
ΠΡΠ»ΠΈ Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅, ΡΠ±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ Π²Π°ΡΠ° Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°ΡΡΠ° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Vulkan, Π° Π΄ΡΠ°ΠΉΠ²Π΅Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ Π΄ΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ Π²Π΅ΡΡΠΈΠΈ. Π‘ΠΌ. Π³Π»Π°Π²Ρ ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π΄Π°Π½Ρ ΡΡΡΠ»ΠΊΠΈ Π½Π° Π΄ΡΠ°ΠΉΠ²Π΅ΡΡ ΠΊΡΡΠΏΠ½ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π΅ΠΉ.
ΠΠ°ΠΊ ΡΠΆΠ΅ Π±ΡΠ»ΠΎ ΡΠΊΠ°Π·Π°Π½ΠΎ, Vulkan β ΡΡΠΎ API, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠΉ ΠΎΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π½Π΅Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠΊΠ½Π° Π΄Π»Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³Π°. Π§ΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΠΊΡΠΎΡΡΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΠΎΡΡΠΈ Vulkan ΠΈ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΡΠΆΠ°ΡΠΎΠ² X11, ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ GLFW Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠΊΠ½Π°. ΠΡΡΡ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ Π΄ΠΎΡΡΡΠΏΠ½ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, SDL, Π½ΠΎ GLFW Π»ΡΡΡΠ΅ ΡΠ΅ΠΌ, ΡΡΠΎ ΠΎΠ½Π° Π°Π±ΡΡΡΠ°Π³ΠΈΡΡΠ΅Ρ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠΊΠ½Π°, Π½ΠΎ ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΠΎ-Π·Π°Π²ΠΈΡΠΈΠΌΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ.
ΠΡ Π±ΡΠ΄Π΅ΠΌ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ GLFW Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ DirectX 12, Π² Vulkan Π½Π΅Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π΄Π»Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ Π°Π»Π³Π΅Π±ΡΡ, ΠΏΠΎΡΡΠΎΠΌΡ Π΅Π΅ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΡΠΊΠ°ΡΠ°ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ. GLM β ΡΡΠΎ ΡΠ΄ΠΎΠ±Π½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Π½Π°Ρ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Ρ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ API, ΠΎΠ½Π° ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Ρ OpenGL.
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° GLM β ΡΡΠΎ header only Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°. ΠΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΈΠ· ΠΏΠ°ΠΊΠ΅ΡΠ° libglm-dev :
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΠ΅ΠΉΠ΄Π΅ΡΠΎΠ²
Π’Π΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° Π½Π°ΡΡΡΠΎΠΉΠΊΠ° ΠΏΠΎΡΡΠΈ Π·Π°Π²Π΅ΡΡΠ΅Π½Π°, ΠΎΡΡΠ°Π»ΠΎΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΡΠ΅ΠΉΠ΄Π΅ΡΠΎΠ² ΠΈΠ· GLSL Π² Π±Π°ΠΉΡ-ΠΊΠΎΠ΄.
glslc: error: no input files
ΠΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ glslc Π² Π³Π»Π°Π²Π΅ ΠΎ ΡΠ΅ΠΉΠ΄Π΅ΡΠ½ΡΡ ΠΌΠΎΠ΄ΡΠ»ΡΡ .
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΠΏΡΠΎΠ΅ΠΊΡΠ° Π΄Π»Ρ makefile
ΠΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π²ΡΠ΅Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΡΡΡΠΎΠΈΡΡ ΠΏΡΠΎΠ΅ΠΊΡ makefile Π΄Π»Ρ Vulkan ΠΈ Π½Π°ΠΏΠΈΡΠ°ΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΡΡΠΎΠ±Ρ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ Π²ΡΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ.
ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅ Π±Π°Π·ΠΎΠ²ΡΠ΅ ΡΠ»Π°Π³ΠΈ Π»ΠΈΠ½ΠΊΠ΅ΡΠ° Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ LDFLAGS :
Π€Π»Π°Π³ -lglfw ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ GLFW, -lvulkan β Π·Π°Π³ΡΡΠ·ΡΠΈΠΊ Vulkan, Π° ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΡΠ»Π°Π³ΠΈ β Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΡΠ°ΠΌΠΎΠΉ GLFW.
ΠΠ°ΠΏΡΡΠΊ ΠΊΠΎΠΌΠ°Π½Π΄Ρ make test ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΡΠΏΠ΅ΡΠ½ΠΎ. ΠΡΠΈ Π·Π°ΠΊΡΡΡΠΈΠΈ ΠΏΡΡΡΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π·Π°Π²Π΅ΡΡΠΈΡΡΡΡ ΡΡΠΏΠ΅ΡΠ½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ Π²ΠΎΠ·Π²ΡΠ°ΡΠ° ( 0 ). Π£ Π²Π°Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ»ΡΡΠΈΡΡΡΡ Π³ΠΎΡΠΎΠ²ΡΠΉ makefile, ΠΏΠΎΡ ΠΎΠΆΠΈΠΉ Π½Π° ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΉ Π½ΠΈΠΆΠ΅:
MacOS
ΠΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π½ΠΈΠΆΠ΅ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Ρ Π΄Π»Ρ ΡΠ΅Ρ , ΠΊΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Xcode ΠΈ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Homebrew. ΠΠΌΠ΅ΠΉΡΠ΅ Π² Π²ΠΈΠ΄Ρ, ΡΡΠΎ Π²Π΅ΡΡΠΈΡ MacOS Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ Π½ΠΈΠΆΠ΅ 10.11, Π° Π²Π°ΡΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ Metal API.
Vulkan SDK
Π‘Π°ΠΌΡΠΌ Π²Π°ΠΆΠ½ΡΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠΌ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Ρ Vulkan ΡΠ²Π»ΡΠ΅ΡΡΡ SDK. ΠΠ½ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π² ΡΠ΅Π±Ρ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ, ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ ΡΠ»ΠΎΠΈ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ, ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΈ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊ ΡΡΠ½ΠΊΡΠΈΠΉ Vulkan. ΠΠ°Π³ΡΡΠ·ΡΠΈΠΊ ΠΈΡΠ΅Ρ ΠΌΠ΅ΡΠΎΠ΄Ρ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ° Π² ΡΠ°Π½ΡΠ°ΠΉΠΌΠ΅ (Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ) ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° GLEW Π΄Π»Ρ OpenGL.
SDK ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π³ΡΡΠ·ΠΈΡΡ Ρ ΡΠ°ΠΉΡΠ° LunarG. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π²Π½ΠΈΠ·Ρ ΡΡΡΠ°Π½ΠΈΡΡ. ΠΠ°ΠΌ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π°ΠΊΠΊΠ°ΡΠ½Ρ, ΠΎΠ΄Π½Π°ΠΊΠΎ Ρ Π½ΠΈΠΌ Ρ Π²Π°Ρ Π±ΡΠ΄Π΅Ρ Π΄ΠΎΡΡΡΠΏ ΠΊ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ.
ΠΠ΅ΡΡΠΈΡ SDK Π΄Π»Ρ MacOS ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ MoltenVK. MacOS Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΠΏΡΡΠΌΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ Vulkan, Π° MoltenVK ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΠΏΡΠΎΡΠ»ΠΎΠΉΠΊΠ° Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π²ΡΠ·ΠΎΠ²ΠΎΠ² Π² Apple Metal. ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΡΠΎΠΌΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π°ΠΌΠΈ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Apple Metal.
ΠΠ°ΠΊ ΡΠΆΠ΅ Π±ΡΠ»ΠΎ ΡΠΊΠ°Π·Π°Π½ΠΎ, Vulkan β ΡΡΠΎ API, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠΉ ΠΎΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π½Π΅Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠΊΠ½Π° Π΄Π»Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³Π°. ΠΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ GLFW Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠΊΠ½Π°. ΠΡΡΡ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ Π΄ΠΎΡΡΡΠΏΠ½ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, SDL, Π½ΠΎ GLFW Π»ΡΡΡΠ΅ ΡΠ΅ΠΌ, ΡΡΠΎ ΠΎΠ½Π° Π°Π±ΡΡΡΠ°Π³ΠΈΡΡΠ΅Ρ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠΊΠ½Π°, Π½ΠΎ ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΠΎ-Π·Π°Π²ΠΈΡΠΈΠΌΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ.
ΠΠ»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ GLFW Π½Π° MacOS ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Homebrew:
Π Vulkan Π½Π΅Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π΄Π»Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ Π°Π»Π³Π΅Π±ΡΡ, ΠΏΠΎΡΡΠΎΠΌΡ Π΅Π΅ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΡΠΊΠ°ΡΠ°ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ. GLM β ΡΡΠΎ ΡΠ΄ΠΎΠ±Π½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Π½Π°Ρ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Ρ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ API, ΠΎΠ½Π° ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Ρ OpenGL.
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° GLM β ΡΡΠΎ header only Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°. ΠΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΈΠ· ΠΏΠ°ΠΊΠ΅ΡΠ° glm :
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° Xcode
ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ Xcode ΠΈ ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π½ΠΎΠ²ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ Xcode. Π ΠΏΠΎΡΠ²ΠΈΠ²ΡΠ΅ΠΌΡΡ ΠΎΠΊΠ½Π΅ Π²ΡΠ±Π΅ΡΠΈΡΠ΅ Application > Command Line Tool.
ΠΠΌΠ΅ΠΉΡΠ΅ Π² Π²ΠΈΠ΄Ρ, Π²Π°ΠΌ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΡΠ°ΡΡΡΡ ΠΏΠΎΠ½ΡΡΡ Π²Π΅ΡΡ ΠΊΠΎΠ΄ ΡΠ΅ΠΉΡΠ°Ρ. ΠΡ ΠΏΡΠΎΡΡΠΎ Ρ ΠΎΡΠΈΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ API, ΡΡΠΎΠ±Ρ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ Π²ΡΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ.
Xcode ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ Π±ΡΠ»ΠΈ Π½Π°ΠΉΠ΄Π΅Π½Ρ. ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ ΠΏΡΠΎΠ΅ΠΊΡ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΡΡΡΡΠ°Π½ΠΈΡΡ ΡΡΠΈ ΠΎΡΠΈΠ±ΠΊΠΈ. ΠΡΠ±Π΅ΡΠΈΡΠ΅ Π²Π°Ρ ΠΏΡΠΎΠ΅ΠΊΡ Π² ΠΏΠ°Π½Π΅Π»ΠΈ Project Navigator. ΠΡΠΊΡΠΎΠΉΡΠ΅ Π²ΠΊΠ»Π°Π΄ΠΊΡ Build Settings ΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
(ΠΠ° ΡΠΊΡΠΈΠ½ΡΠΎΡΠ΅ Π½Π° ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΏΡΡΠΈ. ΠΠΎ, Π΅ΡΠ»ΠΈ ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ ΡΡΠΎΠΌΡ ΠΌΠ°Π½ΡΠ°Π»Ρ, Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΠΏΠΎ Π΄Π²Π° ΠΏΡΡΠΈ Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ. β ΠΡΠΈΠΌ. ΠΏΠ΅Ρ.)
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Xcode Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠΌΠ΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π²ΠΈΠ΄:
ΠΡΡΠ°Π»ΠΎΡΡ Π½Π°ΡΡΡΠΎΠΈΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΡΠ΅Π΄Ρ. Π ΠΏΠ°Π½Π΅Π»ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² Xcode ΠΏΠ΅ΡΠ΅ΠΉΠ΄ΠΈΡΠ΅ Π² Product > Scheme > Edit Scheme. ΠΈ Π²ΠΎ Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ Arguments Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ Π΄Π²Π΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΡΠ΅Π΄Ρ:
β’ VK_ICD_FILENAMES = vulkansdk/macOS/share/vulkan/icd.d/MoltenVK_icd.json
β’ VK_LAYER_PATH = vulkansdk/macOS/share/vulkan/explicit_layer.d
Π£ Π²Π°Ρ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
ΠΡΠ°ΠΊ, Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Π·Π°Π²Π΅ΡΡΠ΅Π½Π°! ΠΠΎΡΠ»Π΅ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΎΠ΅ΠΊΡΠ° (Π½Π΅ Π·Π°Π±ΡΠ΄ΡΡΠ΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΡΠ±ΠΎΡΠΊΠΈ Debug ΠΈΠ»ΠΈ Release) Π²Ρ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
Π§ΠΈΡΠ»ΠΎ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΉ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ Π½ΡΠ»Ρ (Β«X extensions supportedΒ» Π² ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ). ΠΡΡΠ°Π»ΡΠ½ΡΠ΅ Π»ΠΎΠ³ΠΈ Π±Π΅ΡΡΡΡΡ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΡΠ°Π·Π½ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π²Π°ΡΠ΅ΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ.
ΠΠΎΠ·Π΄ΡΠ°Π²Π»ΡΠ΅ΠΌ! Π’Π΅ΠΏΠ΅ΡΡ Π²Ρ Π³ΠΎΡΠΎΠ²Ρ ΠΊ ΡΠ΅Π°Π»ΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΠ΅ Ρ Vulkan.
Vulkan. Π ΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°. ΠΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ
Π― ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΡΠΈΠΊ Π² IT-ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ CG Tribe, ΠΈ Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ Π²ΡΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π° ΠΊ Vulkan API (vulkan-tutorial.com).
Π‘Π΅Π³ΠΎΠ΄Π½Ρ Ρ Ρ ΠΎΡΡ ΠΏΠΎΠ΄Π΅Π»ΠΈΡΡΡΡ Ρ Π²Π°ΠΌΠΈ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΎΠΌ ΠΏΠ΅ΡΠ²ΡΡ Π΄Π²ΡΡ Π³Π»Π°Π² ΡΠ°Π·Π΄Π΅Π»Π°, ΠΏΠΎΡΠ²ΡΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌΡ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΡ (Graphics pipeline basics), β Introduction ΠΈ Shader modules.
9. ΠΠ°Π³ΡΡΠ·ΠΊΠ° ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ
10. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΌΠΈΠΏ-ΠΊΠ°ΡΡ
FAQ
ΠΠΎΠ»ΠΈΡΠΈΠΊΠ° ΠΊΠΎΠ½ΡΠΈΠ΄Π΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎΡΡΠΈ
ΠΡΡΡΠΏΠ»Π΅Π½ΠΈΠ΅
Π ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ Π³Π»Π°Π² ΠΌΡ Π±ΡΠ΄Π΅ΠΌ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°ΡΡ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ Π½Π°ΠΌ Π½Π°ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΡΠ΅ΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ. ΠΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ β ΡΡΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΡΡ Π²Π΅ΡΡΠΈΠ½Ρ ΠΈ ΡΠ΅ΠΊΡΡΡΡΡ ΠΌΠ΅ΡΠ΅ΠΉ Π² ΠΏΠΈΠΊΡΠ΅Π»ΠΈ Π² render target-Π°Ρ .
ΠΠΈΠΆΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° ΡΠΏΡΠΎΡΠ΅Π½Π½Π°Ρ ΡΡ Π΅ΠΌΠ°:
Input assembler ΡΠΎΠ±ΠΈΡΠ°Π΅Ρ ΡΡΡΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π²Π΅ΡΡΠΈΠ½ ΠΈΠ· Π±ΡΡΠ΅ΡΠΎΠ². ΠΠ° ΡΡΠΎΠΌ ΡΡΠ°ΠΏΠ΅ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΈΠ½Π΄Π΅ΠΊΡΠ½ΡΠΉ Π±ΡΡΠ΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠ·Π±Π°Π²Π»ΡΠ΅Ρ ΠΎΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅ Π²Π΅ΡΡΠΈΠ½ Π΄Π»Ρ ΠΏΠΎΠ²ΡΠΎΡΡΡΡΠΈΡ ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ².
ΠΠ΅ΡΡΠΈΠ½Π½ΡΠΉ ΡΠ΅ΠΉΠ΄Π΅Ρ (vertex shader) Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²Π΅ΡΡΠΈΠ½Ρ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ, Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ, Π΄Π»Ρ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π²Π΅ΡΡΠΈΠ½ ΠΈΠ· Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ Π² ΡΠΊΡΠ°Π½Π½ΡΡ. Π’Π°ΠΊΠΆΠ΅ ΠΎΠ½ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ Π΄Π°Π½Π½ΡΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²Π΅ΡΡΠΈΠ½Ρ Π΄Π°Π»Π΅Π΅ ΠΏΠΎ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΡ.
Π¨Π΅ΠΉΠ΄Π΅ΡΡ ΡΠ΅ΡΡΠ΅Π»ΡΡΠΈΠΈ (tessellation shaders) ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΡΠ²Π΅Π»ΠΈΡΠΈΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΌΠ΅ΡΠ΅ΠΉ Π·Π° ΡΡΠ΅Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ°Π·Π±ΠΈΠ΅Π½ΠΈΡ Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΠΈ. ΠΡ ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ, ΡΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ Π±Π»ΠΈΠ·Π»Π΅ΠΆΠ°ΡΠΈΠ΅ ΠΏΠΎΠ²Π΅ΡΡ Π½ΠΎΡΡΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΈΡΠΏΠΈΡΠ½ΡΠ΅ ΡΡΠ΅Π½Ρ ΠΈΠ»ΠΈ Π»Π΅ΡΡΠ½ΠΈΡΡ, ΠΌΠ΅Π½Π΅Π΅ ΠΏΠ»ΠΎΡΠΊΠΈΠΌΠΈ.
ΠΠ΅ΠΎΠΌΠ΅ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ΅ΠΉΠ΄Π΅Ρ (geometry shader) Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π° (ΡΡΠ΅ΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ, Π»ΠΈΠ½ΠΈΡ, ΡΠΎΡΠΊΠ°) ΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΠΌΠ΅Π½ΠΈΡΡ ΠΈΡ ΠΎΡΡΠΈΡΠΎΠ²ΠΊΡ ΠΈΠ»ΠΈ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ Π½ΠΎΠ²ΡΠ΅ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Ρ. ΠΠ΅ΠΎΠΌΠ΅ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ΅ΠΉΠ΄Π΅Ρ ΠΏΠΎΡ ΠΎΠΆ Π½Π° ΡΠ΅ΠΉΠ΄Π΅Ρ ΡΠ΅ΡΡΠ΅Π»ΡΡΠΈΠΈ, ΡΠΎΠ»ΡΠΊΠΎ, Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ Π½Π΅Π³ΠΎ, Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΈΠΉ. ΠΠ΄Π½Π°ΠΊΠΎ ΠΎΠ½ Π½Π΅ ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ ΠΈΠ·-Π·Π° Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π²ΡΡΠΎΠΊΠΎΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°ΡΡ, Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠ² Intel.
ΠΠ° ΡΡΠ°ΠΏΠ΅ ΡΠ°ΡΡΠ΅ΡΠΈΠ·Π°ΡΠΈΠΈ (rasterization) ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΏΡΠΈΠΌΠΈΡΠΈΠ² ΡΠ°ΡΠΊΠ»Π°Π΄ΡΠ²Π°Π΅ΡΡΡ Π½Π° ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠΎΠ². Π€ΡΠ°Π³ΠΌΠ΅Π½ΡΡ β ΡΡΠΎ ΠΏΠΈΠΊΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°ΠΏΠΎΠ»Π½ΡΡΡ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Ρ Π²ΠΎ ΡΡΠ΅ΠΉΠΌΠ±ΡΡΠ΅ΡΠ΅. ΠΡΠ΅ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΡ ΠΎΠ΄ΡΡ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Ρ ΡΠΊΡΠ°Π½Π°, ΠΎΡΡΠ΅ΠΊΠ°ΡΡΡΡ, Π° Π°ΡΡΠΈΠ±ΡΡΡ, ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠ΅ Π²Π΅ΡΡΠΈΠ½Π½ΡΠΌ ΡΠ΅ΠΉΠ΄Π΅ΡΠΎΠΌ, ΠΈΠ½ΡΠ΅ΡΠΏΠΎΠ»ΠΈΡΡΡΡΡΡ ΠΏΠΎ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°ΠΌ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΡΠΈΡΡΠ½ΠΊΠ΅. Π€ΡΠ°Π³ΠΌΠ΅Π½ΡΡ, Π½Π°Ρ ΠΎΠ΄ΡΡΠΈΠ΅ΡΡ Π·Π° Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΡΠΎΠΆΠ΅ ΠΎΡΡΠ΅ΠΊΠ°ΡΡΡΡ ΠΈΠ·-Π·Π° ΡΠ΅ΡΡΠ° Π³Π»ΡΠ±ΠΈΠ½Ρ (depth testing).
Π€ΡΠ°Π³ΠΌΠ΅Π½ΡΠ½ΡΠΉ ΡΠ΅ΠΉΠ΄Π΅Ρ (fragment shader) Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ° ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, Π² ΠΊΠ°ΠΊΠΈΠ΅ ΡΡΠ΅ΠΉΠΌΠ±ΡΡΠ΅ΡΡ ΠΈ Ρ ΠΊΠ°ΠΊΠΈΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ²Π΅ΡΠ° ΠΈ Π³Π»ΡΠ±ΠΈΠ½Ρ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡΡΡ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΡ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΈΠ½ΡΠ΅ΡΠΏΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· Π²Π΅ΡΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΉΠ΄Π΅ΡΠ°, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΡΠ΅ΠΊΡΡΡΡΠ½ΡΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΠΈ Π½ΠΎΡΠΌΠ°Π»ΠΈ Π΄Π»Ρ ΠΎΡΠ²Π΅ΡΠ΅Π½ΠΈΡ.
ΠΠ° ΡΡΠ°ΠΏΠ΅ ΡΠΌΠ΅ΡΠΈΠ²Π°Π½ΠΈΡ ΡΠ²Π΅ΡΠΎΠ² (color blending) ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΠΌΠ΅ΡΠΈΠ²Π°Π½ΠΈΠ΅ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠΎΠ², ΠΎΡΠ½ΠΎΡΡΡΠΈΡ ΡΡ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΈ ΡΠΎΠΌΡ ΠΆΠ΅ ΠΏΠΈΠΊΡΠ΅Π»Ρ Π²ΠΎ ΡΡΠ΅ΠΉΠΌΠ±ΡΡΠ΅ΡΠ΅. Π€ΡΠ°Π³ΠΌΠ΅Π½ΡΡ ΠΌΠΎΠ³ΡΡ ΠΏΠ΅ΡΠ΅ΠΊΡΡΠ²Π°ΡΡ Π΄ΡΡΠ³ Π΄ΡΡΠ³Π° ΠΈΠ»ΠΈ ΡΠΌΠ΅ΡΠΈΠ²Π°ΡΡΡΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎΡΡΠΈ.
ΠΡΠ°ΠΏΡ, Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΡΠ΅ Π·Π΅Π»Π΅Π½ΡΠΌ ΡΠ²Π΅ΡΠΎΠΌ, Π½Π°Π·ΡΠ²Π°ΡΡΡΡ Π½Π΅ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ΅ΠΌΡΠΌΠΈ (fixed-function). ΠΠ° ΡΡΠΈΡ ΡΡΠ°ΠΏΠ°Ρ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΊΠΎΡΡΠ΅ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ², Π½ΠΎ ΠΏΡΠΈΠ½ΡΠΈΠΏ ΠΈΡ ΡΠ°Π±ΠΎΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ Π·Π°ΡΠ°Π½Π΅Π΅.
ΠΡΠ°ΠΏΡ, Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΠΎΡΠ°Π½ΠΆΠ΅Π²ΡΠΌ ΡΠ²Π΅ΡΠΎΠΌ, β ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ΅ΠΌΡΠ΅ ΡΡΠ°ΠΏΡ (programmable). ΠΡΠΎ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°Π³ΡΡΠ·ΠΈΡΡ ΡΠ²ΠΎΠΉ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΊΠΎΠ΄ Π½Π° Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°ΡΡΡ, ΡΡΠΎΠ±Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²Π°ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ½ΡΠ΅ ΡΠ΅ΠΉΠ΄Π΅ΡΡ Π΄Π»Ρ ΡΠ°ΠΌΡΡ ΡΠ°Π·Π½ΡΡ Π·Π°Π΄Π°Ρ ΠΎΡ ΡΠ΅ΠΊΡΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΎΡΠ²Π΅ΡΠ΅Π½ΠΈΡ Π΄ΠΎ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ Π»ΡΡΠ΅ΠΉ. ΠΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π½Π° ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅ ΡΠ΄Π΅Ρ GPU Π΄Π»Ρ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠ°ΠΊΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΊΠ°ΠΊ Π²Π΅ΡΡΠΈΠ½Ρ ΠΈ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΡ.
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ΅ΠΌΡΠ΅ ΡΡΠ°ΠΏΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠΏΡΡΡΠΈΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΡΠΊΠ»ΡΡΠΈΡΡ ΡΠ΅ΡΡΠ΅Π»ΡΡΠΈΡ ΠΈ Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ΅ΠΉΠ΄Π΅Ρ, Π΅ΡΠ»ΠΈ ΡΠΈΡΡΠ΅ΡΠ΅ ΠΏΡΠΎΡΡΡΡ Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΡ. ΠΡΠ»ΠΈ Π²Π°Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π³Π»ΡΠ±ΠΈΠ½Ρ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΊΠ°ΡΡΡ ΡΠ΅Π½Π΅ΠΉ), Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΡΠΊΠ»ΡΡΠΈΡΡ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ½ΡΠΉ ΡΠ΅ΠΉΠ΄Π΅Ρ.
Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ Π³Π»Π°Π²Π΅ ΠΌΡ Π½Π°ΡΠ½Π΅ΠΌ Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π΄Π²ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ΅ΠΌΡΡ ΡΡΠ°ΠΏΠΎΠ², Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ Π΄Π»Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΡΠ΅ΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ° Π½Π° ΡΠΊΡΠ°Π½Π΅: Π²Π΅ΡΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΉΠ΄Π΅ΡΠ° ΠΈ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΠΉΠ΄Π΅ΡΠ°. ΠΠ°Π»Π΅Π΅ ΠΌΡ Π½Π°ΡΡΡΠΎΠΈΠΌ Π½Π΅ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ΅ΠΌΡΠ΅ ΡΡΠ°ΠΏΡ, ΡΠΊΠ°Π·Π°Π² ΡΠ°ΠΊΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, ΠΊΠ°ΠΊ ΡΠ΅ΠΆΠΈΠΌ ΡΠΌΠ΅ΡΠΈΠ²Π°Π½ΠΈΡ ΠΈ viewport. ΠΠ°ΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΡΠ°ΡΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ° Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΡ Π²Ρ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ ΠΈ Π²ΡΡ ΠΎΠ΄Π½ΡΡ ΡΡΠ΅ΠΉΠΌΠ±ΡΡΠ΅ΡΠΎΠ².
Π¨Π΅ΠΉΠ΄Π΅ΡΠ½ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ
ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄Π° Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠΌΠΈ GPU ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΡΡΠΈΠ΅ ΡΠ΅ΠΉΠ΄Π΅ΡΡ Π² Π½Π°ΡΠΈΠ²Π½ΡΠΉ ΠΊΠΎΠ΄, ΠΏΠΎΠ»ΡΡΠ°ΡΡΡΡ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΡΠ΅. Π ΡΠΎΠΌΡ ΠΆΠ΅ ΠΏΡΠΎΡΠ»ΠΎΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΎ, ΡΡΠΎ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ°, ΠΊΠ°ΠΊ GLSL, Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π²Π΅Π½Π΄ΠΎΡΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΠΎΠ²Π°Π»ΠΈ ΡΡΠ°Π½Π΄Π°ΡΡ Π²Π΅ΡΡΠΌΠ° ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎ. ΠΡΠΈ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ Π½Π΅ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΡΡ ΡΠ΅ΠΉΠ΄Π΅ΡΠΎΠ² Π΄Π»Ρ GPU ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ Π±ΡΠ» Π±ΠΎΠ»ΡΡΠΎΠΉ ΡΠΈΡΠΊ, ΡΡΠΎ ΠΊΠΎΠ΄ ΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ Π½Π΅ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌ Ρ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ°ΠΌΠΈ Π΄ΡΡΠ³ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π΅ΠΉ ΠΈΠ»ΠΈ, Π΅ΡΠ΅ Ρ ΡΠΆΠ΅, ΠΈΠ·-Π·Π° ΠΎΡΠΈΠ±ΠΎΠΊ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° ΡΠ΅ΠΉΠ΄Π΅Ρ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΈΠ½Π°ΡΠ΅. ΠΡΠΎΡΡΠΎΠΉ ΡΠΎΡΠΌΠ°Ρ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄Π° SPIR-V ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΡΡΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ.
ΠΠ°ΠΌ Π½Π΅ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΏΠΈΡΠ°ΡΡ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄ Π²ΡΡΡΠ½ΡΡ. Khronos Π²ΡΠΏΡΡΡΠΈΠ» ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠΉ ΠΎΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅Ρ GLSL Π² SPIR-V. ΠΠ½ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ Π»ΠΈ ΡΠ΅ΠΉΠ΄Π΅ΡΠ½ΡΠΉ ΠΊΠΎΠ΄ ΡΡΠ°Π½Π΄Π°ΡΡΡ, ΠΈ ΡΠΎΠ·Π΄Π°Π΅Ρ Π±ΠΈΠ½Π°ΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» SPIR-V Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π² Π²Π°ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅. Π’Π°ΠΊΠΆΠ΅ ΡΡΠΎΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ SPIR-V Π² ΡΠ°Π½ΡΠ°ΠΉΠΌΠ΅ (Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ), Π½ΠΎ Π² ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π΅ ΠΌΡ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ ΡΡΠΎΠ³ΠΎ Π΄Π΅Π»Π°ΡΡ. ΠΠΌΠ΅ΡΡΠΎ glslangValidator.exe ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ glslc.exe ΠΎΡ Google. ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ glslc Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠΎΡ ΠΆΠ΅ ΡΠΎΡΠΌΠ°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ, ΡΡΠΎ ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ GCC ΠΈΠ»ΠΈ Clang, ΠΈ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, includes. ΠΠ±Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠΆΠ΅ Π²ΠΊΠ»ΡΡΠ΅Π½Ρ Π² Vulkan SDK, ΠΏΠΎΡΡΠΎΠΌΡ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΡΠΊΠ°ΡΠΈΠ²Π°ΡΡ Π½ΠΈΡΠ΅Π³ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ.
ΠΠ°ΠΊ ΡΠΆΠ΅ Π±ΡΠ»ΠΎ ΡΠΊΠ°Π·Π°Π½ΠΎ, Π΄Π»Ρ ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΡΡΠ΅ΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ° ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π½Π°ΠΏΠΈΡΠ°ΡΡ Π²Π΅ΡΡΠΈΠ½Π½ΡΠΉ ΡΠ΅ΠΉΠ΄Π΅Ρ ΠΈ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ½ΡΠΉ ΡΠ΅ΠΉΠ΄Π΅Ρ. Π ΡΠ»Π΅Π΄ΡΡΡΠΈΡ Π΄Π²ΡΡ ΠΏΡΠ½ΠΊΡΠ°Ρ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΊΠΎΠ΄ GLSL Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ΅ΠΉΠ΄Π΅ΡΠ° ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°ΡΡ Π±ΠΈΠ½Π°ΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ SPIR-V ΠΈ Π·Π°Π³ΡΡΠ·ΠΈΡΡ ΠΈΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
ΠΠ΅ΡΡΠΈΠ½Π½ΡΠΉ ΡΠ΅ΠΉΠ΄Π΅Ρ
ΠΠ΅ΡΡΠΈΠ½Π½ΡΠΉ ΡΠ΅ΠΉΠ΄Π΅Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΠΊΠ°ΠΆΠ΄ΡΡ Π²Ρ ΠΎΠ΄ΡΡΡΡ Π²Π΅ΡΡΠΈΠ½Ρ. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π²Ρ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ ΠΎΠ½ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π²Π΅ΡΡΠΈΠ½Π½ΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ Π² ΠΌΠΈΡΠΎΠ²ΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅, ΡΠ²Π΅Ρ, Π½ΠΎΡΠΌΠ°Π»Ρ ΠΈ ΡΠ΅ΠΊΡΡΡΡΠ½ΡΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ. ΠΡΡ ΠΎΠ΄Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ β ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΎΡΡΠ΅ΡΠ΅Π½ΠΈΡ (clip space) ΠΈ Π°ΡΡΠΈΠ±ΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ½ΠΎΠΌΡ ΡΠ΅ΠΉΠ΄Π΅ΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ²Π΅Ρ ΠΈ ΡΠ΅ΠΊΡΡΡΡΠ½ΡΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ). ΠΠΎΠ·ΠΆΠ΅ ΡΡΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π±ΡΠ΄ΡΡ ΠΈΠ½ΡΠ΅ΡΠΏΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Ρ ΠΏΠΎ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°ΠΌ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΠ»Π°Π²Π½ΠΎΠ³ΠΎ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ°.
ΠΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ°ΠΌΠΈ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΎΡΡΠ΅ΡΠ΅Π½ΠΈΡ Π½Π°Π·ΡΠ²Π°ΡΡ ΡΠ΅ΡΡΡΠ΅Ρ ΠΌΠ΅ΡΠ½ΡΠΉ Π²Π΅ΠΊΡΠΎΡ, ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌΡΠΉ ΠΈΠ· Π²Π΅ΡΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΉΠ΄Π΅ΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΡΡΡ Π² Π½ΠΎΡΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΡΡΡΡΠΎΠΉΡΡΠ²Π° Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π΄Π΅Π»Π΅Π½ΠΈΡ Π²Π΅ΠΊΡΠΎΡΠ° Π½Π° Π΅Π³ΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ. ΠΠΎΡΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΡΡΡΡΠΎΠΉΡΡΠ²Π° (normalized device coordinate) β ΡΡΠΎ Π³ΠΎΠΌΠΎΠ³Π΅Π½Π½ΡΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ, Π½Π°Ρ ΠΎΠ΄ΡΡΠΈΠ΅ΡΡ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ [-1, 1], ΠΈ ΠΏΡΠΎΠ΅ΡΠΈΡΡΡΡΠΈΠ΅ΡΡ Π½Π° ΡΡΠ΅ΠΉΠΌΠ±ΡΡΠ΅Ρ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ΅ Π½ΠΈΠΆΠ΅:
ΠΡΠ»ΠΈ Π΄ΠΎ ΡΡΠΎΠ³ΠΎ Π²Ρ ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ Ρ OpenGL, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°ΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ° Y ΡΠ΅ΠΏΠ΅ΡΡ Π·Π΅ΡΠΊΠ°Π»ΡΠ½ΠΎ ΠΎΡΡΠ°ΠΆΠ΅Π½Π°. Π Π΄Π»Ρ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ Z Π·Π°Π΄Π°Π½ ΡΠΎΡ ΠΆΠ΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½, ΡΡΠΎ ΠΈ Π² Direct3D, ΠΎΡ 0 Π΄ΠΎ 1.
ΠΠ»Ρ Π½Π°ΡΠ΅Π³ΠΎ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΡΠ΅ΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ° ΠΌΡ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠΉ, Π° ΠΏΡΠΎΡΡΠΎ ΡΠΊΠ°ΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΡΠ΅Ρ Π²Π΅ΡΡΠΈΠ½ Π² Π½ΠΎΡΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ°Ρ ΡΡΡΡΠΎΠΉΡΡΠ²Π° Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ°ΠΊΠΎΠΉ ΡΠΈΠ³ΡΡΡ:
ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΡΠ΄Π°Π²Π°ΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π½ΠΎΡΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΡΡΡΡΠΎΠΉΡΡΠ²Π°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΎΡΡΠ΅ΡΠ΅Π½ΠΈΡ Ρ Π΅Π΄ΠΈΠ½ΠΈΡΠ΅ΠΉ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° w Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°Ρ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π΅ ΠΎΡ ΠΊΠ»ΠΈΠΏ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΊ ΡΠΊΡΠ°Π½Π½ΠΎΠΌΡ.
ΠΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π½ΠΎΡΠΌΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ Ρ ΡΠ°Π½ΡΡΡΡ Π² Π²Π΅ΡΡΠΈΠ½Π½ΠΎΠΌ Π±ΡΡΠ΅ΡΠ΅, Π½ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π²Π΅ΡΡΠΈΠ½Π½ΠΎΠ³ΠΎ Π±ΡΡΠ΅ΡΠ° Π² Vulkan ΠΈ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΅Π³ΠΎ Π΄Π°Π½Π½ΡΠΌΠΈ β Π·Π°Π΄Π°ΡΠ° Π½Π΅ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½Π°Ρ. ΠΠΎΡΡΠΎΠΌΡ ΠΌΡ ΠΎΡΠ»ΠΎΠΆΠΈΠΌ ΡΡΠΎ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π½Π° ΡΠΊΡΠ°Π½Π΅ Π½Π΅ ΠΏΠΎΡΠ²ΠΈΡΡΡ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΡΠ΅ΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ. Π ΠΏΠΎΠΊΠ° ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌ Π½Π΅Π±ΠΎΠ»ΡΡΡΡ Ρ ΠΈΡΡΠΎΡΡΡ: Π²ΡΡΠ°Π²ΠΈΠΌ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π² Π²Π΅ΡΡΠΈΠ½Π½ΡΠΉ ΡΠ΅ΠΉΠ΄Π΅Ρ. ΠΠΎΠ΄ Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ°ΠΊ:
Π€ΡΠ°Π³ΠΌΠ΅Π½ΡΠ½ΡΠΉ ΡΠ΅ΠΉΠ΄Π΅Ρ
ΠΠ΅ΡΡΠΈΠ½Ρ, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅ ΠΈΠ· Π²Π΅ΡΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΉΠ΄Π΅ΡΠ°, ΠΎΠ±ΡΠ°Π·ΡΡΡ ΡΡΠ΅ΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ (ΠΏΠΈΠΊΡΠ΅Π»Π°ΠΌΠΈ) Π½Π° ΡΠΊΡΠ°Π½Π΅. Π€ΡΠ°Π³ΠΌΠ΅Π½ΡΠ½ΡΠΉ ΡΠ΅ΠΉΠ΄Π΅Ρ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ° ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π΅Π³ΠΎ ΡΠ²Π΅Ρ ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π³Π»ΡΠ±ΠΈΠ½Ρ Π²ΠΎ ΡΡΠ΅ΠΉΠΌΠ±ΡΡΠ΅ΡΠ΅ (ΠΈΠ»ΠΈ ΡΡΠ΅ΠΉΠΌΠ±ΡΡΠ΅ΡΠ°Ρ ). Π§ΡΠΎΠ±Ρ ΠΎΠΊΡΠ°ΡΠΈΡΡ Π²Π΅ΡΡ ΡΡΠ΅ΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ Π² ΠΊΡΠ°ΡΠ½ΡΠΉ ΡΠ²Π΅Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΡΠΎΡΡΠΎΠΉ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ½ΡΠΉ ΡΠ΅ΠΉΠ΄Π΅Ρ:
Π¦Π²Π΅Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²Π΅ΡΡΠΈΠ½Ρ
ΠΠΎΠ»Π½ΠΎΡΡΡΡ ΠΊΡΠ°ΡΠ½ΡΠΉ ΡΡΠ΅ΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΏΡΠΎΡΡΠΎ, ΠΌΠΎΠΆΠ΅Ρ, ΡΠ΄Π΅Π»Π°Π΅ΠΌ Π΅Π³ΠΎ ΠΏΠΎΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π΅Π΅?
ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π²Π½Π΅ΡΡΠΌ ΠΊΠΎΠ΅-ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΠΎΠ±Π° ΡΠ΅ΠΉΠ΄Π΅ΡΠ°. Π‘Π½Π°ΡΠ°Π»Π° ΡΠΊΠ°ΠΆΠ΅ΠΌ ΡΠ²Π΅Ρ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· ΡΡΠ΅Ρ
Π²Π΅ΡΡΠΈΠ½. ΠΠ΅ΡΡΠΈΠ½Π½ΡΠΉ ΡΠ΅ΠΉΠ΄Π΅Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΊΠ»ΡΡΠ°ΡΡ Π² ΡΠ΅Π±Ρ ΠΌΠ°ΡΡΠΈΠ² ΡΠ²Π΅ΡΠΎΠ²:
Π’Π΅ΠΏΠ΅ΡΡ Π½ΡΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΠ²Π΅Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²Π΅ΡΡΠΈΠ½Ρ Π²ΠΎ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ½ΡΠΉ ΡΠ΅ΠΉΠ΄Π΅Ρ, ΡΡΠΎΠ±Ρ ΠΎΠ½ ΠΌΠΎΠ³ Π²ΡΠ²Π΅ΡΡΠΈ ΠΈΡ ΠΈΠ½ΡΠ΅ΡΠΏΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π²ΠΎ ΡΡΠ΅ΠΉΠΌΠ±ΡΡΠ΅Ρ. ΠΠΎΠ±Π°Π²ΠΈΠΌ Π²ΡΡ ΠΎΠ΄Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π΄Π»Ρ ΡΠ²Π΅ΡΠ° Π² Π²Π΅ΡΡΠΈΠ½Π½ΡΠΉ ΡΠ΅ΠΉΠ΄Π΅Ρ ΠΈ Π·Π°ΠΏΠΎΠ»Π½ΠΈΠΌ Π΅Ρ Π² ΡΡΠ½ΠΊΡΠΈΠΈ main :
ΠΠ°ΡΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ Π΅ΠΌΡ Π²Ρ ΠΎΠ΄Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π²ΠΎ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ½ΡΠΉ ΡΠ΅ΠΉΠ΄Π΅Ρ:
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΡΠ΅ΠΉΠ΄Π΅ΡΠΎΠ²
Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ°ΠΉΠ»Π° shader.vert Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ:
Π ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ°ΠΉΠ»Π° shader.frag ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ:
ΠΠ°ΠΌΠ΅Π½ΠΈΡΠ΅ ΠΏΡΡΡ ΠΊ glslc.exe Π½Π° ΠΏΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Vulkan SDK. ΠΠ²Π°ΠΆΠ΄Ρ ΡΠ΅Π»ΠΊΠ½ΠΈΡΠ΅ ΠΏΠΎ ΡΠ°ΠΉΠ»Ρ, ΡΡΠΎΠ±Ρ Π·Π°ΠΏΡΡΡΠΈΡΡ Π΅Π³ΠΎ.
ΠΠ°ΠΌΠ΅Π½ΠΈΡΠ΅ ΠΏΡΡΡ ΠΊ glslc Π½Π° ΠΏΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Vulkan SDK. Π‘Π΄Π΅Π»Π°ΠΉΡΠ΅ ΡΠΊΡΠΈΠΏΡ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΌ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ chmod + x compile.sh ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΠ΅ Π΅Π³ΠΎ.
ΠΡΠΈ Π΄Π²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π³ΠΎΠ²ΠΎΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΡΠ°ΠΉΠ» GLSL ΠΈ Π²ΡΠ²Π΅ΡΡΠΈ Π΅Π³ΠΎ Π² Π±Π°ΠΉΡ-ΠΊΠΎΠ΄ SPIR-V Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ»Π°Π³Π° -o (output).
ΠΡΠ»ΠΈ Π² Π²Π°ΡΠ΅ΠΌ ΡΠ΅ΠΉΠ΄Π΅ΡΠ΅ Π΅ΡΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΎΡΠΈΠ±ΠΊΠ°, ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΠΎΠΎΠ±ΡΠΈΡ Π²Π°ΠΌ Π½ΠΎΠΌΠ΅Ρ ΡΡΡΠΎΠΊΠΈ ΠΈ ΡΠΊΠ°ΠΆΠ΅Ρ Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ. Π§ΡΠΎΠ±Ρ Π² ΡΡΠΎΠΌ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΠΏΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ±ΡΠ°ΡΡ ΡΠΎΡΠΊΡ Ρ Π·Π°ΠΏΡΡΠΎΠΉ ΠΎΡΠΊΡΠ΄Π°-Π½ΠΈΠ±ΡΠ΄Ρ ΠΈΠ· ΡΠ΅ΠΊΡΡΠ° ΡΠ΅ΠΉΠ΄Π΅ΡΠΎΠ² ΠΈ ΠΏΠΎ Π½ΠΎΠ²ΠΎΠΉ Π·Π°ΠΏΡΡΡΠΈΡΡ ΡΠΊΡΠΈΠΏΡ. Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π±Π΅Π· Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ², ΡΡΠΎΠ±Ρ ΡΠ·Π½Π°ΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ ΡΠΈΠΏΡ ΡΠ»Π°Π³ΠΎΠ² ΠΎΠ½ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΌΠΎΠΆΠ΅Ρ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΡΠ²Π΅ΡΡΠΈ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄ Π² ΡΠΎΡΠΌΠ°Ρ ΡΠ΄ΠΎΠ±Π½ΡΠΉ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ, ΡΡΠΎΠ±Ρ Π²Ρ ΠΌΠΎΠ³Π»ΠΈ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ, ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ ΡΠ΅ΠΉΠ΄Π΅Ρ ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π±ΡΠ»ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Ρ Π½Π° ΡΡΠΎΠΌ ΡΡΠ°ΠΏΠ΅.
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΡΠ΅ΠΉΠ΄Π΅ΡΠΎΠ² Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ β ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ°ΠΌΡΡ ΠΏΡΠΎΡΡΡΡ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π΅, Π½ΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅ΠΉΠ΄Π΅ΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΈΠ· Π²Π°ΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π°. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π² Vulkan SDK Π΅ΡΡΡ libshaderc β Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΊΠΎΠ΄Π° GLSL Π² SPIR-V.
ΠΠ°Π³ΡΡΠ·ΠΊΠ° ΡΠ΅ΠΉΠ΄Π΅ΡΠ°
ΠΡΠΈΡΠ»ΠΎ Π²ΡΠ΅ΠΌΡ Π·Π°Π³ΡΡΠ·ΠΈΡΡ ΡΠ΅ΠΉΠ΄Π΅ΡΡ SPIR-V Π² Π½Π°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ·ΠΆΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ ΠΊ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌΡ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΡ. ΠΡΠ΅ΠΆΠ΄Π΅ Π²ΡΠ΅Π³ΠΎ Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΠΏΡΠΎΡΡΡΡ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π±ΠΈΠ½Π°ΡΠ½ΡΡ Π΄Π°Π½Π½ΡΡ ΠΈΠ· ΡΠ°ΠΉΠ»ΠΎΠ².
ΠΠ°ΡΠ΅ΠΌ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π²Π΅ΡΠ½ΡΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π² Π½Π°ΡΠ°Π»ΠΎ ΡΠ°ΠΉΠ»Π° ΠΈ ΡΡΠΈΡΠ°ΡΡ Π²ΡΠ΅ Π±Π°ΠΉΡΡ Π·Π° ΠΎΠ΄ΠΈΠ½ Π²ΡΠ·ΠΎΠ²:
Π, Π½Π°ΠΊΠΎΠ½Π΅Ρ, Π·Π°ΠΊΡΠΎΠ΅ΠΌ ΡΠ°ΠΉΠ» ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠΈΠΌ Π±ΡΡΠ΅Ρ:
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠ΅ΠΉΠ΄Π΅ΡΠ½ΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ
Π€ΡΠ½ΠΊΡΠΈΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π±ΡΡΠ΅Ρ Ρ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄ΠΎΠΌ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΈ ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΈΠ· Π½Π΅Π³ΠΎ VkShaderModule.
Π ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ ΡΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΡΠ΅ Π½Π°ΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ: Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ, ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΡΡΠΊΡΡΡΡ Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ, ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΊΠ°ΡΡΠΎΠΌΠ½ΡΠΉ Π°Π»Π»ΠΎΠΊΠ°ΡΠΎΡ ΠΈ Π²ΡΡ ΠΎΠ΄Π½Π°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ. ΠΡΡΠ΅Ρ Ρ ΠΊΠΎΠ΄ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡΡ ΡΡΠ°Π·Ρ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ΅ΠΉΠ΄Π΅ΡΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ. ΠΠ΅ Π·Π°Π±ΡΠ΄ΡΡΠ΅ Π²Π΅ΡΠ½ΡΡΡ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ ΡΠ΅ΠΉΠ΄Π΅ΡΠ½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ:
Π¨Π΅ΠΉΠ΄Π΅ΡΠ½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ ΡΠΎΠ½ΠΊΠ°Ρ ΠΎΠ±Π΅ΡΡΠΊΠ° Π΄Π»Ρ ΡΠ΅ΠΉΠ΄Π΅ΡΠ½ΠΎΠ³ΠΎ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄Π°, Π·Π°Π³ΡΡΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΈΠ· ΡΠ°ΠΉΠ»Π°, ΠΈ ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΡΡ Π² Π½Π΅ΠΌ ΡΡΠ½ΠΊΡΠΈΠΉ. ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΠΈ Π»ΠΈΠ½ΠΊΠΎΠ²ΠΊΠ° Π±Π°ΠΉΡ-ΠΊΠΎΠ΄Π° SPIR-V Π² ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ Π½Π΅ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π½ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ. ΠΡΠΎ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ½ΠΈΡΡΠΎΠΆΠΈΡΡ ΡΠ΅ΠΉΠ΄Π΅ΡΠ½ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ ΡΡΠ°Π·Ρ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ°. ΠΠΎΡΡΠΎΠΌΡ Π² ΡΡΠ½ΠΊΡΠΈΠΈ createGraphicsPipeline ΡΠ΄Π΅Π»Π°Π΅ΠΌ ΠΈΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΌΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ Π²ΠΌΠ΅ΡΡΠΎ ΡΠ»Π΅Π½ΠΎΠ² ΠΊΠ»Π°ΡΡΠ°:
Π£Π½ΠΈΡΡΠΎΠΆΠΈΠΌ ΠΈΡ Π² ΠΊΠΎΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π΄Π²ΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ² vkDestroyShaderModule. ΠΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΊΠΎΠ΄ Π² ΡΡΠΎΠΉ Π³Π»Π°Π²Π΅ Π±ΡΠ΄Π΅Ρ Π²ΡΡΠ°Π²Π»Π΅Π½ ΠΏΠ΅ΡΠ΅Π΄ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌΠΈ ΡΡΡΠΎΠΊΠ°ΠΌΠΈ:
Π‘Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΡΠ΅ΠΉΠ΄Π΅ΡΡ ΠΈ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ
Π§ΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅ΠΉΠ΄Π΅ΡΡ, Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ ΠΈΡ ΠΊ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΌ ΡΡΠ°Π΄ΠΈΡΠΌ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ°. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ° Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΡΡΠΊΡΡΡΡ VkPipelineShaderStageCreateInfo.
Π ΡΠ΅ΠΏΠ΅ΡΡ ΡΠ΄Π΅Π»Π°Π΅ΠΌ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ Π΄Π»Ρ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΠΉΠ΄Π΅ΡΠ°:
ΠΠ°ΠΊΠΎΠ½Π΅Ρ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΌΠ°ΡΡΠΈΠ², ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Π½ΡΠ΅ Π½Π°ΠΌΠΈ ΡΡΡΡΠΊΡΡΡΡ. ΠΡΠΎ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ Π½Π°ΠΌ, ΡΡΠΎΠ±Ρ ΡΡΡΠ»Π°ΡΡΡΡ Π½Π° Π½ΠΈΡ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ°.
Π ΡΡΠΎΠΉ Π³Π»Π°Π²Π΅ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π»ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ΅ΠΌΡΠ΅ ΡΡΠ°ΠΏΡ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ°. Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ Π³Π»Π°Π²Π΅ ΠΌΡ ΠΏΠ΅ΡΠ΅ΠΉΠ΄Π΅ΠΌ ΠΊ Π½Π΅ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ΅ΠΌΡΠΌ ΡΡΠ°ΠΏΠ°ΠΌ.