diff --git a/engine/xe_engine.cpp b/engine/xe_engine.cpp new file mode 100644 index 0000000..8d2655a --- /dev/null +++ b/engine/xe_engine.cpp @@ -0,0 +1,17 @@ +#include "xe_engine.hpp" +#include "xe_descriptors.hpp" + +namespace xe { + +XeEngine::XeEngine(int width, int height, std::string name) + : xeWindow{width, height, name}, xeDevice{xeWindow}, xeRenderer{xeWindow, xeDevice} {}; + +void XeEngine::loadDescriptorPool() { + xeDescriptorPool = XeDescriptorPool::Builder(xeDevice) + .setMaxSets(XeSwapChain::MAX_FRAMES_IN_FLIGHT) + .addPoolSize(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, XeSwapChain::MAX_FRAMES_IN_FLIGHT) + .addPoolSize(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, XeSwapChain::MAX_FRAMES_IN_FLIGHT) + .build(); +} + +} \ No newline at end of file diff --git a/engine/xe_engine.hpp b/engine/xe_engine.hpp new file mode 100644 index 0000000..93d3f8b --- /dev/null +++ b/engine/xe_engine.hpp @@ -0,0 +1,40 @@ +#pragma once + +#include "xe_window.hpp" +#include "xe_device.hpp" +#include "xe_renderer.hpp" + +namespace xe { + +class XeEngine { + + public: + + XeEngine(int width, int height, std::string name); + ~XeEngine() {}; + + XeEngine(const XeEngine&) = delete; + XeEngine operator=(const XeEngine&) = delete; + + const XeWindow& getWindow() const { + return xeWindow; + }; + + const XeRenderer& getRenderer() const { + return xeRenderer; + }; + + + private: + + void loadDescriptorPool(); + + XeWindow xeWindow; + XeDevice xeDevice; + XeRenderer xeRenderer; + + std::unique_ptr xeDescriptorPool{}; + std::unique_ptr xeDescriptorSetLayout; +}; + +} \ No newline at end of file diff --git a/engine/xe_renderer.cpp b/engine/xe_renderer.cpp index 2ed4f51..0c14cec 100644 --- a/engine/xe_renderer.cpp +++ b/engine/xe_renderer.cpp @@ -3,6 +3,7 @@ #include "xe_device.hpp" #include "xe_game_object.hpp" #include "xe_swap_chain.hpp" +#include "xe_descriptors.hpp" #include "xe_window.hpp" #include #include @@ -16,6 +17,7 @@ namespace xe { XeRenderer::XeRenderer(XeWindow& window, XeDevice& device) : xeWindow{window}, xeDevice{device} { recreateSwapChain(); createCommandBuffers(); + loadDescriptorPool(); } XeRenderer::~XeRenderer() { freeCommandBuffers(); } diff --git a/src/first_app.cpp b/src/first_app.cpp index 6a5bfa9..cc8f634 100755 --- a/src/first_app.cpp +++ b/src/first_app.cpp @@ -24,12 +24,7 @@ struct GlobalUbo { glm::vec3 lightDirection = glm::normalize(glm::vec3{-1.f, 3.f, 1.f}); }; -FirstApp::FirstApp() { - globalPool = XeDescriptorPool::Builder(xeDevice) - .setMaxSets(XeSwapChain::MAX_FRAMES_IN_FLIGHT) - .addPoolSize(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, XeSwapChain::MAX_FRAMES_IN_FLIGHT) - .addPoolSize(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, XeSwapChain::MAX_FRAMES_IN_FLIGHT) - .build(); +FirstApp::FirstApp() : xeEngine{WIDTH, HEIGHT, "Hello, Vulkan!"} { loadGameObjects(); } diff --git a/src/first_app.hpp b/src/first_app.hpp index bcdf33e..081113d 100755 --- a/src/first_app.hpp +++ b/src/first_app.hpp @@ -1,8 +1,6 @@ #pragma once -#include "xe_renderer.hpp" -#include "xe_window.hpp" -#include "xe_device.hpp" +#include "xe_engine.hpp" #include "xe_game_object.hpp" #include "xe_descriptors.hpp" @@ -26,11 +24,8 @@ class FirstApp { private: void loadGameObjects(); - XeWindow xeWindow{WIDTH, HEIGHT, "Hello Vulkan!"}; - XeDevice xeDevice{xeWindow}; - XeRenderer xeRenderer{xeWindow, xeDevice}; + XeEngine xeEngine; - std::unique_ptr globalPool{}; std::vector gameObjects; }; } \ No newline at end of file