184 virtual void Init()
override;
204 void CreateInstance();
214 void PrintAvailableExtensions();
222 void PrintAvailablePhysicalDevices(
const std::vector<VkPhysicalDevice>& physicalDevices);
225 bool CheckValidationLayerSupport();
226 std::vector<const char*> GetRequiredExtensions(VkInstanceCreateFlags& flagsToBeSet);
228 static VKAPI_ATTR VkBool32 VKAPI_CALL DebugCallback(VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity,
229 VkDebugUtilsMessageTypeFlagsEXT messageType,
230 const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData,
233 void SetupDebugMessenger();
234 void PopulateDebugMessengerCreateInfo(VkDebugUtilsMessengerCreateInfoEXT& createInfo);
235 VkResult CreateDebugUtilsMessengerEXT(VkInstance instance,
236 const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo,
237 const VkAllocationCallbacks* pAllocator,
238 VkDebugUtilsMessengerEXT* pDebugMessenger);
240 void DestroyDebugUtilsMessengerEXT(VkInstance instance, VkDebugUtilsMessengerEXT debugMessenger,
const VkAllocationCallbacks* pAllocator);
247 void CreateSurface();
256 void PickPhysicalDevice();
267 bool IsDeviceSuitable(VkPhysicalDevice device);
288 void CreateLogicalDevice();
302 void CreateSwapChain();
312 bool CheckDeviceExtensionSupport(VkPhysicalDevice device);
337 VkSurfaceFormatKHR ChooseSwapSurfaceFormat(
const std::vector<VkSurfaceFormatKHR>& availableFormats);
349 VkPresentModeKHR ChooseSwapPresentMode(
const std::vector<VkPresentModeKHR>& availablePresentModes);
359 VkExtent2D ChooseSwapExtent(
const VkSurfaceCapabilitiesKHR& capabilities);
370 uint32_t FindMemoryType(uint32_t typeFilter, VkMemoryPropertyFlags properties);
378 void CreateImageViews();
385 void CreateRenderPass();
392 void CreateFrameBuffers();
399 void CreateCommandPool();
407 void CreateDepthResources();
416 VkFormat FindSupportedFormat(
const std::vector<VkFormat>& candidates, VkImageTiling tiling, VkFormatFeatureFlags features);
424 VkFormat FindDepthFormat();
436 bool HasStencilComponent(VkFormat format);
451 void TransitionImageLayout(VkImage image, VkFormat format, VkImageLayout oldLayout, VkImageLayout newLayout);
466 void CopyBufferToImage(VkBuffer buffer, VkImage image, uint32_t width, uint32_t height);
476 void RecreateSwapChain();
486 void CleanupSwapChain();
498 void SetVSync(
bool bEnable);
505 void Initializeglslang();
513 void RegisterUBO(
const std::shared_ptr<VulkanUniformBuffer>& ubo);
552 void UploadUBO(
size_t frameIndex);
555 VkDevice GetLogicalDevice()
const {
return m_device; }
556 VkPhysicalDevice GetPhysicalDevice()
const {
return m_physicalDevice; }
557 VkExtent2D GetSwapChainExtent()
const {
return m_swapChainExtent; }
558 VkRenderPass GetRenderPass()
const {
return m_renderPass; }
559 const std::vector<VkFramebuffer>& GetSwapChainFrameBuffer()
const {
return m_swapChainFrameBuffers; }
560 VkSwapchainKHR GetSwapChain()
const {
return m_swapChain; }
561 inline const std::vector<VkImage>& GetSwapChainImages()
const {
return m_swapChainImages; }
562 VkFormat GetSwapChainImageFormat()
const {
return m_swapChainImageFormat; }
563 const std::vector<VkImageView>& GetSwapChainImageViews()
const {
return m_swapChainImageViews; }
564 VkSurfaceFormatKHR GetSurfaceFormat()
const {
return m_surfaceFormat; }
565 VkQueue GetGraphicsQueue()
const {
return m_graphicsQueue; }
566 VkQueue GetPresentQueue()
const {
return m_presentQueue; }
567 VkCommandPool GetCommandPool()
const {
return m_commandPool; }
568 VkImageView GetDepthImageView()
const {
return m_DepthImageView; }
569 const VkPhysicalDeviceFeatures& GetSupportedDeviceFeatures()
const {
return m_SupportedDeviceFeatures; }
570 VkInstance GetInstance()
const {
return m_Instance; }
571 uint32_t GetImageCount()
const {
return uint32_t(m_swapChainImages.size()); }
572 uint32_t GetMinImageCount()
const {
return m_MinImageCount; }
573 VkSurfaceKHR GetSurface()
const {
return m_surface; }
574 VkPresentModeKHR GetPresentMode()
const {
return m_presentMode; }
579 GLFWwindow* m_windowHandle;
580 VulkanRendererAPI* m_vulkanRendererAPI;
582 VkInstance m_Instance;
583 VkDebugUtilsMessengerEXT debugMessenger;
585 VkPhysicalDeviceFeatures m_SupportedDeviceFeatures;
587 static bool bEnableValidationLayers;
589 VkPhysicalDevice m_physicalDevice = VK_NULL_HANDLE;
591 VkQueue m_graphicsQueue;
593 VkSurfaceKHR m_surface;
594 VkQueue m_presentQueue;
595 VkPresentModeKHR m_presentMode;
597 VkSurfaceFormatKHR m_surfaceFormat;
599 VkSwapchainKHR m_swapChain;
600 std::vector<VkImage> m_swapChainImages;
601 VkFormat m_swapChainImageFormat;
602 VkExtent2D m_swapChainExtent;
603 std::vector<VkImageView> m_swapChainImageViews;
605 VkRenderPass m_renderPass;
607 std::vector<VkFramebuffer> m_swapChainFrameBuffers;
608 VkCommandPool m_commandPool;
610 std::set<std::shared_ptr<VulkanUniformBuffer>> m_VulkanUBO;
614 VkImage m_DepthImage;
615 VkDeviceMemory m_DepthImageMemory;
616 VkImageView m_DepthImageView;
618 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:197
virtual void SwapBuffers() override
In Vulkan there is no default framebuffer, hence we need to explicitly swap the buffers in the swapch...
Definition VulkanContext.cpp:120
virtual void Init() override
Initializes VulkanContext by creating appropriate Vulkan and glslang specific instruments and allocat...
Definition VulkanContext.cpp:92