Rasagar/Library/PackageCache/com.unity.shadergraph/Editor/Data/Interfaces/IMayRequireTransform.cs
2024-08-26 23:07:20 +03:00

56 lines
2.0 KiB
C#

using System.Collections.Generic;
using UnityEditor.ShaderGraph.Internal;
namespace UnityEditor.ShaderGraph
{
public struct NeededTransform
{
static Dictionary<UnityMatrixType, NeededTransform> s_TransformMap = new Dictionary<UnityMatrixType, NeededTransform>
{
{UnityMatrixType.Model, ObjectToWorld},
{UnityMatrixType.InverseModel, WorldToObject},
// TODO: Define the rest.
{UnityMatrixType.View, None},
{UnityMatrixType.InverseView, None},
{UnityMatrixType.Projection, None},
{UnityMatrixType.InverseProjection, None},
{UnityMatrixType.ViewProjection, None},
{UnityMatrixType.InverseViewProjection, None},
};
public static NeededTransform None => new NeededTransform(NeededCoordinateSpace.None, NeededCoordinateSpace.None);
public static NeededTransform ObjectToWorld => new NeededTransform(NeededCoordinateSpace.Object, NeededCoordinateSpace.World);
public static NeededTransform WorldToObject => new NeededTransform(NeededCoordinateSpace.World, NeededCoordinateSpace.Object);
public NeededTransform(NeededCoordinateSpace from, NeededCoordinateSpace to)
{
this.from = from;
this.to = to;
}
// Secondary constructor for certain nodes like TransformationMatrix.
internal NeededTransform(UnityMatrixType matrix)
{
if (s_TransformMap.TryGetValue(matrix, out var transform))
{
from = transform.from;
to = transform.to;
}
else
{
from = NeededCoordinateSpace.None;
to = NeededCoordinateSpace.None;
}
}
public NeededCoordinateSpace from;
public NeededCoordinateSpace to;
}
interface IMayRequireTransform
{
NeededTransform[] RequiresTransform(ShaderStageCapability stageCapability = ShaderStageCapability.All);
}
}