diff --git a/Hello_triangle/main.cpp b/Hello_triangle/main.cpp index aca40e7..5b95d9f 100644 --- a/Hello_triangle/main.cpp +++ b/Hello_triangle/main.cpp @@ -58,6 +58,8 @@ const std::vector deviceExtensions = { std::vector swapChainImages; VkFormat swapChainImageFormat; VkExtent2D swapChainExtent; + std::vector swapChainImageViews; + struct SwapChainSupportDetails { VkSurfaceCapabilitiesKHR capabilities; @@ -82,7 +84,7 @@ const std::vector deviceExtensions = { pickPhysicalDevice(); createLogicalDevice(); createSwapChain(); - + createImageViews(); } void createSurface() { @@ -203,6 +205,32 @@ const std::vector deviceExtensions = { } + void createImageViews() { + swapChainImageViews.resize(swapChainImages.size()); + for (size_t i = 0; i < swapChainImages.size(); i++) { + VkImageViewCreateInfo createInfo{}; + createInfo.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO; + createInfo.image = swapChainImages[i]; + createInfo.viewType = VK_IMAGE_VIEW_TYPE_2D; + createInfo.format = swapChainImageFormat; + + createInfo.components.r = VK_COMPONENT_SWIZZLE_IDENTITY; + createInfo.components.g = VK_COMPONENT_SWIZZLE_IDENTITY; + createInfo.components.b = VK_COMPONENT_SWIZZLE_IDENTITY; + createInfo.components.a = VK_COMPONENT_SWIZZLE_IDENTITY; + + createInfo.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; + createInfo.subresourceRange.baseMipLevel = 0; + createInfo.subresourceRange.levelCount = 1; + createInfo.subresourceRange.baseArrayLayer = 0; + createInfo.subresourceRange.layerCount = 1; + + if (vkCreateImageView(device, &createInfo, nullptr, &swapChainImageViews[i]) != VK_SUCCESS) { + throw std::runtime_error("Failed to create image views!"); + } + } + } + void pickPhysicalDevice() { uint32_t deviceCount = 0; vkEnumeratePhysicalDevices(instance, &deviceCount, nullptr); @@ -498,6 +526,11 @@ const std::vector deviceExtensions = { } void cleanup(){ + + for (auto imageView : swapChainImageViews) { + vkDestroyImageView(device, imageView, nullptr); + } + vkDestroySwapchainKHR(device, swapChain, nullptr); vkDestroyDevice(device, nullptr);