You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
94 lines
3.6 KiB
94 lines
3.6 KiB
using System; |
|
using UnityEditor.Graphing; |
|
using UnityEngine; |
|
|
|
namespace UnityEditor.ShaderGraph |
|
{ |
|
[Serializable] |
|
class SamplerStateMaterialSlot : MaterialSlot |
|
{ |
|
public SamplerStateMaterialSlot() |
|
{ |
|
} |
|
|
|
public SamplerStateMaterialSlot( |
|
int slotId, |
|
string displayName, |
|
string shaderOutputName, |
|
SlotType slotType, |
|
ShaderStageCapability stageCapability = ShaderStageCapability.All, |
|
bool hidden = false) |
|
: base(slotId, displayName, shaderOutputName, slotType, stageCapability, hidden) |
|
{ |
|
} |
|
|
|
[SerializeField] |
|
bool m_BareResource = false; |
|
internal override bool bareResource |
|
{ |
|
get { return m_BareResource; } |
|
set { m_BareResource = value; } |
|
} |
|
|
|
// NOT serialized -- this is always set by the parent node if they care about it |
|
public TextureSamplerState defaultSamplerState { get; set; } |
|
public string defaultSamplerStateName => defaultSamplerState?.defaultPropertyName ?? "SamplerState_Linear_Repeat"; |
|
|
|
public override void AppendHLSLParameterDeclaration(ShaderStringBuilder sb, string paramName) |
|
{ |
|
if (m_BareResource) |
|
{ |
|
// we have to use our modified macro declaration here, to ensure that something is declared for GLES2 platforms |
|
// (the standard SAMPLER macro doesn't declare anything, so the commas will be messed up in the parameter list) |
|
sb.Append("UNITY_BARE_SAMPLER("); |
|
sb.Append(paramName); |
|
sb.Append(")"); |
|
} |
|
else |
|
base.AppendHLSLParameterDeclaration(sb, paramName); |
|
} |
|
|
|
public override string GetDefaultValue(GenerationMode generationMode) |
|
{ |
|
var nodeOwner = owner as AbstractMaterialNode; |
|
if (nodeOwner == null) |
|
throw new Exception(string.Format("Slot {0} either has no owner, or the owner is not a {1}", this, typeof(AbstractMaterialNode))); |
|
|
|
return $"UnityBuildSamplerStateStruct({defaultSamplerStateName})"; |
|
} |
|
|
|
public override SlotValueType valueType { get { return SlotValueType.SamplerState; } } |
|
public override ConcreteSlotValueType concreteValueType { get { return ConcreteSlotValueType.SamplerState; } } |
|
public override bool isDefaultValue => true; |
|
|
|
public override void AddDefaultProperty(PropertyCollector properties, GenerationMode generationMode) |
|
{ |
|
var nodeOwner = owner as AbstractMaterialNode; |
|
if (nodeOwner == null) |
|
throw new Exception(string.Format("Slot {0} either has no owner, or the owner is not a {1}", this, typeof(AbstractMaterialNode))); |
|
|
|
properties.AddShaderProperty(new SamplerStateShaderProperty() |
|
{ |
|
value = defaultSamplerState ?? new TextureSamplerState() |
|
{ |
|
filter = TextureSamplerState.FilterMode.Linear, |
|
wrap = TextureSamplerState.WrapMode.Repeat |
|
}, |
|
overrideReferenceName = defaultSamplerStateName, |
|
generatePropertyBlock = false, |
|
}); |
|
} |
|
|
|
public override void CopyValuesFrom(MaterialSlot foundSlot) |
|
{ } |
|
|
|
public override void CopyDefaultValue(MaterialSlot other) |
|
{ |
|
base.CopyDefaultValue(other); |
|
if (other is SamplerStateMaterialSlot ms) |
|
{ |
|
defaultSamplerState = ms.defaultSamplerState; |
|
} |
|
} |
|
} |
|
}
|
|
|