196 virtual void Init()
override;
216 void CreateInstance();
226 void PrintAvailableExtensions();
234 void PrintAvailablePhysicalDevices(
const std::vector<VkPhysicalDevice>& physicalDevices);
237 bool CheckValidationLayerSupport();
238 std::vector<const char*> GetRequiredExtensions(VkInstanceCreateFlags& flagsToBeSet);
240 static VKAPI_ATTR VkBool32 VKAPI_CALL DebugCallback(VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity,
241 VkDebugUtilsMessageTypeFlagsEXT messageType,
242 const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData,
245 void SetupDebugMessenger();
246 void PopulateDebugMessengerCreateInfo(VkDebugUtilsMessengerCreateInfoEXT& createInfo);
247 VkResult CreateDebugUtilsMessengerEXT(VkInstance instance,
248 const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo,
249 const VkAllocationCallbacks* pAllocator,
250 VkDebugUtilsMessengerEXT* pDebugMessenger);
252 void DestroyDebugUtilsMessengerEXT(VkInstance instance, VkDebugUtilsMessengerEXT debugMessenger,
const VkAllocationCallbacks* pAllocator);
259 void CreateSurface();
268 void PickPhysicalDevice();
279 bool IsDeviceSuitable(VkPhysicalDevice device);
300 void CreateLogicalDevice();
314 void CreateSwapChain();
324 bool CheckDeviceExtensionSupport(VkPhysicalDevice device);
349 VkSurfaceFormatKHR ChooseSwapSurfaceFormat(
const std::vector<VkSurfaceFormatKHR>& availableFormats);
361 VkPresentModeKHR ChooseSwapPresentMode(
const std::vector<VkPresentModeKHR>& availablePresentModes);
371 VkExtent2D ChooseSwapExtent(
const VkSurfaceCapabilitiesKHR& capabilities);
382 uint32_t FindMemoryType(uint32_t typeFilter, VkMemoryPropertyFlags properties);
390 void CreateImageViews();
397 void CreateRenderPass();
404 void CreateFrameBuffers();
411 void CreateCommandPool();
419 void CreateDepthResources();
428 VkFormat FindSupportedFormat(
const std::vector<VkFormat>& candidates, VkImageTiling tiling, VkFormatFeatureFlags features);
436 VkFormat FindDepthFormat();
448 bool HasStencilComponent(VkFormat format);
463 void TransitionImageLayout(VkImage image, VkFormat format, VkImageLayout oldLayout, VkImageLayout newLayout);
478 void CopyBufferToImage(VkBuffer buffer, VkImage image, uint32_t width, uint32_t height);
488 void RecreateSwapChain();
498 void CleanupSwapChain();
510 void SetVSync(
bool bEnable);
517 void Initializeglslang();
562 VkShaderModule CreateShaderModule(
const std::vector<uint32_t>& code);
564 void CreateVulkanResourcesForScene(std::shared_ptr<Scene> scene3D );
571 void CreateGeneralShader();
578 void CreateGeneralTexture();
587 void CreateGeneralDescriptorSetLayouts();
598 void CreateKarmaGuiGeneralGraphicsPipeline(VkRenderPass renderPassKG,
float windowKGWidth,
float windowKGHeight);
607 void CleanUpKarmaGuiGeneralGraphicsPipeline();
620 void CreateGeneralDescriptorPool(uint32_t smElementsNumber);
629 void CreateGeneralDescriptorSets(std::shared_ptr<Scene> scene3D, uint32_t smElementsNumber, uint32_t maxFramesInFlight);
641 void UpdateGeneralDescriptorSets(std::shared_ptr<Scene> scene3D, uint32_t frameIndex);
671 void UploadUBO(
size_t frameIndex);
674 VkDevice GetLogicalDevice()
const {
return m_device; }
675 VkPhysicalDevice GetPhysicalDevice()
const {
return m_physicalDevice; }
676 VkExtent2D GetSwapChainExtent()
const {
return m_swapChainExtent; }
677 VkRenderPass GetRenderPass()
const {
return m_renderPass; }
678 const std::vector<VkFramebuffer>& GetSwapChainFrameBuffer()
const {
return m_swapChainFrameBuffers; }
679 VkSwapchainKHR GetSwapChain()
const {
return m_swapChain; }
680 inline const std::vector<VkImage>& GetSwapChainImages()
const {
return m_swapChainImages; }
681 VkFormat GetSwapChainImageFormat()
const {
return m_swapChainImageFormat; }
682 const std::vector<VkImageView>& GetSwapChainImageViews()
const {
return m_swapChainImageViews; }
683 VkSurfaceFormatKHR GetSurfaceFormat()
const {
return m_surfaceFormat; }
684 VkQueue GetGraphicsQueue()
const {
return m_graphicsQueue; }
685 VkQueue GetPresentQueue()
const {
return m_presentQueue; }
686 VkCommandPool GetCommandPool()
const {
return m_commandPool; }
687 VkImageView GetDepthImageView()
const {
return m_DepthImageView; }
688 const VkPhysicalDeviceFeatures& GetSupportedDeviceFeatures()
const {
return m_SupportedDeviceFeatures; }
689 VkInstance GetInstance()
const {
return m_Instance; }
690 uint32_t GetImageCount()
const {
return uint32_t(m_swapChainImages.size()); }
691 uint32_t GetMinImageCount()
const {
return m_MinImageCount; }
692 VkSurfaceKHR GetSurface()
const {
return m_surface; }
693 VkPresentModeKHR GetPresentMode()
const {
return m_presentMode; }
694 std::shared_ptr<VulkanShader> GetGeneralShader()
const {
return m_GeneralShader; }
695 VkPipeline GetKarmaGuiGeneralGraphicsPipeline()
const {
return m_KarmaGuiGeneralGraphicsPipeline; }
696 VkPipelineLayout GetKarmaGuiGeneralPipelineLayout()
const {
return m_KarmaGuiGeneralPipelineLayout; }
697 const std::vector<FrameDescriptorSets>& GetGeneralDescriptorSets()
const {
return m_GeneralDescriptorSets; }
702 GLFWwindow* m_windowHandle;
703 VulkanRendererAPI* m_vulkanRendererAPI;
705 VkInstance m_Instance;
706 VkDebugUtilsMessengerEXT debugMessenger;
708 VkPhysicalDeviceFeatures m_SupportedDeviceFeatures;
710 static bool bEnableValidationLayers;
712 VkPhysicalDevice m_physicalDevice = VK_NULL_HANDLE;
714 VkQueue m_graphicsQueue;
716 VkSurfaceKHR m_surface;
717 VkQueue m_presentQueue;
718 VkPresentModeKHR m_presentMode;
720 VkSurfaceFormatKHR m_surfaceFormat;
722 VkSwapchainKHR m_swapChain;
723 std::vector<VkImage> m_swapChainImages;
724 VkFormat m_swapChainImageFormat;
725 VkExtent2D m_swapChainExtent;
726 std::vector<VkImageView> m_swapChainImageViews;
728 VkRenderPass m_renderPass;
730 std::vector<VkFramebuffer> m_swapChainFrameBuffers;
731 VkCommandPool m_commandPool;
733 std::set<VulkanUniformBuffer*> m_VulkanUBO;
736 std::shared_ptr<VulkanShader> m_GeneralShader;
737 std::shared_ptr<Texture> m_GeneralTexture;
738 VkPipelineLayout m_KarmaGuiGeneralPipelineLayout;
739 VkPipeline m_KarmaGuiGeneralGraphicsPipeline;
740 VkDescriptorSetLayout m_ViewLayout;
741 VkDescriptorSetLayout m_TextureLayout;
742 VkDescriptorSetLayout m_ObjectLayout;
743 VkDescriptorPool m_GeneralDescriptorPool;
744 std::vector<FrameDescriptorSets> m_GeneralDescriptorSets;
748 VkImage m_DepthImage;
749 VkDeviceMemory m_DepthImageMemory;
750 VkImageView m_DepthImageView;
752 uint32_t m_MinImageCount = 0;
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:56
virtual bool OnWindowResize(WindowResizeEvent &event) override
Calls glViewport function which specifies the affine transformation of x and y from normalized device...
Definition VulkanContext.h:209
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:654
virtual void Init() override
Initializes VulkanContext by creating appropriate Vulkan and glslang specific instruments and allocat...
Definition VulkanContext.cpp:144