From f5a06e6ac1e2060bf71e0b5a79ea55177b2db98a Mon Sep 17 00:00:00 2001 From: Grayson Riffe Date: Tue, 11 Feb 2025 12:55:24 -0600 Subject: [PATCH] Create swapchain image views --- .../src/client/render/RenderEngine.cpp | 19 +++++++++++++++++++ NothinFancy/src/client/render/RenderEngine.h | 4 ++++ 2 files changed, 23 insertions(+) diff --git a/NothinFancy/src/client/render/RenderEngine.cpp b/NothinFancy/src/client/render/RenderEngine.cpp index 1e24dfa..486ad8c 100644 --- a/NothinFancy/src/client/render/RenderEngine.cpp +++ b/NothinFancy/src/client/render/RenderEngine.cpp @@ -20,6 +20,7 @@ namespace nf::client::render { , m_swapchain() , m_swapchainImageFormat() , m_swapchainImages() + , m_swapchainImageViews() { NFLog("Initializing render engine"); m_window->setDisplay(m_display); @@ -233,6 +234,20 @@ namespace nf::client::render { vkGetSwapchainImagesKHR(m_device, m_swapchain, &numSwapchainImages, nullptr); m_swapchainImages.resize(numSwapchainImages); vkGetSwapchainImagesKHR(m_device, m_swapchain, &numSwapchainImages, m_swapchainImages.data()); + + m_swapchainImageViews.resize(numSwapchainImages); + for (int i = 0; i < m_swapchainImageViews.size(); i++) { + VkImageViewCreateInfo imageViewCI = { VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO }; + imageViewCI.image = m_swapchainImages[i]; + imageViewCI.viewType = VK_IMAGE_VIEW_TYPE_2D; + imageViewCI.format = m_swapchainImageFormat; + imageViewCI.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; + imageViewCI.subresourceRange.levelCount = 1; + imageViewCI.subresourceRange.layerCount = 1; + + if (vkCreateImageView(m_device, &imageViewCI, nullptr, &m_swapchainImageViews[i]) != VK_SUCCESS) + NFError("Could not create Vulkan swapchain image view"); + } } void RenderEngine::createRenderPass() { @@ -267,6 +282,10 @@ namespace nf::client::render { RenderEngine::~RenderEngine() { vkDestroyRenderPass(m_device, m_renderPassOutput, nullptr); + + for (int i = 0; i < m_swapchainImageViews.size(); i++) + vkDestroyImageView(m_device, m_swapchainImageViews[i], nullptr); + vkDestroySwapchainKHR(m_device, m_swapchain, nullptr); vkDestroyDevice(m_device, nullptr); vkDestroySurfaceKHR(m_instance, m_surface, nullptr); diff --git a/NothinFancy/src/client/render/RenderEngine.h b/NothinFancy/src/client/render/RenderEngine.h index 709bac0..b986f00 100644 --- a/NothinFancy/src/client/render/RenderEngine.h +++ b/NothinFancy/src/client/render/RenderEngine.h @@ -21,6 +21,7 @@ namespace nf::client::render { std::shared_ptr m_window; DisplayConfig m_display; + // Global state VkInstance m_instance; VkSurfaceKHR m_surface; VkPhysicalDevice m_physicalDevice; @@ -28,8 +29,11 @@ namespace nf::client::render { VkDevice m_device; VkQueue m_queueGraphics, m_queuePresent; VkRenderPass m_renderPassOutput; + + // Swapchain VkSwapchainKHR m_swapchain; VkFormat m_swapchainImageFormat; std::vector m_swapchainImages; + std::vector m_swapchainImageViews; }; }