Skip to content
Snippets Groups Projects
Commit 0458e4cb authored by n0F4x's avatar n0F4x
Browse files

Start of lecture 2

parent c8a55ba1
No related branches found
No related tags found
No related merge requests found
!!! 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.
...@@ -49,3 +49,4 @@ markdown_extensions: ...@@ -49,3 +49,4 @@ markdown_extensions:
nav: nav:
- index.md - index.md
- 1. lecke: lectures/01/index.md - 1. lecke: lectures/01/index.md
- 2. lecke: lectures/02/index.md
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment