95 lines
3.1 KiB
C#
95 lines
3.1 KiB
C#
|
using System;
|
||
|
using System.Linq;
|
||
|
|
||
|
namespace UnityEditor.ShaderGraph.Internal
|
||
|
{
|
||
|
[Flags]
|
||
|
public enum NeededCoordinateSpace
|
||
|
{
|
||
|
None = 0,
|
||
|
Object = 1 << 0,
|
||
|
View = 1 << 1,
|
||
|
World = 1 << 2,
|
||
|
Tangent = 1 << 3,
|
||
|
AbsoluteWorld = 1 << 4,
|
||
|
Screen = 1 << 5
|
||
|
}
|
||
|
|
||
|
public enum CoordinateSpace
|
||
|
{
|
||
|
Object,
|
||
|
View,
|
||
|
World,
|
||
|
Tangent,
|
||
|
AbsoluteWorld,
|
||
|
Screen
|
||
|
}
|
||
|
|
||
|
public enum InterpolatorType
|
||
|
{
|
||
|
Normal,
|
||
|
BiTangent,
|
||
|
Tangent,
|
||
|
ViewDirection,
|
||
|
Position,
|
||
|
PositionPredisplacement,
|
||
|
}
|
||
|
|
||
|
public static class CoordinateSpaceExtensions
|
||
|
{
|
||
|
static int s_SpaceCount = Enum.GetValues(typeof(CoordinateSpace)).Length;
|
||
|
static int s_InterpolatorCount = Enum.GetValues(typeof(InterpolatorType)).Length;
|
||
|
static string[] s_VariableNames = new string[s_SpaceCount * s_InterpolatorCount];
|
||
|
|
||
|
public static string ToVariableName(this CoordinateSpace space, InterpolatorType type)
|
||
|
{
|
||
|
var index = (int)space + (int)type * s_SpaceCount;
|
||
|
if (string.IsNullOrEmpty(s_VariableNames[index]))
|
||
|
s_VariableNames[index] = string.Format("{0}Space{1}", space, type);
|
||
|
return s_VariableNames[index];
|
||
|
}
|
||
|
|
||
|
public static NeededCoordinateSpace ToNeededCoordinateSpace(this CoordinateSpace space)
|
||
|
{
|
||
|
switch (space)
|
||
|
{
|
||
|
case CoordinateSpace.Object:
|
||
|
return NeededCoordinateSpace.Object;
|
||
|
case CoordinateSpace.View:
|
||
|
return NeededCoordinateSpace.View;
|
||
|
case CoordinateSpace.World:
|
||
|
return NeededCoordinateSpace.World;
|
||
|
case CoordinateSpace.Tangent:
|
||
|
return NeededCoordinateSpace.Tangent;
|
||
|
case CoordinateSpace.AbsoluteWorld:
|
||
|
return NeededCoordinateSpace.AbsoluteWorld;
|
||
|
case CoordinateSpace.Screen:
|
||
|
return NeededCoordinateSpace.Screen;
|
||
|
default:
|
||
|
throw new ArgumentOutOfRangeException(nameof(space), space, null);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public static CoordinateSpace ToCoordinateSpace(this NeededCoordinateSpace space)
|
||
|
{
|
||
|
switch (space)
|
||
|
{
|
||
|
case NeededCoordinateSpace.Object:
|
||
|
return CoordinateSpace.Object;
|
||
|
case NeededCoordinateSpace.View:
|
||
|
return CoordinateSpace.View;
|
||
|
case NeededCoordinateSpace.World:
|
||
|
return CoordinateSpace.World;
|
||
|
case NeededCoordinateSpace.Tangent:
|
||
|
return CoordinateSpace.Tangent;
|
||
|
case NeededCoordinateSpace.AbsoluteWorld:
|
||
|
return CoordinateSpace.AbsoluteWorld;
|
||
|
case NeededCoordinateSpace.Screen:
|
||
|
return CoordinateSpace.Screen;
|
||
|
default:
|
||
|
throw new ArgumentOutOfRangeException(nameof(space), space, null);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|