From 0458e4cb8151550467f3f78074153b8aa76191c5 Mon Sep 17 00:00:00 2001
From: n0F4x <ggabor2002@gmail.com>
Date: Tue, 18 Jun 2024 00:18:10 +0200
Subject: [PATCH] Start of lecture 2

---
 docs/lectures/02/index.md | 73 +++++++++++++++++++++++++++++++++++++++
 mkdocs.yml                |  1 +
 2 files changed, 74 insertions(+)
 create mode 100644 docs/lectures/02/index.md

diff --git a/docs/lectures/02/index.md b/docs/lectures/02/index.md
new file mode 100644
index 0000000..049721e
--- /dev/null
+++ b/docs/lectures/02/index.md
@@ -0,0 +1,73 @@
+!!! info ""
+
+    A leckéhez tartozó teljes kód megtalálható a hozzá tartozó [branch-en](https://git.sch.bme.hu/kszk/devteam/vulkan-workshop/-/tree/lecture_02-final).
+
+# Megjelenítés
+
+## Felkészülés
+
+Kezdés előtt ajánlott az [anyaghoz tartozó előadás](./Megjelenítés.pptx) átnézése.
+Az előző leckének a kiegészített kódja megtalálható a `lecture_02-starter` branch-en.
+Ez lesz a mostani kiinduló projektunk.
+
+!!! note ""
+
+    A [GLFW](https://www.glfw.org/) ablakozó könyvtárat fogjuk  használni, amihez előre elkészítettem egy minimális wrapper osztályt.
+
+## *Extensions*
+
+A Vulkan API *core* részét extension-ökkel szokták bővíteni.
+Ezek a bővítmények nem garantáltak, hogy minden esetben elérhetőek/támogatottak; és mint minden használni kívánt dolgot, a kívánt extension-öket is **előre jelezni kell**.
+
+Jelen alkalommal 2-féle bővítményre lesz szükségünk, hogy megjelenítéssel tudjunk foglalkozni.
+Ezek a `VK_KHR_surface` és platform specifikus társai, illetve a `VK_KHR_swapchain`.
+
+## `vk::SurfaceKHR`
+
+A monitor és az ablak szorosan nem tartoznak a grafikus API-k hatásköre alá.
+Vulkan-ban, lazán csatoltan, egy ablakozó könyvtár által készített ablak felületre tudunk rajzolni.
+A kódunkban, hogy ezt a csatolást megteremtsük, vegyünk fel egy `const Window&` paramétert a `Renderer` konstruktorába.
+
+```cpp title="Renderer.hpp"
+class Renderer {
+public:
+    explicit Renderer(const Window& window);
+
+private:
+    // ...
+    vk::UniqueSurfaceKHR m_surface;
+    // ...
+```
+
+```cpp title="Renderer.cpp"
+Renderer::Renderer(const Window& window)
+    // ...
+    m_surface{ window.create_vulkan_surface(m_instance.get()) },
+    // ...
+```
+
+```cpp title="main.cpp"
+Window   window{ 1'280, 720, "Vulkan workshop" };
+Renderer renderer{ window };
+```
+
+Ha most futtatjuk az alkalmazást, egy felvillanó ablakot látunk.
+Azonban egy csúnya hibaüzenet is megjelenik.
+
+Engedélyezzük a felszínhez tartozó extension-öket, hogy minden simán menjen.
+
+```cpp title="Renderer.cpp"
+[[nodiscard]]
+static auto create_instance() -> vk::UniqueInstance
+    // ...
+    const vk::InstanceCreateInfo create_info{
+        // ...
+        .enabledExtensionCount = static_cast<uint32_t>(Window::vulkan_instance_extensions().size()),
+        .ppEnabledExtensionNames = Window::vulkan_instance_extensions().data(),
+    };
+    // ...
+```
+
+## Swapchain
+
+A `vk::SurfaceKHR`-hez hasonlóan létezik egy `vk::SwapchainKHR` is, amivel "rajzolni" tudunk a kapott ablakfelszínre.
diff --git a/mkdocs.yml b/mkdocs.yml
index 15bc6ea..29203f8 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -49,3 +49,4 @@ markdown_extensions:
 nav:
   - index.md
   - 1. lecke: lectures/01/index.md
+  - 2. lecke: lectures/02/index.md
-- 
GitLab