Files
ichni_Official/Packages/NB_FX/NBShaders2/Runtime/NBShaderPassFeatureCatalog.cs
SoulliesOfficial 40fa80cd70 NB_FX
2026-07-17 17:46:16 -04:00

107 lines
4.3 KiB
C#

using System.Collections.Generic;
namespace NBShader
{
/// <summary>
/// Catalog of NBShader passes that can be controlled by feature tiering.
/// UniversalForward is the primary pass and is intentionally not listed as a tier feature.
/// </summary>
internal static class NBShaderPassFeatureCatalog
{
public const string MainForwardPassName = "UniversalForward";
public const string BackFirstPassId = "pass.backFirst";
public const string CameraOpaqueDistortPassId = "pass.screenDistort.cameraOpaque";
public const string DeferredDistortPassId = "pass.screenDistort.deferred";
public const string DepthOnlyPassId = "pass.depthOnly";
public const string ShadowCasterPassId = "pass.shadowCaster";
public const string Universal2DPassId = "pass.universal2D";
public static readonly NBShaderPassFeatureInfo[] RawPassFeatures =
{
new NBShaderPassFeatureInfo(BackFirstPassId, "SRPDefaultUnlit", "Back First Pass"),
new NBShaderPassFeatureInfo(CameraOpaqueDistortPassId, "NBCameraOpaqueDistortPass", "Camera Opaque Distort Pass"),
new NBShaderPassFeatureInfo(DeferredDistortPassId, "NBDeferredDistortPass", "Deferred Distort Pass"),
new NBShaderPassFeatureInfo(DepthOnlyPassId, "DepthOnly", "Depth Only Pass"),
new NBShaderPassFeatureInfo(ShadowCasterPassId, "ShadowCaster", "Shadow Caster Pass"),
new NBShaderPassFeatureInfo(Universal2DPassId, "Universal2D", "Universal 2D Pass")
};
public static readonly string[] RawPassFeatureIds = BuildRawPassFeatureIds();
private static readonly HashSet<string> RawPassFeatureIdSet = new HashSet<string>(RawPassFeatureIds);
private static readonly Dictionary<string, NBShaderPassFeatureInfo> PassFeaturesById = BuildPassFeaturesById();
private static readonly Dictionary<string, NBShaderPassFeatureInfo> PassFeaturesByPassName = BuildPassFeaturesByPassName();
public static bool IsManagedPassFeature(string featureId)
{
return !string.IsNullOrEmpty(featureId) && RawPassFeatureIdSet.Contains(featureId);
}
public static bool TryGetPassFeature(string featureId, out NBShaderPassFeatureInfo feature)
{
if (string.IsNullOrEmpty(featureId))
{
feature = null;
return false;
}
return PassFeaturesById.TryGetValue(featureId, out feature);
}
public static bool TryGetPassFeatureByPassName(string passName, out NBShaderPassFeatureInfo feature)
{
if (string.IsNullOrEmpty(passName))
{
feature = null;
return false;
}
return PassFeaturesByPassName.TryGetValue(passName, out feature);
}
public static string[] GetDefaultAllowedPassFeatures(NBShaderFeatureTier tier)
{
return (string[])RawPassFeatureIds.Clone();
}
private static string[] BuildRawPassFeatureIds()
{
var result = new string[RawPassFeatures.Length];
for (var i = 0; i < RawPassFeatures.Length; i++)
result[i] = RawPassFeatures[i].id;
return result;
}
private static Dictionary<string, NBShaderPassFeatureInfo> BuildPassFeaturesById()
{
var result = new Dictionary<string, NBShaderPassFeatureInfo>();
for (var i = 0; i < RawPassFeatures.Length; i++)
result[RawPassFeatures[i].id] = RawPassFeatures[i];
return result;
}
private static Dictionary<string, NBShaderPassFeatureInfo> BuildPassFeaturesByPassName()
{
var result = new Dictionary<string, NBShaderPassFeatureInfo>();
for (var i = 0; i < RawPassFeatures.Length; i++)
result[RawPassFeatures[i].passName] = RawPassFeatures[i];
return result;
}
}
internal sealed class NBShaderPassFeatureInfo
{
public readonly string id;
public readonly string passName;
public readonly string displayName;
public NBShaderPassFeatureInfo(string id, string passName, string displayName)
{
this.id = id;
this.passName = passName;
this.displayName = displayName;
}
}
}