rj-action-library/Runtime/Rendering/Objects/RDRenderPipelineSetup.cs

57 lines
1.9 KiB
C#

using Godot;
using System;
using System.Collections.Generic;
namespace Rokojori
{
public class RDRenderPipelineSetup
{
public RDFrameBufferFormat frameBufferFormat;
public RDVertexFormat vertexFormat;
public RDPipelineRasterizationState rasterizationState;
public RDPipelineMultisampleState multisampleState;
public RDPipelineDepthStencilState stencilState;
public RDPipelineColorBlendState blendState;
public RenderingDevice.RenderPrimitive primitive;
public static RDPipelineColorBlendState CreateBlendState()
{
var blend = new RDPipelineColorBlendState();
var blendAttachment = new RDPipelineColorBlendStateAttachment();
blend.Attachments.Add( blendAttachment );
return blend;
}
public static RDPipelineDepthStencilState CreateStencilState(
RenderingDevice.CompareOperator compareOperator, int mask, int reference,
RenderingDevice.StencilOperation failOperation, RenderingDevice.StencilOperation passOperation
)
{
var stencil_state = new RDPipelineDepthStencilState();
stencil_state.FrontOpCompare = compareOperator;
stencil_state.FrontOpCompareMask = (uint) mask;
stencil_state.FrontOpReference = (uint) reference;
stencil_state.FrontOpFail = failOperation;
stencil_state.FrontOpPass = passOperation;
return stencil_state;
}
public static RDRenderPipelineSetup Create( RDFrameBufferFormat fbFormat, RDVertexFormat vxFormat, RDPipelineDepthStencilState stencilState )
{
var setup = new RDRenderPipelineSetup();
setup.rasterizationState = new RDPipelineRasterizationState();
setup.multisampleState = new RDPipelineMultisampleState();
setup.primitive = RenderingDevice.RenderPrimitive.Triangles;
setup.blendState = CreateBlendState();
setup.stencilState = stencilState;
return setup;
}
}
}