CSC8503_Advanced_Game_Technologies / Plugins / VulkanRendering / VulkanPipelineBuilder.h
VulkanPipelineBuilder.h
Raw
#pragma once
#include "VulkanRenderer.h"

namespace NCL {
namespace Rendering {
	class VulkanPipelineBuilder
	{
	public:
		VulkanPipelineBuilder();
		~VulkanPipelineBuilder();

		VulkanPipelineBuilder& WithDepthState(vk::CompareOp op, bool depthEnabled, bool writeEnabled, bool stencilEnabled = false);

		VulkanPipelineBuilder& WithBlendState(vk::BlendFactor srcState, vk::BlendFactor dstState, bool enabled = true);

		VulkanPipelineBuilder& WithRaster(vk::CullModeFlagBits cullMode, vk::PolygonMode polyMode = vk::PolygonMode::eFill);

		VulkanPipelineBuilder& WithVertexSpecification(VulkanVertexSpecification* mesh, vk::PrimitiveTopology topology = vk::PrimitiveTopology::eTriangleList);

		VulkanPipelineBuilder& WithShaderState(VulkanShader* shader);

		VulkanPipelineBuilder& WithLayout(vk::PipelineLayout layout);

		VulkanPipelineBuilder& WithPushConstant(vk::PushConstantRange layout);

		VulkanPipelineBuilder& WithDescriptorSetLayout(vk::DescriptorSetLayout layout);

		VulkanPipelineBuilder& WithPass(vk::RenderPass& renderPass);

		VulkanPipelineBuilder& WithDebugName(const string& name);

		VulkanPipeline	Build(VulkanRenderer& renderer);

	protected:
		vk::GraphicsPipelineCreateInfo				pipelineCreate;
		vk::PipelineCacheCreateInfo					cacheCreate;
		vk::PipelineInputAssemblyStateCreateInfo	inputAsmCreate;
		vk::PipelineRasterizationStateCreateInfo	rasterCreate;
		vk::PipelineColorBlendStateCreateInfo		blendCreate;
		vk::PipelineDepthStencilStateCreateInfo		depthStencilCreate;
		vk::PipelineViewportStateCreateInfo			viewportCreate;
		vk::PipelineMultisampleStateCreateInfo		sampleCreate;
		vk::PipelineDynamicStateCreateInfo			dynamicCreate;

		vk::PipelineLayout layout;

		vector< vk::PipelineColorBlendAttachmentState>			blendAttachStates;

		vk::DynamicState dynamicStateEnables[2];

		vector< vk::DescriptorSetLayout> allLayouts;
		vector< vk::PushConstantRange> allPushConstants;

		string debugName;
	};
}
}