Fling Engine  0.00.1
Fling Engine is a game engine written in Vulkan
Instance.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "FlingVulkan.h"
4 #include "NonCopyable.hpp"
5 
6 namespace Fling
7 {
12  {
13  public:
14 
15  explicit Instance();
16 
17  ~Instance();
18 
19  const VkInstance& GetRawVkInstance() const { return m_Instance; }
20 
22 
23  UINT32 EnabledValidationLayerCount() const { return static_cast<UINT32>(m_ValidationLayers.size()); }
24 
25  const std::vector<const char*>& GetEnabledValidationLayers() const { return m_ValidationLayers; }
26 
27  const std::vector<const char*>& GetEnabledExtensions() const { return m_DeviceExtensions; };
28 
29  private:
30 
32  VkInstance m_Instance = VK_NULL_HANDLE;
33 
35  VkDebugUtilsMessengerEXT m_DebugMessenger = VK_NULL_HANDLE;
36 
42 
46  void CreateInstance();
47 
48  std::vector<const char*> GetRequiredExtensions();
49 
51 
52  // Debug messenger callbacks ---------------------------
53  static VKAPI_ATTR VkBool32 VKAPI_CALL DebugCallback(
54  VkDebugUtilsMessageSeverityFlagBitsEXT t_messageSeverity,
55  VkDebugUtilsMessageTypeFlagsEXT t_messageType,
56  const VkDebugUtilsMessengerCallbackDataEXT* t_CallbackData,
57  void* t_UserData
58  );
59 
61  VkInstance instance,
62  const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo,
63  const VkAllocationCallbacks* pAllocator,
64  VkDebugUtilsMessengerEXT* pDebugMessenger
65  );
66 
68  VkInstance instance,
69  VkDebugUtilsMessengerEXT debugMessenger,
70  const VkAllocationCallbacks* pAllocator
71  );
72 
77  void SetupDebugMessages();
78 
80  const std::vector<const char*> m_ValidationLayers =
81  {
82  "VK_LAYER_LUNARG_standard_validation"
83  };
84 
86  const std::vector<const char*> m_DeviceExtensions =
87  {
88  VK_KHR_SWAPCHAIN_EXTENSION_NAME
89  };
90 
91  };
92 } // namespace Fling
const VkInstance & GetRawVkInstance() const
Definition: Instance.h:19
bool IsValidationEnabled() const
Definition: Instance.h:21
const std::vector< const char * > & GetEnabledValidationLayers() const
Definition: Instance.h:25
const std::vector< const char * > m_ValidationLayers
The validation layers that we want to look for on this instance.
Definition: Instance.h:80
VkResult CreateDebugUtilsMessengerEXT(VkInstance instance, const VkDebugUtilsMessengerCreateInfoEXT *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkDebugUtilsMessengerEXT *pDebugMessenger)
Definition: Instance.cpp:167
void SetupDebugMessages()
Create a debug message callback from vulkan and allow us to log errors from it.
Definition: Instance.cpp:125
const std::vector< const char * > & GetEnabledExtensions() const
Definition: Instance.h:27
void CreateInstance()
Create the VkInstance of this object and application information.
Definition: Instance.cpp:18
The instance is a representation of this application graphics instance in Vulkan. ...
Definition: Instance.h:11
VkDebugUtilsMessengerEXT m_DebugMessenger
Debug message handler for Vulkan.
Definition: Instance.h:35
UINT32 EnabledValidationLayerCount() const
Definition: Instance.h:23
VkInstance m_Instance
The Vulkan instance.
Definition: Instance.h:32
void DestroyDebugUtilsMessengerEXT(VkInstance instance, VkDebugUtilsMessengerEXT debugMessenger, const VkAllocationCallbacks *pAllocator)
Definition: Instance.cpp:180
const std::vector< const char * > m_DeviceExtensions
Device extension support for the swap chain.
Definition: Instance.h:86
uint8_t UINT8
Definition: FlingTypes.h:8
Class that removes the copy operator and constructor.
Definition: NonCopyable.hpp:10
std::vector< const char * > GetRequiredExtensions()
Definition: Instance.cpp:109
static VKAPI_ATTR VkBool32 VKAPI_CALL DebugCallback(VkDebugUtilsMessageSeverityFlagBitsEXT t_messageSeverity, VkDebugUtilsMessageTypeFlagsEXT t_messageType, const VkDebugUtilsMessengerCallbackDataEXT *t_CallbackData, void *t_UserData)
Definition: Instance.cpp:142
uint32_t UINT32
Definition: FlingTypes.h:10
Definition: Engine.h:13
bool CheckValidationLayerSupport()
Definition: Instance.cpp:78
UINT8 m_EnableValidationLayers
If this instance has validation layers enabled.
Definition: Instance.h:41
~Instance()
Definition: Instance.cpp:189
Instance()
Definition: Instance.cpp:8