MayaFlux 0.1.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches
VKInstance.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <vulkan/vulkan.hpp>
4
5namespace MayaFlux::Core {
6
7/**
8 * @class VKInstance
9 * @brief Manages Vulkan instance creation and validation layers
10 *
11 * The instance is the connection between your application and Vulkan.
12 * It handles global Vulkan state and validation layers for debugging.
13 */
15public:
16 VKInstance() = default;
17
18 /**
19 * @brief Destructor to clean up Vulkan instance and debug messenger
20 */
22
23 VKInstance(const VKInstance&) = delete;
24 VKInstance& operator=(const VKInstance&) = delete;
25 VKInstance(VKInstance&&) noexcept;
26 VKInstance& operator=(VKInstance&&) noexcept;
27
28 /**
29 * @brief Initialize Vulkan instance
30 * @param enable_validation Enable validation layers (recommended for development)
31 * @param required_extensions Extensions required (e.g., for GLFW surface)
32 * @return true if initialization succeeded
33 */
34 bool initialize(bool enable_validation = true,
35 const std::vector<const char*>& required_extensions = {});
36
37 /**
38 * @brief Cleanup Vulkan instance
39 */
40 void cleanup();
41
42 /**
43 * @brief Get the Vulkan instance handle
44 * @return Vulkan instance handle
45 */
46 [[nodiscard]] vk::Instance get_instance() const { return m_instance; }
47
48private:
49 vk::Instance m_instance; ///< Vulkan instance handle
50 vk::DebugUtilsMessengerEXT m_debug_messenger; ///< Debug messenger for validation layers
51 bool m_validation_enabled = false; ///< Flag to indicate if validation layers are enabled
52
53 vk::detail::DispatchLoaderDynamic m_dynamic_dispatcher; ///< Dynamic dispatcher for extension functions
54
55 /**
56 * @brief Check if requested validation layers are available
57 */
58 bool check_validation_layer_support(const std::vector<const char*>& layers);
59
60 /**
61 * @brief Setup debug messenger for validation layer output
62 */
64
65 /**
66 * @brief Validation layer callback
67 */
68
69 static vk::Bool32 debug_callback(
70 vk::DebugUtilsMessageSeverityFlagBitsEXT message_severity,
71 vk::DebugUtilsMessageTypeFlagsEXT message_types,
72 const vk::DebugUtilsMessengerCallbackDataEXT* p_callback_data,
73 void* p_user_data);
74};
75
76}
void cleanup()
Cleanup Vulkan instance.
bool m_validation_enabled
Flag to indicate if validation layers are enabled.
VKInstance(const VKInstance &)=delete
vk::detail::DispatchLoaderDynamic m_dynamic_dispatcher
Dynamic dispatcher for extension functions.
bool check_validation_layer_support(const std::vector< const char * > &layers)
Check if requested validation layers are available.
VKInstance & operator=(const VKInstance &)=delete
vk::Instance m_instance
Vulkan instance handle.
bool setup_debug_messenger()
Setup debug messenger for validation layer output.
vk::Instance get_instance() const
Get the Vulkan instance handle.
vk::DebugUtilsMessengerEXT m_debug_messenger
Debug messenger for validation layers.
static vk::Bool32 debug_callback(vk::DebugUtilsMessageSeverityFlagBitsEXT message_severity, vk::DebugUtilsMessageTypeFlagsEXT message_types, const vk::DebugUtilsMessengerCallbackDataEXT *p_callback_data, void *p_user_data)
Validation layer callback.
~VKInstance()
Destructor to clean up Vulkan instance and debug messenger.
Manages Vulkan instance creation and validation layers.
void initialize()
Definition main.cpp:11