public override AbstractShaderProperty Copy()
        {
            var copied = new SamplerStateShaderProperty();

            copied.displayName = displayName;
            copied.value       = value;
            return(copied);
        }
        public void GenerateNodeCode(ShaderGenerator visitor, GraphContext graphContext, GenerationMode generationMode)
        {
            var graph    = owner as GraphData;
            var property = graph.properties.FirstOrDefault(x => x.guid == propertyGuid);

            if (property == null)
            {
                return;
            }

            if (property is Vector1ShaderProperty)
            {
                var result = string.Format("{0} {1} = {2};"
                                           , precision
                                           , GetVariableNameForSlot(OutputSlotId)
                                           , property.referenceName);
                visitor.AddShaderChunk(result, true);
            }
            else if (property is Vector2ShaderProperty)
            {
                var result = string.Format("{0}2 {1} = {2};"
                                           , precision
                                           , GetVariableNameForSlot(OutputSlotId)
                                           , property.referenceName);
                visitor.AddShaderChunk(result, true);
            }
            else if (property is Vector3ShaderProperty)
            {
                var result = string.Format("{0}3 {1} = {2};"
                                           , precision
                                           , GetVariableNameForSlot(OutputSlotId)
                                           , property.referenceName);
                visitor.AddShaderChunk(result, true);
            }
            else if (property is Vector4ShaderProperty)
            {
                var result = string.Format("{0}4 {1} = {2};"
                                           , precision
                                           , GetVariableNameForSlot(OutputSlotId)
                                           , property.referenceName);
                visitor.AddShaderChunk(result, true);
            }
            else if (property is ColorShaderProperty)
            {
                var result = string.Format("{0}4 {1} = {2};"
                                           , precision
                                           , GetVariableNameForSlot(OutputSlotId)
                                           , property.referenceName);
                visitor.AddShaderChunk(result, true);
            }
            else if (property is BooleanShaderProperty)
            {
                var result = string.Format("{0} {1} = {2};"
                                           , precision
                                           , GetVariableNameForSlot(OutputSlotId)
                                           , property.referenceName);
                visitor.AddShaderChunk(result, true);
            }
            else if (property is Matrix2ShaderProperty)
            {
                var result = string.Format("{0}2x2 {1} = {2};"
                                           , precision
                                           , GetVariableNameForSlot(OutputSlotId)
                                           , property.referenceName);
                visitor.AddShaderChunk(result, true);
            }
            else if (property is Matrix3ShaderProperty)
            {
                var result = string.Format("{0}3x3 {1} = {2};"
                                           , precision
                                           , GetVariableNameForSlot(OutputSlotId)
                                           , property.referenceName);
                visitor.AddShaderChunk(result, true);
            }
            else if (property is Matrix4ShaderProperty)
            {
                var result = string.Format("{0}4x4 {1} = {2};"
                                           , precision
                                           , GetVariableNameForSlot(OutputSlotId)
                                           , property.referenceName);
                visitor.AddShaderChunk(result, true);
            }
            else if (property is SamplerStateShaderProperty)
            {
                SamplerStateShaderProperty samplerStateProperty = property as SamplerStateShaderProperty;
                var result = string.Format("SamplerState {0} = {1}_{2}_{3};"
                                           , GetVariableNameForSlot(OutputSlotId)
                                           , samplerStateProperty.referenceName
                                           , samplerStateProperty.value.filter
                                           , samplerStateProperty.value.wrap);
                visitor.AddShaderChunk(result, true);
            }
            else if (property is GradientShaderProperty)
            {
                if (generationMode == GenerationMode.Preview)
                {
                    var result = string.Format("Gradient {0} = {1};"
                                               , GetVariableNameForSlot(OutputSlotId)
                                               , GradientUtils.GetGradientForPreview(property.referenceName));
                    visitor.AddShaderChunk(result, true);
                }
                else
                {
                    var result = string.Format("Gradient {0} = {1};"
                                               , GetVariableNameForSlot(OutputSlotId)
                                               , property.referenceName);
                    visitor.AddShaderChunk(result, true);
                }
            }
        }
        public void GenerateNodeCode(ShaderStringBuilder sb, GraphContext graphContext, GenerationMode generationMode)
        {
            var graph    = owner as GraphData;
            var property = graph.properties.FirstOrDefault(x => x.guid == propertyGuid);

            if (property == null)
            {
                return;
            }

            if (property is Vector1ShaderProperty)
            {
                var result = string.Format("$precision {0} = {1};"
                                           , GetVariableNameForSlot(OutputSlotId)
                                           , property.referenceName);
                sb.AppendLine(result);
            }
            else if (property is Vector2ShaderProperty)
            {
                var result = string.Format("$precision2 {0} = {1};"
                                           , GetVariableNameForSlot(OutputSlotId)
                                           , property.referenceName);
                sb.AppendLine(result);
            }
            else if (property is Vector3ShaderProperty)
            {
                var result = string.Format("$precision3 {0} = {1};"
                                           , GetVariableNameForSlot(OutputSlotId)
                                           , property.referenceName);
                sb.AppendLine(result);
            }
            else if (property is Vector4ShaderProperty)
            {
                var result = string.Format("$precision4 {0} = {1};"
                                           , GetVariableNameForSlot(OutputSlotId)
                                           , property.referenceName);
                sb.AppendLine(result);
            }
            else if (property is ColorShaderProperty)
            {
                var result = string.Format("$precision4 {0} = {1};"
                                           , GetVariableNameForSlot(OutputSlotId)
                                           , property.referenceName);
                sb.AppendLine(result);
            }
            else if (property is BooleanShaderProperty)
            {
                var result = string.Format("$precision {0} = {1};"
                                           , GetVariableNameForSlot(OutputSlotId)
                                           , property.referenceName);
                sb.AppendLine(result);
            }
            else if (property is Matrix2ShaderProperty)
            {
                var result = string.Format("$precision2x2 {0} = {1};"
                                           , GetVariableNameForSlot(OutputSlotId)
                                           , property.referenceName);
                sb.AppendLine(result);
            }
            else if (property is Matrix3ShaderProperty)
            {
                var result = string.Format("$precision3x3 {0} = {1};"
                                           , GetVariableNameForSlot(OutputSlotId)
                                           , property.referenceName);
                sb.AppendLine(result);
            }
            else if (property is Matrix4ShaderProperty)
            {
                var result = string.Format("$precision4x4 {0} = {1};"
                                           , GetVariableNameForSlot(OutputSlotId)
                                           , property.referenceName);
                sb.AppendLine(result);
            }
            else if (property is SamplerStateShaderProperty)
            {
                SamplerStateShaderProperty samplerStateProperty = property as SamplerStateShaderProperty;
                var result = string.Format("SamplerState {0} = {1};"
                                           , GetVariableNameForSlot(OutputSlotId)
                                           , samplerStateProperty.referenceName);
                sb.AppendLine(result);
            }
            else if (property is GradientShaderProperty)
            {
                if (generationMode == GenerationMode.Preview)
                {
                    var result = string.Format("Gradient {0} = {1};"
                                               , GetVariableNameForSlot(OutputSlotId)
                                               , GradientUtils.GetGradientForPreview(property.referenceName));
                    sb.AppendLine(result);
                }
                else
                {
                    var result = string.Format("Gradient {0} = {1};"
                                               , GetVariableNameForSlot(OutputSlotId)
                                               , property.referenceName);
                    sb.AppendLine(result);
                }
            }
        }