ํ๋ก์ ํธ ๋น๋ํ๊ธฐ
https://github.com/vblanco20-1/vulkan-guide/์ ์๋ Git ํ๋ก์ ํธ๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ์ผ๋ก ์์ํฉ๋๋ค. all-chapters ๋ธ๋์น๋ ์ ์ฒด ํ๋ก์ ํธ์ ์์ ์ฝ๋๋ฅผ ํฌํจํ๋ฉฐ, starting-point ๋ธ๋์น๋ ์ด๊ธฐ ๋น ํ๋ก์ ํธ๋ฅผ ํฌํจํฉ๋๋ค. ๋ ๋ธ๋์น๋ฅผ ๋ค๋ฅธ ํด๋๋ก ๊ฐ์ ธ์ ์์ ํ๋ฉด์ ๋งํ ๋ ๋ง๋ค all-chapters ๋ธ๋์น์ ์ฝ๋๋ฅผ ํ์ธํด๋ณด๋ ๋ฐฉ๋ฒ์ ๊ถ์ฅํฉ๋๋ค. ๋ง์ฝ Git์ ์ฌ์ฉํ์ง ์๊ณ ์ง์ ๋ค์ด๋ก๋ ๋ฐ๊ธฐ๋ฅผ ์ํ๋ค๋ฉด ์๋ ๋งํฌ๋ฅผ ํตํด ๋ค์ด๋ก๋ ํ ์ ์์ต๋๋ค.
ํ๋ก์ ํธ๋ฅผ ๋น๋ํ๊ธฐ ์ํด Visual Studio๊ฐ ํ์ํฉ๋๋ค. ํ๋ก์ ํธ์ ์ฝ๋๋ ํฌ๋ก์ค ํ๋ซํผ์ผ๋ก ์๋ํ์ง๋ง ์ด ๊ฐ์ด๋์์๋ Window ์ค์ฌ์ผ๋ก ์ค๋ช ํ ๊ฒ์ ๋๋ค.
๋จผ์ , Vulkan SDK https://vulkan.lunarg.com/sdk/home๋ฅผ ์ค์นํฉ๋๋ค. ์ด๋ Vulkan ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋๋ ๋ฐ ํ์ํ ํค๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ด๊ณ ์์ต๋๋ค. ์ด๋ ์ ์ญ ์์น์ ์ค์น๋๋ฏ๋ก ์ค์น์์น๋ฅผ ๊ฑฑ์ ํ ํ์๋ ์์ต๋๋ค.
๊ทธ ๋ค์, CMake๋ฅผ ์ค์ ํฉ๋๋ค. ์ด๋ ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ ๋น๋ ์์คํ ์ ๋๋ค.https://cmake.org/.
CMake๊ฐ ์ค์น๋๋ฉด CMake-gui๋ฅผ ์ฌ์ฉํด ํ๋ก์ ํธ ๋ฃจํธ ๊ฒฝ๋ก์ CMakeLists๋ฅผ ์ฝ๋๋ค. ๊ทธ ํ, Configure ๋ฒํผ์ ๋๋ฆ ๋๋ค.
๋ง์ฝ ์ด ์ง์ ์์ Vulkan_INCLUDE_DIR ํน์ Vulkan_LIBRARY๋ฅผ ์ฐพ์ง ๋ชปํ๋ค๋ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค๋ฉด, Vulkan SDK ์ค์น๊ฐ ์๋ฃ๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ์ธ์. ๊ทธ๋ฆฌ๊ณ CMake-Gui๋ฅผ ์ฌ์์ ํ ํ ๋ค์ Configure ๋ฒํผ์ ๋๋ฌ๋ณด์ธ์.
์ด์ ์์กด์ฑ์ด ์ค์ ๋์์ต๋๋ค. CMake์์ Configure์ด ๋๊ณ ๋์ Generate๋ฅผ ๋๋ฌ Visual Studio(ํน์ ๋ค๋ฅธ IDE)์ ๋ง๋ ํ๋ก์ ํธ ํ์ผ์ ๋ง๋ค ์ ์์ต๋๋ค.
Visual Studio์์ ์์ง์ ์์ ํ๋ก์ ํธ๋ก ์ค์ ํ ํ, ์ด์ F5(๋๋ฒ๊น ์์)์ ๋๋ฌ ์ปดํ์ผํ๊ณ ์ด๋ฅผ ์คํํ ์ ์์ต๋๋ค.
Third party ๋ผ์ด๋ธ๋ฌ๋ฆฌ
third_party ํด๋ ํ์์๋ ํํ ๋ฆฌ์ผ์์ ์ฌ์ฉํ ์ฌ๋ฌ ๋ค์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์ต๋๋ค. ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ์์ค ์ฝ๋ ํํ๋ก ํด๋์ ํฌํจ๋์ด ์์ต๋๋ค. ์ด ์ค ์ผ๋ถ๋ ๊ณต๊ฐ ์ ์ฅ์์ ์ฝ๋์ ๋ค๋ฅด๊ฒ ์์ ๋์๊ฑฐ๋ ์ถ๊ฐ๋ ๋ถ๋ถ์ด ์์ต๋๋ค.
์๋๋ ์ฌ์ฉํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ชฉ๋ก์ ๋๋ค.
- vulkan SDK: third_party ํด๋์ ์๋ ๊ฒ์ด์ง๋ง ํ์์ ์ธ ๊ฒ์ผ๋ก, ์์์ ์ค๋ช ํ๋๋ก ์ค์นํด์ผ ํฉ๋๋ค.
- vkbootstrap: Vulkan ์ด๊ธฐํ๋ฅผ ๋จ์ํ๊ฒ ๋ง๋ค์ด์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ GPU๋ฅผ ์ ํํ๊ฑฐ๋ ์ด๊ธฐํ ๊ตฌ์กฐ์ฒด๋ฅผ ์ค์ ํ๋ ๊ฒ๊ณผ ๊ฐ์ ์์ ์ ์ํํด์ค๋๋ค.
- VMA: Vulkan Memory Allocator์ ๋๋ค. ์ด๋ GPU ๊ตฌ์กฐ์ฒด๋ฅผ ์ํ ๊ณ ์ฑ๋ฅ ๋ฉ๋ชจ๋ฆฌ ํ ๋น๊ธฐ๋ฅผ ๊ตฌํํฉ๋๋ค. ํ ๋น์๋ฅผ ์ฐ๋ฆฌ๊ฐ ์ง์ ๊ตฌํํ๋ ๊ฒ ๋์ ์ด๋ฅผ ์ฌ์ฉํ ๊ฒ์ ๋๋ค. ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ฐ๋ฆฌ์ GPU ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํด์ค ๊ฒ์ ๋๋ค.
- SDL: ์ฐฝ์ ๋ง๋ค๊ณ ์ ๋ ฅ, ์ค๋์ค, ๊ธฐํ ๋ค์ํ ๊ฒ์ ์ํํ ์ ์๋ ๊ณ ์ฑ๋ฅ ๋ฉํฐํ๋ซํผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. ์ด ํํ ๋ฆฌ์ผ์์๋ SDL์ ์ฐฝ ์์ฑ๊ณผ ์ ๋ ฅ ์ฒ๋ฆฌ ๋ถ๋ถ์ ์ฌ์ฉํ ๊ฒ์ ๋๋ค.
- GLM : ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. ๋ฒกํฐ, ํ๋ ฌ ๋ฑ์ ์ง์ํฉ๋๋ค.
- {fmt} : ๋ฌธ์์ด ํฌ๋งทํ ๊ณผ ์ฝ์ ์ถ๋ ฅ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. ์ฑ๋ฅ์ด ๋ฐ์ด๋๋ฉฐ ๋ฌธ์์ด ์ถ๋ ฅ๊ณผ ๋ค์ํ ํฌ๋งทํ ์ต์ ์ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ std::cout ๋์ ์ฌ์ฉํ ๊ฒ์ ๋๋ค.
- stb_image: PNG ํน์ jpeg ์ด๋ฏธ์ง๋ฅผ ๋ถ๋ฌ์ค๋ ๋ฐ ์ฌ์ฉํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
- dear imgui: ๋๋ฒ๊น ์ธํฐํ์ด์ค๋ฅผ ์ํ ๋งค์ฐ ์ ์ฉํ UI ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. ํ์ด๋จธ๋ ๊ธฐํ UI ์ฐฝ์ ๋ง๋ค ๋ ์ฌ์ฉํ ๊ฒ์ ๋๋ค.
- fastgltf: ๊ณ ์ฑ๋ฅ GLTF ๋ก๋ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
Next: โCode Walkthrough - KOโ