diff --git a/include/vk.h b/include/vk.h index ad4f369..8f65f8d 100644 --- a/include/vk.h +++ b/include/vk.h @@ -26,6 +26,7 @@ class Vulkan VkPipelineLayout pipelineLayout; // Раскладка конвейера VkPipeline graphicsPipeline; // Графический конвейер VkCommandPool commandPool; // Пул команд + std::vector commandBuffers; // Буферы команд // Структура для хранения флагов struct diff --git a/src/vk.cpp b/src/vk.cpp index de80481..41942d8 100644 --- a/src/vk.cpp +++ b/src/vk.cpp @@ -787,4 +787,19 @@ void Vulkan::createCommandPool() throw std::runtime_error("Unable to create graphics command pool"); } + // Выделим память под буферы команд + commandBuffers.resize(swapChainImages.size()); + + // Информация о выделяемых буферах + VkCommandBufferAllocateInfo allocInfo{}; + allocInfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO; + allocInfo.commandPool = commandPool; + allocInfo.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY; + allocInfo.commandBufferCount = (uint32_t) commandBuffers.size(); + + // Выделение буферов команд из пула команд + if (vkAllocateCommandBuffers(logicalDevice, &allocInfo, commandBuffers.data()) != VK_SUCCESS) + { + throw std::runtime_error("Unable to allocate command buffers"); + } }