diff --git a/CMakeLists.txt b/CMakeLists.txt index fc7a882fa1b2f078796cdbdf0a815c40b788b31a..51775f56c9ea503cbccb09fc4ec55a41655fa982 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 598e5e8f52d0527dbfe453ab8a5dae8ca07d3a02..436502535205a36353ca32b4d07cd0cd13998f54 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 8e99fbf3e1f51e4a60c336fddbca96ed35d771d3..c1f9dfdc7ae6913c677cf223c70353b742ca654c 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 0000000000000000000000000000000000000000..38dad77cecc5d961bce9f0400300efa87c7eda4c --- /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 0000000000000000000000000000000000000000..26ff61c937cae06d3ad4cdbe155f8db13c5b5b8f --- /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; +};