Compare commits
1 Commits
Author | SHA1 | Date |
---|---|---|
Ковалев Роман Евгеньевич | cd61de3745 |
|
@ -21,6 +21,7 @@ class Vulkan
|
|||
Surface surface; // Поверхность окна
|
||||
VkSwapchainKHR swapChain; // Список показа
|
||||
std::vector<VkImage> swapChainImages; // Изображения из списка показа
|
||||
std::vector<VkImageView> swapChainImageViews; // Информация об изображениях из списка показа
|
||||
|
||||
// Структура для хранения флагов
|
||||
struct
|
||||
|
|
34
src/vk.cpp
34
src/vk.cpp
|
@ -21,6 +21,12 @@ void Vulkan::init(GLFWwindow* window)
|
|||
// завершение работы
|
||||
void Vulkan::destroy()
|
||||
{
|
||||
// Уничтожение информации о изображениях списка показа
|
||||
for (auto & imageView : swapChainImageViews)
|
||||
{
|
||||
vkDestroyImageView(logicalDevice, imageView, nullptr);
|
||||
}
|
||||
|
||||
vkDestroySwapchainKHR(logicalDevice, swapChain, nullptr); // уничтожение цепочки показа
|
||||
vkDestroySurfaceKHR(instance, surface.surface, nullptr); // уничтожение поверхности
|
||||
vkDestroyDevice(logicalDevice, nullptr); // Уничтожение логического устройства
|
||||
|
@ -425,4 +431,32 @@ void Vulkan::createSwapchain(GLFWwindow* window)
|
|||
vkGetSwapchainImagesKHR(logicalDevice, swapChain, &surface.imageCount, nullptr);
|
||||
swapChainImages.resize(surface.imageCount);
|
||||
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");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue