您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
58 行
1.4 KiB
58 行
1.4 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using UnityEngine;
|
|
|
|
namespace UnityEditor.Graphs.Material
|
|
{
|
|
[Title("Channels/Swizzle Node")]
|
|
class SwizzleNode : Function2Input
|
|
{
|
|
[SerializeField]
|
|
private int[] m_SwizzleChannel = new int[4];
|
|
|
|
public override void Init()
|
|
{
|
|
base.Init ();
|
|
name = "SwizzleNode";
|
|
}
|
|
|
|
public override void NodeUI(GraphGUI host)
|
|
{
|
|
base.NodeUI(host);
|
|
string[] channelNames = { "X", "Y", "Z", "W" };
|
|
string[] values = { "0", "1", "Input1.x", "Input1.y", "Input1.z", "Input1.w", "Input2.x", "Input2.y", "Input2.z", "Input2.w" };
|
|
EditorGUI.BeginChangeCheck ();
|
|
for (int n = 0; n < 4; n++)
|
|
m_SwizzleChannel[n] = EditorGUILayout.Popup(channelNames[n] + "=", m_SwizzleChannel[n], values);
|
|
if (EditorGUI.EndChangeCheck())
|
|
RegeneratePreviewShaders ();
|
|
}
|
|
|
|
protected override string GetFunctionName ()
|
|
{
|
|
return "";
|
|
}
|
|
|
|
protected override string GetFunctionCallBody(string inputValue1, string inputValue2)
|
|
{
|
|
string[] inputValues = { inputValue1, inputValue2 };
|
|
string[] channelNames = { "x", "y", "z", "w" };
|
|
string s = precision + "4(";
|
|
for (int n = 0; n < 4; n++)
|
|
{
|
|
int c = m_SwizzleChannel[n];
|
|
if (c < 2)
|
|
s += c;
|
|
else
|
|
{
|
|
c -= 2;
|
|
s += inputValues[c >> 2] + "." + channelNames[c & 3];
|
|
}
|
|
s += (n == 3) ? ")" : ",";
|
|
}
|
|
return s;
|
|
}
|
|
}
|
|
}
|