// // Created by Vicente Ferrari Smith on 13.02.26. // #include "swapchain.h" #include void createSwapchain(GLFWwindow* window) { int fbWidth, fbHeight; glfwGetFramebufferSize(window, &fbWidth, &fbHeight); swapchain_extent = { static_cast(fbWidth), static_cast(fbHeight) }; VkPhysicalDeviceSurfaceInfo2KHR surfaceInfo{ .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR, .pNext = nullptr, .surface = surface, }; VkSurfaceCapabilities2KHR surfCapabilities{ .sType = VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR, }; vkGetPhysicalDeviceSurfaceCapabilities2KHR(physicalDevice, &surfaceInfo, &surfCapabilities); MAX_FRAMES_IN_FLIGHT = std::min(surfCapabilities.surfaceCapabilities.minImageCount + 1, surfCapabilities.surfaceCapabilities.maxImageCount); const VkSwapchainCreateInfoKHR sci{ .sType = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR, .surface = surface, .minImageCount = MAX_FRAMES_IN_FLIGHT, .imageFormat = swapchain_format.format, .imageColorSpace = swapchain_format.colorSpace, .imageExtent = swapchain_extent, .imageArrayLayers = 1, .imageUsage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, .imageSharingMode = VK_SHARING_MODE_EXCLUSIVE, .preTransform = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR, .compositeAlpha = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR, .presentMode = VK_PRESENT_MODE_FIFO_KHR, .clipped = VK_TRUE }; vkCreateSwapchainKHR(device, &sci, nullptr, &swapchain); uint32_t imgCount; vkGetSwapchainImagesKHR(device, swapchain, &imgCount, nullptr); std::print("imgCount: {}", imgCount); images = std::vector(imgCount); vkGetSwapchainImagesKHR(device, swapchain, &imgCount, images.data()); imageLayouts = std::vector( imgCount, VK_IMAGE_LAYOUT_UNDEFINED ); imageViews = std::vector(imgCount); const VkSemaphoreCreateInfo seci{ .sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO, }; renderFinished.resize(imgCount); for (uint32_t i = 0; i < imgCount; i++) { VkImageViewCreateInfo ivci{}; ivci.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO; ivci.image = images[i]; ivci.viewType = VK_IMAGE_VIEW_TYPE_2D; ivci.format = swapchain_format.format; // must match swapchain format ivci.components.r = VK_COMPONENT_SWIZZLE_IDENTITY; ivci.components.g = VK_COMPONENT_SWIZZLE_IDENTITY; ivci.components.b = VK_COMPONENT_SWIZZLE_IDENTITY; ivci.components.a = VK_COMPONENT_SWIZZLE_IDENTITY; ivci.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT; ivci.subresourceRange.baseMipLevel = 0; ivci.subresourceRange.levelCount = 1; ivci.subresourceRange.baseArrayLayer = 0; ivci.subresourceRange.layerCount = 1; vkCreateImageView(device, &ivci, nullptr, &imageViews[i]); vkCreateSemaphore(device, &seci, nullptr, &renderFinished[i]); } }