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);