UnityGame/Library/PackageCache/com.unity.shadergraph/Editor/Data/Graphs/SamplerStateShaderProperty.cs
2024-10-27 10:53:47 +03:00

92 lines
3.1 KiB
C#

using System;
using UnityEditor.Graphing;
using UnityEditor.ShaderGraph.Internal;
using UnityEngine;
namespace UnityEditor.ShaderGraph
{
[BlackboardInputInfo(80)]
class SamplerStateShaderProperty : AbstractShaderProperty<TextureSamplerState>
{
public SamplerStateShaderProperty()
{
displayName = "SamplerState";
value = new TextureSamplerState();
}
public override PropertyType propertyType => PropertyType.SamplerState;
// Sampler States cannot be exposed on a Material
internal override bool isExposable => false;
// subgraph Sampler States can be renamed
// just the actual properties they create will always have fixed names
internal override bool isRenamable => true;
internal override bool isReferenceRenamable => false;
// this is the fixed naming scheme for actual samplerstates properties
string propertyReferenceName => value.defaultPropertyName;
public override string referenceNameForEditing => propertyReferenceName;
internal override bool AllowHLSLDeclaration(HLSLDeclaration decl) => false; // disable UI, nothing to choose
internal override void ForeachHLSLProperty(Action<HLSLProperty> action)
{
action(new HLSLProperty(HLSLType._SamplerState, propertyReferenceName, HLSLDeclaration.Global));
}
internal override string GetPropertyAsArgumentString(string precisionString)
{
return $"UnitySamplerState {referenceName}";
}
internal override string GetHLSLVariableName(bool isSubgraphProperty, GenerationMode mode)
{
if (isSubgraphProperty)
return referenceName;
else
return $"UnityBuildSamplerStateStruct({propertyReferenceName})";
}
internal override AbstractMaterialNode ToConcreteNode()
{
return new SamplerStateNode()
{
filter = value.filter,
wrap = value.wrap
};
}
internal override PreviewProperty GetPreviewMaterialProperty()
{
return default(PreviewProperty);
}
internal override ShaderInput Copy()
{
return new SamplerStateShaderProperty()
{
displayName = displayName,
value = value,
};
}
public override int latestVersion => 1;
public override void OnAfterDeserialize(string json)
{
if (sgVersion == 0)
{
// we no longer require forced reference names on sampler state properties
// as we enforce custom property naming by simply not using the reference name
// this allows us to use the real reference name for subgraph parameters
// however we must clear out the old reference name first (as it was always hard-coded)
// this will fallback to the default ref name
overrideReferenceName = null;
var unused = referenceName;
ChangeVersion(1);
}
}
}
}