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