VulkanEngine 0.1
Graphics engine using Vulkan
Loading...
Searching...
No Matches
VulkanManager.h
1// Copyright (c) 2024 Michael Carlie. All Rights Reserved.
2//
3// This software is released under the MIT License.
4// https://opensource.org/licenses/MIT
5
6#ifndef INCLUDE_VULKANENGINE_VULKANMANAGER_H_
7#define INCLUDE_VULKANENGINE_VULKANMANAGER_H_
8
9#include <VulkanEngine/Camera.h>
10#include <VulkanEngine/Device.h>
11#include <VulkanEngine/IndexAttribute.h>
12#include <VulkanEngine/MeshBase.h>
13#include <VulkanEngine/Shader.h>
14#include <VulkanEngine/UniformBuffer.h>
15#include <VulkanEngine/VertexAttribute.h>
16#include <VulkanEngine/Window.h>
17
18// Support latest vk_mem_alloc with older Vulkan SDK headers.
19#ifndef VK_API_VERSION_MAJOR
20#define VK_API_VERSION_MAJOR(version) VK_VERSION_MAJOR(version)
21#endif
22
23#ifndef VK_API_VERSION_MINOR
24#define VK_API_VERSION_MINOR(version) VK_VERSION_MINOR(version)
25#endif
26
27#ifndef VK_API_VERSION_PATCH
28#define VK_API_VERSION_PATCH(version) VK_VERSION_PATCH(version)
29#endif
30#include <vk_mem_alloc.h>
31
32#include <Eigen/Eigen>
33#include <iostream>
34#include <memory>
35
36namespace VulkanEngine {
37
38// Forward decleration
39template <vk::Format format, vk::ImageType image_type, vk::ImageTiling tiling,
40 vk::SampleCountFlagBits // NOLINT(whitespace/indent_namespace)
41 sample_count_flags> // NOLINT(whitespace/indent_namespace)
42class Image;
43class RenderPass;
44class Framebuffer;
45class Swapchain;
46
50 private:
54
56 static std::shared_ptr<VulkanManager>& getInstanceInternal();
57
58 public:
61
63 VulkanManager(const VulkanManager&) = delete;
64
66 void operator=(const VulkanManager&) = delete;
67
71 static VulkanManager& getInstance();
72
74 static void resetInstance();
75
77 static void destroyInstance();
78
81 bool initialize(const std::shared_ptr<Window> _window);
82
83 vk::CommandBuffer getCurrentCommandBuffer();
84
85 void waitForFence();
86
87 vk::Framebuffer getCurrentSwapchainFramebuffer();
88
90 void drawImage();
91
92 std::shared_ptr<Device> getDevice() { return device; }
93
94 vk::Instance getVkInstance() const { return vk_instance; }
95
96 const std::shared_ptr<RenderPass> getDefaultRenderPass() const {
97 return default_render_pass;
98 }
99
100 const size_t getCurrentFrame() const { return current_frame; }
101
102 const size_t getFramesInFlight() const { return frames_in_flight; }
103
104 private:
105 void cleanup();
106
108 vk::Instance vk_instance;
109
111 std::shared_ptr<Window> window;
112
113 std::shared_ptr<Device> device;
114 std::shared_ptr<Swapchain> swapchain;
115 std::shared_ptr<RenderPass> default_render_pass;
116
117 size_t frames_in_flight;
118 size_t current_frame;
119
120 bool initialized;
121};
122
123} // namespace VulkanEngine
124
125#endif // INCLUDE_VULKANENGINE_VULKANMANAGER_H_
Definition: VulkanManager.h:49
~VulkanManager()
Destructor.
Definition: VulkanManager.cpp:49
static VulkanManager & getInstance()
Definition: VulkanManager.cpp:60
VulkanManager(const VulkanManager &)=delete
Delete copy constructor to disallow duplicates.
static void resetInstance()
Reset the singleton instance.
Definition: VulkanManager.cpp:64
void operator=(const VulkanManager &)=delete
Delete assignment operator to disallow duplicates.
bool initialize(const std::shared_ptr< Window > _window)
Definition: VulkanManager.cpp:69
void drawImage()
Executes all command buffers and swaps buffers.
Definition: VulkanManager.cpp:152
static void destroyInstance()
Destroy the singleton instance of the VulkanManager.
TODO development of this class is in progress.
Definition: Attribute.h:13