184 virtual void Init()
override;
188 void CreateInstance();
190 void PrintAvailableExtensions();
191 void PrintAvailablePhysicalDevices(
const std::vector<VkPhysicalDevice>& physicalDevices);
194 bool CheckValidationLayerSupport();
195 std::vector<const char*> GetRequiredExtensions(VkInstanceCreateFlags& flagsToBeSet);
197 static VKAPI_ATTR VkBool32 VKAPI_CALL DebugCallback(VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity,
198 VkDebugUtilsMessageTypeFlagsEXT messageType,
199 const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData,
202 void SetupDebugMessenger();
203 void PopulateDebugMessengerCreateInfo(VkDebugUtilsMessengerCreateInfoEXT& createInfo);
204 VkResult CreateDebugUtilsMessengerEXT(VkInstance instance,
205 const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo,
206 const VkAllocationCallbacks* pAllocator,
207 VkDebugUtilsMessengerEXT* pDebugMessenger);
209 void DestroyDebugUtilsMessengerEXT(VkInstance instance, VkDebugUtilsMessengerEXT debugMessenger,
const VkAllocationCallbacks* pAllocator);
212 void CreateSurface();
215 void PickPhysicalDevice();
216 bool IsDeviceSuitable(VkPhysicalDevice device);
224 void CreateLogicalDevice();
232 void CreateSwapChain();
233 bool CheckDeviceExtensionSupport(VkPhysicalDevice device);
235 VkSurfaceFormatKHR ChooseSwapSurfaceFormat(
const std::vector<VkSurfaceFormatKHR>& availableFormats);
236 VkPresentModeKHR ChooseSwapPresentMode(
const std::vector<VkPresentModeKHR>& availablePresentModes);
237 VkExtent2D ChooseSwapExtent(
const VkSurfaceCapabilitiesKHR& capabilities);
238 uint32_t FindMemoryType(uint32_t typeFilter, VkMemoryPropertyFlags properties);
247 void CreateImageViews();
254 void CreateRenderPass();
262 void CreateFrameBuffers();
270 void CreateCommandPool();
273 void CreateDepthResources();
274 VkFormat FindSupportedFormat(
const std::vector<VkFormat>& candidates, VkImageTiling tiling, VkFormatFeatureFlags features);
275 VkFormat FindDepthFormat();
276 bool HasStencilComponent(VkFormat format);
280 void TransitionImageLayout(VkImage image, VkFormat format, VkImageLayout oldLayout, VkImageLayout newLayout);
281 void CopyBufferToImage(VkBuffer buffer, VkImage image, uint32_t width, uint32_t height);
285 void RecreateSwapChain();
286 void CleanupSwapChain();
288 void SetVSync(
bool bEnable);
290 void Initializeglslang();
291 void RegisterUBO(
const std::shared_ptr<VulkanUniformBuffer>& ubo);
294 void UploadUBO(
size_t frameIndex);
297 VkDevice GetLogicalDevice()
const {
return m_device; }
298 VkPhysicalDevice GetPhysicalDevice()
const {
return m_physicalDevice; }
299 VkExtent2D GetSwapChainExtent()
const {
return m_swapChainExtent; }
300 VkRenderPass GetRenderPass()
const {
return m_renderPass; }
301 const std::vector<VkFramebuffer>& GetSwapChainFrameBuffer()
const {
return m_swapChainFrameBuffers; }
302 VkSwapchainKHR GetSwapChain()
const {
return m_swapChain; }
303 inline const std::vector<VkImage>& GetSwapChainImages()
const {
return m_swapChainImages; }
304 VkFormat GetSwapChainImageFormat()
const {
return m_swapChainImageFormat; }
305 const std::vector<VkImageView>& GetSwapChainImageViews()
const {
return m_swapChainImageViews; }
306 VkSurfaceFormatKHR GetSurfaceFormat()
const {
return m_surfaceFormat; }
307 VkQueue GetGraphicsQueue()
const {
return m_graphicsQueue; }
308 VkQueue GetPresentQueue()
const {
return m_presentQueue; }
309 VkCommandPool GetCommandPool()
const {
return m_commandPool; }
312 const VkPhysicalDeviceFeatures& GetSupportedDeviceFeatures()
const {
return m_SupportedDeviceFeatures; }
313 VkInstance GetInstance()
const {
return m_Instance; }
314 uint32_t GetImageCount()
const {
return uint32_t(m_swapChainImages.size()); }
315 uint32_t GetMinImageCount()
const {
return m_MinImageCount; }
316 VkSurfaceKHR GetSurface()
const {
return m_surface; }
317 VkPresentModeKHR GetPresentMode()
const {
return m_presentMode; }
322 GLFWwindow* m_windowHandle;
323 VulkanRendererAPI* m_vulkanRendererAPI;
325 VkInstance m_Instance;
326 VkDebugUtilsMessengerEXT debugMessenger;
328 VkPhysicalDeviceFeatures m_SupportedDeviceFeatures;
330 static bool bEnableValidationLayers;
332 VkPhysicalDevice m_physicalDevice = VK_NULL_HANDLE;
334 VkQueue m_graphicsQueue;
336 VkSurfaceKHR m_surface;
337 VkQueue m_presentQueue;
338 VkPresentModeKHR m_presentMode;
340 VkSurfaceFormatKHR m_surfaceFormat;
342 VkSwapchainKHR m_swapChain;
343 std::vector<VkImage> m_swapChainImages;
344 VkFormat m_swapChainImageFormat;
345 VkExtent2D m_swapChainExtent;
346 std::vector<VkImageView> m_swapChainImageViews;
348 VkRenderPass m_renderPass;
350 std::vector<VkFramebuffer> m_swapChainFrameBuffers;
351 VkCommandPool m_commandPool;
353 std::set<std::shared_ptr<VulkanUniformBuffer>> m_VulkanUBO;
357 VkImage m_DepthImage;
358 VkDeviceMemory m_DepthImageMemory;
359 VkImageView m_DepthImageView;
361 uint32_t m_MinImageCount = 0;
This file contains base class GraphicsContext.
An abstract class for creating a context for Renderer and provide graphics API.
Definition GraphicsContext.h:20
VulkanContext(GLFWwindow *windowHandle)
A constructor to set the m_vulkanRendererAPI (using static_cast, or compilet time cast)....
Definition VulkanContext.cpp:22
virtual bool OnWindowResize(WindowResizeEvent &event) override
Calls glViewport function which specifies the affine transformation of x and y from normalized device...
Definition VulkanContext.h:186
virtual void SwapBuffers() override
This function swaps the front and back buffers of the specified window. If the swap interval is great...
Definition VulkanContext.cpp:120
virtual void Init() override
Initializes VulkanContext by creating appropriate Vulkan and glslang specific instruments and allocat...
Definition VulkanContext.cpp:92