您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
95 行
2.4 KiB
95 行
2.4 KiB
using System;
|
|
using UnityEngine;
|
|
|
|
namespace UnityEditor.Graphs.Material
|
|
{
|
|
[Title("Generate/Vector 4 Node")]
|
|
class Vector4Node : PropertyNode, IGeneratesBodyCode
|
|
{
|
|
[SerializeField]
|
|
private Vector4 m_Value;
|
|
|
|
public override void Init()
|
|
{
|
|
base.Init();
|
|
name = "V4Node";
|
|
AddSlot(new Slot(SlotType.OutputSlot, "Value"));
|
|
}
|
|
|
|
public override PropertyType propertyType
|
|
{
|
|
get { return PropertyType.Vector4; }
|
|
}
|
|
|
|
public override void GeneratePropertyBlock(PropertyGenerator visitor, GenerationMode generationMode)
|
|
{
|
|
if (HasBoundProperty() || !generationMode.IsPreview ())
|
|
return;
|
|
|
|
visitor.AddShaderProperty (new VectorPropertyChunk (GetPropertyName (), GetPropertyName (), m_Value, true));
|
|
}
|
|
|
|
public override string GetOutputVariableNameForSlot(Slot s, GenerationMode generationMode)
|
|
{
|
|
return GetPropertyName();
|
|
}
|
|
|
|
public override void GeneratePropertyUsages(ShaderGenerator visitor, GenerationMode generationMode)
|
|
{
|
|
if (HasBoundProperty() || !generationMode.IsPreview ())
|
|
return;
|
|
|
|
visitor.AddShaderChunk("float4 " + GetPropertyName() + ";", true);
|
|
}
|
|
|
|
public void GenerateNodeCode(ShaderGenerator visitor, GenerationMode generationMode)
|
|
{
|
|
if (HasBoundProperty() || generationMode.IsPreview ())
|
|
return;
|
|
|
|
visitor.AddShaderChunk (precision+"4 " + GetPropertyName() + " = "+precision+"4 (" + m_Value.x + ", " + m_Value.y + ", " + m_Value.z + ", " + m_Value.w + ");", true);
|
|
}
|
|
|
|
public override void NodeUI (Graphs.GraphGUI host)
|
|
{
|
|
base.NodeUI(host);
|
|
|
|
EditorGUI.BeginChangeCheck ();
|
|
m_Value = EditorGUILayout.Vector4Field("Value", m_Value, GUILayout.Width (170));
|
|
if (EditorGUI.EndChangeCheck())
|
|
{
|
|
var boundProp = boundProperty as VectorProperty;
|
|
if (boundProp != null)
|
|
{
|
|
boundProp.defaultVector = m_Value;
|
|
}
|
|
UpdatePreviewProperties ();
|
|
}
|
|
}
|
|
|
|
public override void BindProperty(ShaderProperty property, bool rebuildShaders)
|
|
{
|
|
base.BindProperty(property, rebuildShaders);
|
|
|
|
var vectorProp = property as VectorProperty;
|
|
if (vectorProp)
|
|
{
|
|
m_Value = vectorProp.defaultVector;
|
|
}
|
|
|
|
if (rebuildShaders)
|
|
RegeneratePreviewShaders();
|
|
else
|
|
UpdatePreviewProperties();
|
|
}
|
|
|
|
public override PreviewProperty GetPreviewProperty ()
|
|
{
|
|
return new PreviewProperty {
|
|
m_Name = GetPropertyName (),
|
|
m_PropType = PropertyType.Vector4,
|
|
m_Vector4 = m_Value
|
|
};
|
|
}
|
|
}
|
|
}
|