Add allocate image views

This commit is contained in:
Jiga228
2025-09-24 22:02:14 +07:00
parent 600ff1bc2d
commit 175354f56a
2 changed files with 31 additions and 0 deletions
+29
View File
@@ -327,6 +327,30 @@ void RenderEngine::create_swapchain(VkPresentModeKHR desired_present_mode)
swapchain_extent_ = extent;
}
void RenderEngine::create_image_views()
{
VkImageViewCreateInfo image_view_info{};
image_view_info.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO;
image_view_info.viewType = VK_IMAGE_VIEW_TYPE_2D;
image_view_info.format = swapchain_image_format_;
image_view_info.components.r = VK_COMPONENT_SWIZZLE_IDENTITY;
image_view_info.components.g = VK_COMPONENT_SWIZZLE_IDENTITY;
image_view_info.components.b = VK_COMPONENT_SWIZZLE_IDENTITY;
image_view_info.components.a = VK_COMPONENT_SWIZZLE_IDENTITY;
image_view_info.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
image_view_info.subresourceRange.baseMipLevel = 0;
image_view_info.subresourceRange.levelCount = 1;
image_view_info.subresourceRange.baseArrayLayer = 0;
image_view_info.subresourceRange.layerCount = 1;
swapchain_image_views_.resize(swapchain_images_.size());
for (uint32_t i = 0; i < swapchain_images_.size(); ++i)
{
image_view_info.image = swapchain_images_[i];
VK_CHECK(vkCreateImageView(device_, &image_view_info, nullptr, &swapchain_image_views_[i]));
}
}
void RenderEngine::create_surface()
{
VK_CHECK(glfwCreateWindowSurface(instance_, window_, nullptr, &surface_));
@@ -344,10 +368,15 @@ window_(window)
pick_physical_device();
create_logical_device();
create_swapchain(desired_present_mode);
create_image_views();
}
RenderEngine::~RenderEngine()
{
for (auto image_view : swapchain_image_views_)
vkDestroyImageView(device_, image_view, nullptr);
swapchain_image_views_.clear();
if (swapchain_ != VK_NULL_HANDLE)
vkDestroySwapchainKHR(device_, swapchain_, nullptr);
+2
View File
@@ -46,6 +46,7 @@ class RenderEngine
std::vector<VkImage> swapchain_images_;
VkFormat swapchain_image_format_;
VkExtent2D swapchain_extent_;
std::vector<VkImageView> swapchain_image_views_;
#ifdef _DEBUG
VkResult enable_layer_validation(VkDebugUtilsMessengerCreateInfoEXT* create_info);
@@ -66,6 +67,7 @@ class RenderEngine
void pick_physical_device();
void create_logical_device();
void create_swapchain(VkPresentModeKHR desired_present_mode);
void create_image_views();
public:
// Can throw the exception
RenderEngine(CoreInstance& core, GLFWwindow* window, VkPresentModeKHR desired_present_mode = VK_PRESENT_MODE_MAILBOX_KHR);