Compare commits
1 Commits
Author | SHA1 | Date |
---|---|---|
Ковалев Роман Евгеньевич | cd61de3745 |
|
@ -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
|
||||||
|
|
34
src/vk.cpp
34
src/vk.cpp
|
@ -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");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue