diff --git a/src/vkcv/PipelineManager.cpp b/src/vkcv/PipelineManager.cpp index 0451ed24272ae7a3c62d4965a3027d273ad01060..bca1f2ce94f9b7afae7bbf4763d2d0cea502462b 100644 --- a/src/vkcv/PipelineManager.cpp +++ b/src/vkcv/PipelineManager.cpp @@ -267,37 +267,13 @@ namespace vkcv createPipelineMultisampleStateCreateInfo(config); // color blend state - vk::ColorComponentFlags colorWriteMask(VK_COLOR_COMPONENT_R_BIT | - VK_COLOR_COMPONENT_G_BIT | - VK_COLOR_COMPONENT_B_BIT | - VK_COLOR_COMPONENT_A_BIT); - - // currently set to additive, if not disabled - // BlendFactors must be set as soon as additional BlendModes are added - vk::PipelineColorBlendAttachmentState colorBlendAttachmentState( - config.m_blendMode != BlendMode::None, - vk::BlendFactor::eOne, - vk::BlendFactor::eOne, - vk::BlendOp::eAdd, - vk::BlendFactor::eOne, - vk::BlendFactor::eOne, - vk::BlendOp::eAdd, - colorWriteMask - ); - - vk::PipelineColorBlendStateCreateInfo pipelineColorBlendStateCreateInfo( - {}, - false, - vk::LogicOp::eClear, - 1, //TODO: hardcoded to one - &colorBlendAttachmentState, - { 1.f,1.f,1.f,1.f } - ); + vk::PipelineColorBlendStateCreateInfo pipelineColorBlendStateCreateInfo = + createPipelineColorBlendStateCreateInfo(config); + // pipeline layout const size_t pushConstantSize = config.m_ShaderProgram.getPushConstantSize(); const vk::PushConstantRange pushConstantRange(vk::ShaderStageFlagBits::eAll, 0, pushConstantSize); - // pipeline layout vk::PipelineLayoutCreateInfo pipelineLayoutCreateInfo( {}, (config.m_DescriptorLayouts), @@ -313,6 +289,7 @@ namespace vkcv return PipelineHandle(); } + // Depth Stencil const vk::PipelineDepthStencilStateCreateInfo depthStencilCreateInfo( vk::PipelineDepthStencilStateCreateFlags(), config.m_depthTest != DepthTest::None, @@ -336,6 +313,7 @@ namespace vkcv } } + // Dynamic State std::vector<vk::DynamicState> dynamicStates = {}; if(config.m_UseDynamicViewport) { @@ -629,4 +607,35 @@ namespace vkcv ); return pipelineMultisampleStateCreateInfo; } + + vk::PipelineColorBlendStateCreateInfo + PipelineManager::createPipelineColorBlendStateCreateInfo(const PipelineConfig &config) { + vk::ColorComponentFlags colorWriteMask(VK_COLOR_COMPONENT_R_BIT | + VK_COLOR_COMPONENT_G_BIT | + VK_COLOR_COMPONENT_B_BIT | + VK_COLOR_COMPONENT_A_BIT); + + // currently set to additive, if not disabled + // BlendFactors must be set as soon as additional BlendModes are added + vk::PipelineColorBlendAttachmentState colorBlendAttachmentState( + config.m_blendMode != BlendMode::None, + vk::BlendFactor::eOne, + vk::BlendFactor::eOne, + vk::BlendOp::eAdd, + vk::BlendFactor::eOne, + vk::BlendFactor::eOne, + vk::BlendOp::eAdd, + colorWriteMask + ); + + vk::PipelineColorBlendStateCreateInfo pipelineColorBlendStateCreateInfo( + {}, + false, + vk::LogicOp::eClear, + 1, //TODO: hardcoded to one + &colorBlendAttachmentState, + { 1.f,1.f,1.f,1.f } + ); + return pipelineColorBlendStateCreateInfo; + } } diff --git a/src/vkcv/PipelineManager.hpp b/src/vkcv/PipelineManager.hpp index c4bc52e4413791b5723a5ea4ee8193ae962e6bbd..9f967332bfab0a16ae38aab10810dfda6d61dc3c 100644 --- a/src/vkcv/PipelineManager.hpp +++ b/src/vkcv/PipelineManager.hpp @@ -64,7 +64,7 @@ namespace vkcv const PipelineConfig &config); /** - * Create a Pipeline Vertex Input State Create Info Struct and fills it with Attribute and Binding data. + * Creates a Pipeline Vertex Input State Create Info Struct and fills it with Attribute and Binding data. * @param vertexAttributeDescriptions * @param vertexBindingDescriptions * @return Pipeline Vertex Input State Create Info Struct @@ -75,21 +75,21 @@ namespace vkcv ); /** - * Create a Pipeline Input Assembly State Create Info Struct with 'Primitive Restart' disabled. + * Creates a Pipeline Input Assembly State Create Info Struct with 'Primitive Restart' disabled. * @param config provides data for primitive topology. * @return Pipeline Input Assembly State Create Info Struct */ vk::PipelineInputAssemblyStateCreateInfo createPipelineInputAssemblyStateCreateInfo(const PipelineConfig &config); /** - * Create a Pipeline Viewport State Create Info Struct with default set viewport and scissor settings. + * Creates a Pipeline Viewport State Create Info Struct with default set viewport and scissor settings. * @param config provides with and height of the output window * @return Pipeline Viewport State Create Info Struct */ vk::PipelineViewportStateCreateInfo createPipelineViewportStateCreateInfo(const PipelineConfig &config); /** - * Create a Pipeline Rasterization State Create Info Struct with default values set to: + * Creates a Pipeline Rasterization State Create Info Struct with default values set to: * Rasterizer Discard: Disabled * Polygon Mode: Fill * Front Face: Counter Clockwise @@ -102,11 +102,18 @@ namespace vkcv vk::PipelineRasterizationStateCreateInfo createPipelineRasterizationStateCreateInfo(const PipelineConfig &config); /** - * Create a Pipeline Multisample State Create Info Struct. + * Creates a Pipeline Multisample State Create Info Struct. * @param config set MSAA Sample Count Flag * @return Pipeline Multisample State Create Info Struct */ vk::PipelineMultisampleStateCreateInfo createPipelineMultisampleStateCreateInfo(const PipelineConfig &config); + /** + * Creates a Pipeline Color Blend State Create Info Struct. + * Currently only one blend mode is supported! There for, blending is set to additive. + * @param config sets blend mode + * @return + */ + vk::PipelineColorBlendStateCreateInfo createPipelineColorBlendStateCreateInfo(const PipelineConfig &config); }; }