From af725e5030ae37df370ffd0dfcd4b13211a7eda9 Mon Sep 17 00:00:00 2001
From: Gabor Galgoczy <ggabor2002@gmail.com>
Date: Wed, 14 Feb 2024 13:51:25 +0100
Subject: [PATCH] Start documenting Instance creation

---
 CMakeLists.txt      |  1 +
 docs/lectures/01.md | 24 ++++++++++++++++++++----
 src/CMakeLists.txt  |  1 +
 src/Renderer.cpp    |  5 +++++
 src/Renderer.hpp    | 11 +++++++++++
 5 files changed, 38 insertions(+), 4 deletions(-)
 create mode 100644 src/Renderer.cpp
 create mode 100644 src/Renderer.hpp

diff --git a/CMakeLists.txt b/CMakeLists.txt
index fc7a882..51775f5 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -66,6 +66,7 @@ target_compile_definitions(${PROJECT_NAME} PRIVATE
 if (engine_debug)
     target_compile_definitions(${PROJECT_NAME} PRIVATE ENGINE_VULKAN_DEBUG)
 endif ()
+target_precompile_headers(${PROJECT_NAME} PRIVATE <vulkan/vulkan.hpp>)
 target_link_libraries(${PROJECT_NAME} PRIVATE Vulkan::Vulkan)
 
 # VulkanMemoryAllocator
diff --git a/docs/lectures/01.md b/docs/lectures/01.md
index 598e5e8..4365025 100644
--- a/docs/lectures/01.md
+++ b/docs/lectures/01.md
@@ -1,14 +1,14 @@
 # Inicializálás
 
-Mielőtt nekilátnál a kódolásnak, hozz létre egy kiinduló projektet. A példák kiinduló kódja megtalálható [ezen a linken](https://git.sch.bme.hu/kszk/devteam/vulkan-workshop/-/tree/master/lectures/lecture_01/starter-project?ref_type=heads).
+Mielőtt nekilátnál a kódolásnak, hozz létre egy kiinduló projektet. A példák kiinduló kódja megtalálható [ezen a linken](https://git.sch.bme.hu/kszk/devteam/vulkan-workshop/-/tree/starter).
 
 A példák Vulkan mellett [glm](https://github.com/g-truc/glm), [GLFW](https://www.glfw.org/) és [VulkanMemoryAllocator](https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator?tab=readme-ov-file) könyvtárakat használnak.
 
-Érdemes még a [bevezető előadás](../Vulkan%20Bevezető.pptx) áttanulmányozása.
+Érdemes még a [bevezető előadás](https://git.sch.bme.hu/kszk/devteam/vulkan-workshop/-/blob/master/docs/Vulkan%20Bevezet%C5%91.pptx?ref_type=heads) áttanulmányozása.
 
 ## Általános
 
-A workshop folyamán a [Vulkan hivatalos C++ binding-ja](https://github.com/KhronosGroup/Vulkan-Hpp)it fogjuk használni, és a kódok is C++20-ban lettek megírva.
+A workshop folyamán a [Vulkan hivatalos C++ binding-ja](https://github.com/KhronosGroup/Vulkan-Hpp)it fogjuk használni, és a kód részletek is C++20-ban lettek megírva.
 
 ## Instance
 
@@ -18,5 +18,21 @@ Bármilyen Vulkan kód kiinduló eleme egy `vk::Instance` (C-ben `VkInstance`) o
 
     A C++ binding-ban [RAII támogatás](https://github.com/KhronosGroup/Vulkan-Hpp/blob/main/vk_raii_ProgrammingGuide.md) is adott. De ez tapasztalat alapján nekünk inkább csak a fordítást fogja lassítani, minthogy a kódolásban könnyedséget okozna.
 
-Mivel ez egy Vulkan handle, ezért használat után nekünk kell "felszabadítani". Habár nem best practice, de mi minden ilyen handle helyett egy C++ `unique_ptr`-hez hasonló struktúrába fogjuk becsomagolni ezeket, amit a Vulkan binding ad.
+Mivel ez egy Vulkan handle, ezért használat után nekünk kell "felszabadítani". Habár nem best practice, de mi minden ilyen handle helyett egy C++ `unique_ptr`-hez hasonló struktúrával fogjuk használni ezeket, amit a Vulkan binding biztosít.
+
+??? example "Hozzuk létre a `Renderer` osztály!"
+
+    ```cpp title="Renderer.hpp"
+    #pragma once
+
+    #include <vulkan/vulkan.hpp>
+
+    class Renderer {
+    public:
+        Renderer();
+        
+    private:
+        vk::UniqueInstance m_instance;
+    };
+    ```
 
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 8e99fbf..c1f9dfd 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -1,4 +1,5 @@
 target_sources(${PROJECT_NAME} PRIVATE
         App.cpp
         main.cpp
+        Renderer.cpp
 )
\ No newline at end of file
diff --git a/src/Renderer.cpp b/src/Renderer.cpp
new file mode 100644
index 0000000..38dad77
--- /dev/null
+++ b/src/Renderer.cpp
@@ -0,0 +1,5 @@
+#include "Renderer.hpp"
+
+[[nodiscard]] auto create_instance() -> vk::UniqueInstance {}
+
+Renderer::Renderer() : m_instance{ create_instance() } {}
diff --git a/src/Renderer.hpp b/src/Renderer.hpp
new file mode 100644
index 0000000..26ff61c
--- /dev/null
+++ b/src/Renderer.hpp
@@ -0,0 +1,11 @@
+#pragma once
+
+#include <vulkan/vulkan.hpp>
+
+class Renderer {
+public:
+    Renderer();
+
+private:
+    vk::UniqueInstance m_instance;
+};
-- 
GitLab