From 4a4788a73dae329fe439dae8ad222afd4cd201b6 Mon Sep 17 00:00:00 2001 From: "re.kovalev" Date: Mon, 28 Feb 2022 21:50:25 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A1=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=B3=D1=80=D0=B0=D1=84=D0=B8=D1=87=D0=B5=D1=81=D0=BA?= =?UTF-8?q?=D0=BE=D0=B3=D0=BE=20=D0=BA=D0=BE=D0=BD=D0=B2=D0=B5=D0=B9=D0=B5?= =?UTF-8?q?=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/vk.h | 3 ++- src/vk.cpp | 24 +++++++++++++++++++++++- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/include/vk.h b/include/vk.h index e62b67b..55544d9 100644 --- a/include/vk.h +++ b/include/vk.h @@ -23,7 +23,8 @@ class Vulkan std::vector swapChainImages; // Изображения из списка показа std::vector swapChainImageViews; // Информация об изображениях из списка показа VkRenderPass renderPass; // Проходы рендера - VkPipelineLayout pipelineLayout; + VkPipelineLayout pipelineLayout; // Раскладка конвейера + VkPipeline graphicsPipeline; // Графический конвейер // Структура для хранения флагов struct diff --git a/src/vk.cpp b/src/vk.cpp index 2e9efd1..4b3b4a0 100644 --- a/src/vk.cpp +++ b/src/vk.cpp @@ -24,6 +24,7 @@ void Vulkan::init(GLFWwindow* window) // завершение работы void Vulkan::destroy() { + vkDestroyPipeline(logicalDevice, graphicsPipeline, nullptr); vkDestroyPipelineLayout(logicalDevice, pipelineLayout, nullptr); vkDestroyRenderPass(logicalDevice, renderPass, nullptr); @@ -689,7 +690,28 @@ void Vulkan::createGraphicPipeline() // Шейдерные стадии VkPipelineShaderStageCreateInfo shaderStages[] = {vertShaderStageInfo, fragShaderStageInfo}; - // Тут создание графического конвейера + + // Информация о создаваемом конвейере + VkGraphicsPipelineCreateInfo pipelineInfo{}; + pipelineInfo.sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO; + pipelineInfo.stageCount = 2; + pipelineInfo.pStages = shaderStages; + pipelineInfo.pVertexInputState = &vertexInputInfo; + pipelineInfo.pInputAssemblyState = &inputAssembly; + pipelineInfo.pViewportState = &viewportState; + pipelineInfo.pRasterizationState = &rasterizer; + pipelineInfo.pMultisampleState = &multisampling; + pipelineInfo.pColorBlendState = &colorBlending; + pipelineInfo.layout = pipelineLayout; + pipelineInfo.renderPass = renderPass; + pipelineInfo.subpass = 0; + pipelineInfo.basePipelineHandle = VK_NULL_HANDLE; + + // Создание графического конвейера + if (vkCreateGraphicsPipelines(logicalDevice, VK_NULL_HANDLE, 1, &pipelineInfo, nullptr, &graphicsPipeline) != VK_SUCCESS) + { + throw std::runtime_error("Unable to create graphics pipeline"); + } // Удаление шейдерных модулей vkDestroyShaderModule(logicalDevice, fragShaderModule, nullptr);