summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engine/xe_engine.cpp17
-rw-r--r--engine/xe_engine.hpp40
-rw-r--r--engine/xe_renderer.cpp2
-rwxr-xr-xsrc/first_app.cpp7
-rwxr-xr-xsrc/first_app.hpp9
5 files changed, 62 insertions, 13 deletions
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> xeDescriptorPool{};
+ std::unique_ptr<xe::XeDescriptorSetLayout> 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 <memory>
#include <vulkan/vulkan_core.h>
@@ -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<XeDescriptorPool> globalPool{};
std::vector<XeGameObject> gameObjects;
};
} \ No newline at end of file