diff --git a/include/vk.h b/include/vk.h index 310f042..68e7d97 100644 --- a/include/vk.h +++ b/include/vk.h @@ -18,6 +18,7 @@ class Vulkan VkDevice logicalDevice; // логическое устройство VkQueue graphicalQueue; // очередь для работы с графикой Surface surface; // Поверхность окна + VkSwapchainKHR swapChain; // Список показа // Структура для хранения флагов struct diff --git a/src/vk.cpp b/src/vk.cpp index 857d255..c66bdd5 100644 --- a/src/vk.cpp +++ b/src/vk.cpp @@ -372,5 +372,27 @@ void Vulkan::createSwapchain(GLFWwindow* window) if (surface.capabilities.maxImageCount) surface.imageCount %= surface.capabilities.maxImageCount; + // Заполнение данных о создаваемом списке показа + VkSwapchainCreateInfoKHR createInfo{}; + createInfo.sType = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR; + createInfo.surface = surface.surface; + createInfo.minImageCount = surface.imageCount; + createInfo.imageFormat = surface.selectedFormat.format; + createInfo.imageColorSpace = surface.selectedFormat.colorSpace; + createInfo.imageExtent = surface.selectedExtent; + createInfo.imageArrayLayers = 1; + createInfo.imageUsage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT; + createInfo.imageSharingMode = VK_SHARING_MODE_EXCLUSIVE; + createInfo.preTransform = surface.capabilities.currentTransform; + createInfo.compositeAlpha = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR; + createInfo.presentMode = surface.selectedPresentMode; + createInfo.clipped = VK_TRUE; + createInfo.oldSwapchain = VK_NULL_HANDLE; + + // Создание списка показа + if (vkCreateSwapchainKHR(logicalDevice, &createInfo, nullptr, &swapChain) != VK_SUCCESS) + { + throw std::runtime_error("Unable to create swap chain"); + } }