rj-action-library/Runtime/Shading/Generators/Spatial/Stencil/StencilMode.cs

123 lines
2.8 KiB
C#
Raw Normal View History

2025-09-17 08:25:03 +00:00
using Godot;
using System.Reflection;
using System.Collections.Generic;
namespace Rokojori
{
public enum StencilWriteMode
{
Write_Depth_Success,
Write_Depth_Fail,
Write_Always
}
public enum StencilReadMode
{
Less,
Equal,
LessOrEqual,
Greater,
NotEqual,
GreaterOrEqual
}
public enum StencilMode
{
Read,
Write_Depth_Success,
Write_Depth_Fail,
Write_Always
}
public static class StencilModeUtility
{
public static string ConvertToShaderCode( StencilMode mode )
{
if ( StencilMode.Read == mode )
{
return "read";
}
if ( StencilMode.Write_Depth_Success == mode )
{
return "write";
}
if ( StencilMode.Write_Depth_Fail == mode )
{
return "write_depth_fail";
}
return "write, write_depth_fail";
}
public static string ConvertToShaderCode( BaseMaterial3D.StencilCompareEnum compareMode )
{
if ( BaseMaterial3D.StencilCompareEnum.Equal == compareMode )
{
return "compare_equal";
}
else if ( BaseMaterial3D.StencilCompareEnum.NotEqual == compareMode )
{
return "compare_not_equal";
}
else if ( BaseMaterial3D.StencilCompareEnum.Greater == compareMode )
{
return "compare_greater";
}
else if ( BaseMaterial3D.StencilCompareEnum.GreaterOrEqual == compareMode )
{
return "compare_greater_or_equal";
}
else if ( BaseMaterial3D.StencilCompareEnum.Less == compareMode )
{
return "compare_less";
}
else if ( BaseMaterial3D.StencilCompareEnum.LessOrEqual == compareMode )
{
return "compare_less_or_equal";
}
return "compare_always";
}
public static StencilMode ConvertWriteMode( StencilWriteMode writeMode )
{
if ( writeMode == StencilWriteMode.Write_Depth_Success )
{ return StencilMode.Write_Depth_Success; }
if ( writeMode == StencilWriteMode.Write_Depth_Fail )
{ return StencilMode.Write_Depth_Fail; }
return StencilMode.Write_Always;
}
public static BaseMaterial3D.StencilCompareEnum ConvertReadMode( StencilReadMode readMode )
{
if ( readMode == StencilReadMode.NotEqual )
{ return BaseMaterial3D.StencilCompareEnum.NotEqual; }
if ( readMode == StencilReadMode.Less )
{ return BaseMaterial3D.StencilCompareEnum.Less; }
if ( readMode == StencilReadMode.LessOrEqual )
{ return BaseMaterial3D.StencilCompareEnum.LessOrEqual; }
if ( readMode == StencilReadMode.Greater )
{ return BaseMaterial3D.StencilCompareEnum.Greater; }
if ( readMode == StencilReadMode.GreaterOrEqual )
{ return BaseMaterial3D.StencilCompareEnum.GreaterOrEqual; }
return BaseMaterial3D.StencilCompareEnum.Equal;
}
}
}