using Unity.GraphAuthoring.Editor.ProviderSystem; using Unity.GraphAuthoring.Editor.ProviderSystem.Hints; using static Unity.GraphAuthoring.Editor.ProviderSystem.HintUtils; namespace UnityEditor.ShaderGraph.ProviderSystem { internal class ParameterHeader : StrongHeader { internal string referenceName { get; private set; } internal IShaderType shaderType { get; private set; } internal string typeName => shaderType.Name; internal string displayName { get; private set; } internal string tooltip { get; private set; } internal bool isInput { get; private set; } internal bool isOutput { get; private set; } internal bool isColor { get; private set; } internal bool isStatic { get; private set; } internal bool isLocal { get; private set; } internal bool isDropdown { get; private set; } internal string[] options { get; private set; } internal bool isSlider { get; private set; } internal float sliderMin { get; private set; } internal float sliderMax { get; private set; } internal float[] defaultValue { get; private set; } internal string defaultString { get; private set; } internal string externalQualifiedTypeName { get; private set; } internal bool isLiteral { get; private set; } internal bool isDynamic { get; private set; } internal bool isBareResource { get; private set; } internal bool isReferable { get; private set; } internal string Referable { get; private set; } internal bool isLinkage { get; private set; } internal string linkTarget { get; private set; } internal bool hasCustomBinding { get; private set; } internal string customBinding { get; private set; } protected override void OnProcess(IShaderField param, IProvider provider) { referenceName = param.Name; isInput = param.IsInput; isOutput = param.IsOutput; shaderType = param.ShaderType; string typeTest = shaderType.Name.ToLowerInvariant(); bool isSampler = typeTest.Contains("sampler"); bool isTexture = typeTest.Contains("texture"); isBareResource = !typeTest.Contains("unity") && (isSampler || isTexture); displayName = param.Hints.GetHint()?.Value as string; tooltip = param.Hints.GetHint()?.Value as string; isStatic = param.Hints.GetHint()?.IsResolved ?? false; isLocal = param.Hints.GetHint()?.IsResolved ?? false; var dropdown = param.Hints.GetHint(); if (isDropdown = dropdown?.IsResolved ?? false) options = dropdown.Value as string[]; isColor = param.Hints.GetHint()?.IsResolved ?? false; var range = param.Hints.GetHint(); if (isSlider = range?.IsResolved ?? false) { var r = range.Value as float[]; sliderMin = r[0]; sliderMax = r[1]; } var defaultHint = param.Hints.GetHint(); if (defaultHint?.IsResolved ?? false) { defaultString = defaultHint.Value as string; defaultValue = LazyTokenFloat(defaultString); } externalQualifiedTypeName = typeName; var externalNamespace = param.Hints.GetHint()?.Value as string; if (!string.IsNullOrWhiteSpace(externalNamespace)) externalQualifiedTypeName = $"{externalNamespace}::{typeName}"; isLiteral = param.Hints.GetHint()?.IsResolved ?? false; var referableHint = param.Hints.GetHint(); if (isReferable = referableHint?.IsResolved ?? false) Referable = referableHint.Value as string; isDynamic = param.Hints.GetHint()?.IsResolved ?? false; var linkage = param.Hints.GetHint(); if (isLinkage = linkage?.IsResolved ?? false) { linkTarget = linkage.Value as string; isLocal = true; } var customBindingHint = param.Hints.GetHint(); if (hasCustomBinding = customBindingHint?.IsResolved ?? false) customBinding = customBindingHint.Value as string; } internal ParameterHeader(IShaderField param, IProvider provider) { Process(param, provider); } // For returns. internal ParameterHeader(string displayName, IShaderType shaderType, string tooltip, IProvider provider) { var hints = new IStrongHint[] { new DisplayName(Common.kDisplayName, displayName, true), new Tooltip(Common.kTooltip, tooltip, true), }; var field = new ShaderField("__UNITY_SHADERGRAPH_UNUSED", false, true, shaderType, hints); Process(field, provider); } } }