From 5bc6e1a6a676fb9942091a6caa91bc1e6ec5d92d Mon Sep 17 00:00:00 2001 From: Mark Oliver Mints <mmints@uni-koblenz.de> Date: Tue, 10 Aug 2021 17:58:49 +0200 Subject: [PATCH] [#71] Refactor: implement a create function for Pipeline Color Blend State Create Info --- src/vkcv/PipelineManager.cpp | 63 ++++++++++++++++++++---------------- src/vkcv/PipelineManager.hpp | 17 +++++++--- 2 files changed, 48 insertions(+), 32 deletions(-) diff --git a/src/vkcv/PipelineManager.cpp b/src/vkcv/PipelineManager.cpp index 0451ed24..bca1f2ce 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 c4bc52e4..9f967332 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); }; } -- GitLab