Files
FGL-Engine/src/engine/pipeline/PipelineConfigInfo.cpp

141 lines
5.4 KiB
C++

//
// Created by kj16609 on 12/14/23.
//
#include "PipelineConfigInfo.hpp"
#include "engine/model/Model.hpp"
namespace fgl::engine
{
void PipelineConfigInfo::setTriangleListTopo( PipelineConfigInfo& info )
{
info.assembly_info.topology = vk::PrimitiveTopology::eTriangleList;
}
void PipelineConfigInfo::setTriangleStripTopo( PipelineConfigInfo& info )
{
info.assembly_info.topology = vk::PrimitiveTopology::eTriangleStrip;
}
void PipelineConfigInfo::setPointPatch( PipelineConfigInfo& info )
{
info.assembly_info.topology = vk::PrimitiveTopology::ePatchList;
}
void PipelineConfigInfo::defaultConfig( PipelineConfigInfo& info )
{
info.viewport_info.viewportCount = 1;
info.viewport_info.pViewports = nullptr;
info.viewport_info.scissorCount = 1;
info.viewport_info.pScissors = nullptr;
info.assembly_info.topology = vk::PrimitiveTopology::eTriangleList;
info.assembly_info.primitiveRestartEnable = VK_FALSE;
info.rasterization_info.depthClampEnable = VK_FALSE;
info.rasterization_info.rasterizerDiscardEnable = VK_FALSE;
info.rasterization_info.polygonMode = vk::PolygonMode::eFill;
info.rasterization_info.cullMode = vk::CullModeFlagBits::eBack;
info.rasterization_info.frontFace = vk::FrontFace::eCounterClockwise;
info.rasterization_info.depthBiasEnable = VK_FALSE;
info.rasterization_info.depthBiasConstantFactor = 0.0f;
info.rasterization_info.depthBiasClamp = 0.0f;
info.rasterization_info.depthBiasSlopeFactor = 0.0f;
info.rasterization_info.lineWidth = 1.0f;
info.multisample_info.rasterizationSamples = vk::SampleCountFlagBits::e1;
info.multisample_info.sampleShadingEnable = VK_FALSE;
info.multisample_info.minSampleShading = 1.0f;
info.multisample_info.pSampleMask = nullptr;
info.multisample_info.alphaToCoverageEnable = VK_FALSE;
info.multisample_info.alphaToOneEnable = VK_FALSE;
info.color_blend_info.logicOpEnable = VK_FALSE;
info.color_blend_info.logicOp = vk::LogicOp::eCopy;
info.color_blend_info.attachmentCount = 0;
info.color_blend_info.pAttachments = nullptr;
info.color_blend_info.blendConstants[ 0 ] = 0.0f;
info.color_blend_info.blendConstants[ 1 ] = 0.0f;
info.color_blend_info.blendConstants[ 2 ] = 0.0f;
info.color_blend_info.blendConstants[ 3 ] = 0.0f;
info.depth_stencil_info.depthTestEnable = VK_TRUE;
info.depth_stencil_info.depthWriteEnable = VK_TRUE;
info.depth_stencil_info.depthCompareOp = vk::CompareOp::eLess;
info.depth_stencil_info.depthBoundsTestEnable = VK_FALSE;
info.depth_stencil_info.stencilTestEnable = VK_FALSE;
//info.depth_stencil_info.front = {};
//info.depth_stencil_info.back = {};
info.depth_stencil_info.minDepthBounds = 0.0f;
info.depth_stencil_info.maxDepthBounds = 1.0f;
info.dynamic_state_enables = { vk::DynamicState::eViewport, vk::DynamicState::eScissor };
info.dynamic_state_info.pDynamicStates = info.dynamic_state_enables.data();
info.dynamic_state_info.dynamicStateCount = static_cast< std::uint32_t >( info.dynamic_state_enables.size() );
//info.dynamic_state_info.flags = 0;
info.binding_descriptions = Vertex::getBindingDescriptions();
info.attribute_descriptions = Vertex::getAttributeDescriptions();
}
void PipelineConfigInfo::disableVertexInput( PipelineConfigInfo& info )
{
info.binding_descriptions = {};
info.attribute_descriptions = {};
}
void PipelineConfigInfo::enableAlphaBlending( PipelineConfigInfo& info )
{
for ( std::size_t i = 0; i < info.color_blend_attachment.size(); ++i )
{
info.color_blend_attachment[ i ].blendEnable = VK_TRUE;
info.color_blend_attachment[ i ].srcColorBlendFactor = vk::BlendFactor::eSrcAlpha;
info.color_blend_attachment[ i ].dstColorBlendFactor = vk::BlendFactor::eOne;
info.color_blend_attachment[ i ].colorBlendOp = vk::BlendOp::eAdd;
info.color_blend_attachment[ i ].srcAlphaBlendFactor = vk::BlendFactor::eOne;
info.color_blend_attachment[ i ].dstAlphaBlendFactor = vk::BlendFactor::eZero;
info.color_blend_attachment[ i ].alphaBlendOp = vk::BlendOp::eAdd;
info.color_blend_attachment[ i ].colorWriteMask =
vk::ColorComponentFlagBits::eR | vk::ColorComponentFlagBits::eG | vk::ColorComponentFlagBits::eB
| vk::ColorComponentFlagBits::eA;
}
}
void PipelineConfigInfo::addColorAttachmentConfig( PipelineConfigInfo& info )
{
vk::PipelineColorBlendAttachmentState state;
state.blendEnable = VK_FALSE;
state.srcColorBlendFactor = vk::BlendFactor::eOne;
state.dstColorBlendFactor = vk::BlendFactor::eZero;
state.colorBlendOp = vk::BlendOp::eAdd;
state.srcAlphaBlendFactor = vk::BlendFactor::eOne;
state.dstAlphaBlendFactor = vk::BlendFactor::eZero;
state.alphaBlendOp = vk::BlendOp::eAdd;
state.colorWriteMask = vk::ColorComponentFlagBits::eR | vk::ColorComponentFlagBits::eG
| vk::ColorComponentFlagBits::eB | vk::ColorComponentFlagBits::eA;
info.color_blend_attachment.emplace_back( state );
info.color_blend_info.pAttachments = info.color_blend_attachment.data();
info.color_blend_info.attachmentCount = static_cast< std::uint32_t >( info.color_blend_attachment.size() );
}
void PipelineConfigInfo::disableCulling( PipelineConfigInfo& info )
{
info.rasterization_info.cullMode = vk::CullModeFlagBits::eNone;
}
PipelineConfigInfo::PipelineConfigInfo( vk::RenderPass pass )
{
render_pass = pass;
defaultConfig( *this );
}
void PipelineConfigInfo::setQuadTesselation( PipelineConfigInfo& info )
{
info.tesselation_state_info.patchControlPoints = 4;
}
} // namespace fgl::engine