Compare commits

..

1 Commits
v0.2 ... master

2 changed files with 35 additions and 0 deletions

View File

@ -21,6 +21,7 @@ class Vulkan
Surface surface; // Поверхность окна Surface surface; // Поверхность окна
VkSwapchainKHR swapChain; // Список показа VkSwapchainKHR swapChain; // Список показа
std::vector<VkImage> swapChainImages; // Изображения из списка показа std::vector<VkImage> swapChainImages; // Изображения из списка показа
std::vector<VkImageView> swapChainImageViews; // Информация об изображениях из списка показа
// Структура для хранения флагов // Структура для хранения флагов
struct struct

View File

@ -21,6 +21,12 @@ void Vulkan::init(GLFWwindow* window)
// завершение работы // завершение работы
void Vulkan::destroy() void Vulkan::destroy()
{ {
// Уничтожение информации о изображениях списка показа
for (auto & imageView : swapChainImageViews)
{
vkDestroyImageView(logicalDevice, imageView, nullptr);
}
vkDestroySwapchainKHR(logicalDevice, swapChain, nullptr); // уничтожение цепочки показа vkDestroySwapchainKHR(logicalDevice, swapChain, nullptr); // уничтожение цепочки показа
vkDestroySurfaceKHR(instance, surface.surface, nullptr); // уничтожение поверхности vkDestroySurfaceKHR(instance, surface.surface, nullptr); // уничтожение поверхности
vkDestroyDevice(logicalDevice, nullptr); // Уничтожение логического устройства vkDestroyDevice(logicalDevice, nullptr); // Уничтожение логического устройства
@ -425,4 +431,32 @@ void Vulkan::createSwapchain(GLFWwindow* window)
vkGetSwapchainImagesKHR(logicalDevice, swapChain, &surface.imageCount, nullptr); vkGetSwapchainImagesKHR(logicalDevice, swapChain, &surface.imageCount, nullptr);
swapChainImages.resize(surface.imageCount); swapChainImages.resize(surface.imageCount);
vkGetSwapchainImagesKHR(logicalDevice, swapChain, &surface.imageCount, swapChainImages.data()); vkGetSwapchainImagesKHR(logicalDevice, swapChain, &surface.imageCount, swapChainImages.data());
// Зададим размер массива в соответствии с количеством изображений
swapChainImageViews.resize(swapChainImages.size());
// Для каждого изображения из списка показа
for (int i = 0; i < swapChainImages.size(); i++)
{
// Заполним данные о создаваемом объекте VkImageView
VkImageViewCreateInfo createInfo{};
createInfo.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO;
createInfo.image = swapChainImages[i];
createInfo.viewType = VK_IMAGE_VIEW_TYPE_2D;
createInfo.format = surface.selectedFormat.format;
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;
// Создание VkImageView
if (vkCreateImageView(logicalDevice, &createInfo, nullptr, &swapChainImageViews[i]) != VK_SUCCESS)
{
throw std::runtime_error("Unable to create image views");
}
}
} }