From 8653885bb6780a8ed42c431fa3fd4ba274ebcb2a Mon Sep 17 00:00:00 2001
From: Gabor Galgoczy <ggabor2002@gmail.com>
Date: Thu, 15 Feb 2024 19:58:35 +0100
Subject: [PATCH] Revise the first lecture

---
 CMakeLists.txt      |  1 -
 docs/lectures/01.md | 37 ++++++++++++++++++++-----------------
 mkdocs.yml          |  2 +-
 src/Renderer.cpp    |  9 ++++-----
 src/Renderer.hpp    |  6 ++++--
 5 files changed, 29 insertions(+), 26 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 08c0ced..7fe106f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -85,7 +85,6 @@ target_compile_definitions(${PROJECT_NAME} PRIVATE
 target_link_libraries(${PROJECT_NAME} PRIVATE VulkanMemoryAllocator)
 
 # GLFW
-set(GLFW_VULKAN_STATIC ON)
 FetchContent_Declare(GLFW
         GIT_REPOSITORY https://github.com/glfw/glfw.git
         GIT_TAG 3.3.9
diff --git a/docs/lectures/01.md b/docs/lectures/01.md
index 9fc96cb..93c4607 100644
--- a/docs/lectures/01.md
+++ b/docs/lectures/01.md
@@ -48,9 +48,11 @@ Mivel ez egy Vulkan handle, ezért használat után nekünk kell "felszabadítan
     Renderer::Renderer() : m_instance{ create_instance() } {}
     ```
 
-Bizonyos játékmotorokhoz külön hardveres támogatás van, amit a Vulkan-nak ilyenkor lehet jelezni. Ez, és a használni tervezett legnagyobb API verziót egy `vk::ApplicationInfo` struct-ba szerveződik. Mi az alapbeállításokat fogjuk használni, ami olyan, mintha az 1.0-s verziót kértük volna.
+Bizonyos játékmotorokhoz és appokhoz külön hardveres támogatás van, amit a Vulkan-nak ilyenkor lehet jelezni.  
+Az applikációnk által használni tervezett legnagyobb API verzió *1.0* lesz.  
+Ezeket az értékeket gyűjti össze a `vk::Application` struct, amelyet mi default-inicializálunk.
 
-??? example "Hozzunk létre egy `vk::ApplicationInfo` típusú változót!"
+??? example "Hozzuk létre a `vk::ApplicationInfo`-t!"
 
     ```cpp
     constexpr vk::ApplicationInfo application_info{};
@@ -60,7 +62,7 @@ Bizonyos játékmotorokhoz külön hardveres támogatás van, amit a Vulkan-nak
 
     A mi kódunk és a Vulkan függvényeken keresztül hívott kód közé [**layer**](https://renderdoc.org/vulkan-layer-guide.html)-eket helyezhetünk el profiling-hoz, debug-oláshoz, stb...
 
-Debug-oláshoz beállítünk [egy layer](https://vulkan-tutorial.com/Drawing_a_triangle/Setup/Validation_layers)-t, ami majd üzenet küld, ha elrontottunk valamit.
+Debug-oláshoz beállítünk [egy layer](https://vulkan-tutorial.com/Drawing_a_triangle/Setup/Validation_layers)-t, ami majd üzenet küld, ha elrontanánk valamit.
 
 ??? example "Ezt egy globális változóba szervezzük, mert még később is jól jöhet."
 
@@ -74,9 +76,9 @@ Debug-oláshoz beállítünk [egy layer](https://vulkan-tutorial.com/Drawing_a_t
 
 !!! info ""
 
-    A debug üzenetek megformázásához szokás egy úgynevezett [DebugUtilsMessenger](https://vulkan-tutorial.com/Drawing_a_triangle/Setup/Validation_layers#page_Message-callback) használata. Mi ezzel most nem foglalkozunk.
+    A debug üzenetek megformázásához szokás [DebugUtilsMessenger](https://vulkan-tutorial.com/Drawing_a_triangle/Setup/Validation_layers#page_Message-callback)-t használni. Mi ezzel most nem foglalkozunk.
 
-Ezeknék több mindent is beállíthatnánk még az Instance létrehozásához, de egyelőre megelékszünk ennyivel.
+Ezeknél több mindent is beállíthatnánk még az Instance létrehozásához, de egyelőre megelégszünk ennyivel.
 
 !!! example ""
 
@@ -105,7 +107,7 @@ Ezeknék több mindent is beállíthatnánk még az Instance létrehozásához,
 
 ## Physical Device
 
-Minden a gépen jelen levő Vulkan-képes processzort egy `vk::PhysicalDevice` reprezentál könyvtár. Ezeket a `vk::Instance::enumeratePhysicalDevices` függvénnyel le is kérhetjük.
+Minden a gépen jelen levő Vulkan-képes processzort egy `vk::PhysicalDevice`-al reprezentál könyvtár. Ezeket a `vk::Instance::enumeratePhysicalDevices` függvénnyel le is kérhetjük.
 
 Érdemes egy diszkrét GPU-val dolgozni, ha az jelen van, rosszabb esetben integrálttal. Így válasszuk ki a számunkra legmegfelelőbb egységet.
 
@@ -150,9 +152,9 @@ Minden a gépen jelen levő Vulkan-képes processzort egy `vk::PhysicalDevice` r
 
 ## (Logical) Device
 
-Mielőtt elkezdünk a GPU-n dolgozni, azelőtt elengedhetetlen a használni tervezett funkciók megadása. Habár, mi most ezek közül nem fogunk sokat használni, azért érdemes ezt is megemlíteni.
+Mielőtt elkezdünk a GPU-n dolgozni, azelőtt elengedhetetlen a használni tervezett extra funkciók megadása. Egyelőre ezzel mi még nem élünk.
 
-A (Logical) Device szintaktikailag nagyon hasonlít az Instance-hez. Itt is lesz olyan amit majd csak később állítunk be. A mostani alkalommal egyedül a `vk::Queue`-kra fogunk koncentrálni.
+A (Logical) Device szintaktikailag nagyon hasonlít az Instance-hez. Itt is lesz olyan, amit majd csak később állítunk be. A mostani alkalommal egyedül a `vk::Queue`-kra fogunk koncentrálunk.
 
 A grafikus kártya egy hihetetlenül parallelizált eszköz. Ám ennek a kihasználásához adatot kell neki küldeni, és megmondani hogy mit csináljon. Ez a parancs feldolgozás *Queue*-kon keresztül történik, amelyek képesek párhuzamosan több "command" végrehajtására.
 
@@ -162,7 +164,7 @@ A grafikus kártya egy hihetetlenül parallelizált eszköz. Ám ennek a kihaszn
 
 Egy `vk::Queue` többféle feladat végrehajtására is képes - legyen az grafikai, általános, adat-átvitel, vagy valami más. A GPU tervezők számunkra a hasonló tulajdonságokkal rendelkező *Queue*-kat úgynevezett *Queue family*-kben teszik elérhetővé.
 
-Válasszunk ki egy grafikai munkát támogató családot (ezek megkötése, hogy adat-átvitelre is képesek legyenek), és abból is egy *Queue*-t. A mi céljainkhoz ez az egy elég lesz mindenre.
+Válasszunk ki egy grafikai munkát támogató családot (ennek megkötése, hogy adat-átvitelt is támogasson), és abból is **egy** *Queue*-t. A mi céljainkhoz ez az egy elég lesz mindenre.
 
 !!! example ""
 
@@ -183,7 +185,7 @@ Válasszunk ki egy grafikai munkát támogató családot (ezek megkötése, hogy
     }
     ```
 
-Végül hozzuk létre a *Device*-t is.
+Adott minden, hogy a *Device*-t is létrehozzuk.
 
 !!! example ""
 
@@ -224,8 +226,10 @@ Végül hozzuk létre a *Device*-t is.
 
     private:
         vk::UniqueInstance m_instance;
-        vk::UniqueDevice m_device;
-        vk::Queue m_graphics_queue;
+        vk::PhysicalDevice m_physical_device;
+        uint32_t           m_graphics_queue_family;
+        vk::UniqueDevice   m_device;
+        vk::Queue          m_graphics_queue;
     };
     ```
 
@@ -324,10 +328,9 @@ Végül hozzuk létre a *Device*-t is.
 
     Renderer::Renderer()
         : m_instance{ create_instance() },
-        m_device{ create_device(choose_physical_device(*m_instance)) },
-        m_graphics_queue{ m_device->getQueue(
-            find_graphics_queue_family(choose_physical_device(*m_instance)),
-            0
-        ) }
+        m_physical_device{ choose_physical_device(*m_instance) },
+        m_graphics_queue_family{ find_graphics_queue_family(m_physical_device) },
+        m_device{ create_device(m_physical_device) },
+        m_graphics_queue{ m_device->getQueue(m_graphics_queue_family, 0) }
     {}
     ```
diff --git a/mkdocs.yml b/mkdocs.yml
index e090ce4..626d863 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -47,4 +47,4 @@ markdown_extensions:
   - pymdownx.tabbed:
       alternate_style: true
 nav:
-  - 1. alkalom: lectures/01.md
+  - 1. lecke: lectures/01.md
diff --git a/src/Renderer.cpp b/src/Renderer.cpp
index 76a1ecb..99326af 100644
--- a/src/Renderer.cpp
+++ b/src/Renderer.cpp
@@ -92,9 +92,8 @@ const std::vector<const char*> g_layers{
 
 Renderer::Renderer()
     : m_instance{ create_instance() },
-      m_device{ create_device(choose_physical_device(*m_instance)) },
-      m_graphics_queue{ m_device->getQueue(
-          find_graphics_queue_family(choose_physical_device(*m_instance)),
-          0
-      ) }
+      m_physical_device{ choose_physical_device(*m_instance) },
+      m_graphics_queue_family{ find_graphics_queue_family(m_physical_device) },
+      m_device{ create_device(m_physical_device) },
+      m_graphics_queue{ m_device->getQueue(m_graphics_queue_family, 0) }
 {}
diff --git a/src/Renderer.hpp b/src/Renderer.hpp
index e55d085..8a2613f 100644
--- a/src/Renderer.hpp
+++ b/src/Renderer.hpp
@@ -8,6 +8,8 @@ public:
 
 private:
     vk::UniqueInstance m_instance;
-    vk::UniqueDevice m_device;
-    vk::Queue m_graphics_queue;
+    vk::PhysicalDevice m_physical_device;
+    uint32_t           m_graphics_queue_family;
+    vk::UniqueDevice   m_device;
+    vk::Queue          m_graphics_queue;
 };
-- 
GitLab