Link

ํ”„๋กœ์ ํŠธ ๋นŒ๋“œํ•˜๊ธฐ

https://github.com/vblanco20-1/vulkan-guide/์— ์žˆ๋Š” Git ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์œผ๋กœ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. all-chapters ๋ธŒ๋žœ์น˜๋Š” ์ „์ฒด ํ”„๋กœ์ ํŠธ์˜ ์˜ˆ์‹œ ์ฝ”๋“œ๋ฅผ ํฌํ•จํ•˜๋ฉฐ, starting-point ๋ธŒ๋žœ์น˜๋Š” ์ดˆ๊ธฐ ๋นˆ ํ”„๋กœ์ ํŠธ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ๋‘ ๋ธŒ๋žœ์น˜๋ฅผ ๋‹ค๋ฅธ ํด๋”๋กœ ๊ฐ€์ ธ์™€ ์ž‘์—…ํ•˜๋ฉด์„œ ๋ง‰ํž ๋•Œ ๋งˆ๋‹ค all-chapters ๋ธŒ๋žœ์น˜์˜ ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•ด๋ณด๋Š” ๋ฐฉ๋ฒ•์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ Git์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ง์ ‘ ๋‹ค์šด๋กœ๋“œ ๋ฐ›๊ธฐ๋ฅผ ์›ํ•œ๋‹ค๋ฉด ์•„๋ž˜ ๋งํฌ๋ฅผ ํ†ตํ•ด ๋‹ค์šด๋กœ๋“œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

All Chapters

Starting Point

ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œํ•˜๊ธฐ ์œ„ํ•ด 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(๋””๋ฒ„๊น… ์‹œ์ž‘)์„ ๋ˆŒ๋Ÿฌ ์ปดํŒŒ์ผํ•˜๊ณ  ์ด๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

vs

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โ€