123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- using System;
- using System.Collections.Generic;
- using UnityEditor.Graphing;
- namespace UnityEditor.ShaderGraph
- {
- [Serializable]
- enum SlotValueType
- {
- SamplerState,
- DynamicMatrix,
- Matrix4,
- Matrix3,
- Matrix2,
- Texture2D,
- Texture2DArray,
- Texture3D,
- Cubemap,
- Gradient,
- DynamicVector,
- Vector4,
- Vector3,
- Vector2,
- Vector1,
- Dynamic,
- Boolean
- }
- enum ConcreteSlotValueType
- {
- SamplerState,
- Matrix4,
- Matrix3,
- Matrix2,
- Texture2D,
- Texture2DArray,
- Texture3D,
- Cubemap,
- Gradient,
- Vector4,
- Vector3,
- Vector2,
- Vector1,
- Boolean
- }
- static class SlotValueHelper
- {
- public static int GetChannelCount(this ConcreteSlotValueType type)
- {
- switch (type)
- {
- case ConcreteSlotValueType.Vector4:
- return 4;
- case ConcreteSlotValueType.Vector3:
- return 3;
- case ConcreteSlotValueType.Vector2:
- return 2;
- case ConcreteSlotValueType.Vector1:
- return 1;
- default:
- return 0;
- }
- }
- public static int GetMatrixDimension(ConcreteSlotValueType type)
- {
- switch (type)
- {
- case ConcreteSlotValueType.Matrix4:
- return 4;
- case ConcreteSlotValueType.Matrix3:
- return 3;
- case ConcreteSlotValueType.Matrix2:
- return 2;
- default:
- return 0;
- }
- }
- public static ConcreteSlotValueType ConvertMatrixToVectorType(ConcreteSlotValueType matrixType)
- {
- switch (matrixType)
- {
- case ConcreteSlotValueType.Matrix4:
- return ConcreteSlotValueType.Vector4;
- case ConcreteSlotValueType.Matrix3:
- return ConcreteSlotValueType.Vector3;
- default:
- return ConcreteSlotValueType.Vector2;
- }
- }
- static Dictionary<ConcreteSlotValueType, List<SlotValueType>> s_ValidConversions;
- static List<SlotValueType> s_ValidSlotTypes;
- public static bool AreCompatible(SlotValueType inputType, ConcreteSlotValueType outputType)
- {
- if (s_ValidConversions == null)
- {
- var validVectors = new List<SlotValueType>()
- {
- SlotValueType.Dynamic, SlotValueType.DynamicVector,
- SlotValueType.Vector1, SlotValueType.Vector2, SlotValueType.Vector3, SlotValueType.Vector4
- };
- s_ValidConversions = new Dictionary<ConcreteSlotValueType, List<SlotValueType>>()
- {
- {ConcreteSlotValueType.Boolean, new List<SlotValueType>() {SlotValueType.Boolean}},
- {ConcreteSlotValueType.Vector1, validVectors},
- {ConcreteSlotValueType.Vector2, validVectors},
- {ConcreteSlotValueType.Vector3, validVectors},
- {ConcreteSlotValueType.Vector4, validVectors},
- {ConcreteSlotValueType.Matrix2, new List<SlotValueType>()
- {SlotValueType.Dynamic, SlotValueType.DynamicMatrix, SlotValueType.Matrix2}},
- {ConcreteSlotValueType.Matrix3, new List<SlotValueType>()
- {SlotValueType.Dynamic, SlotValueType.DynamicMatrix, SlotValueType.Matrix2, SlotValueType.Matrix3}},
- {ConcreteSlotValueType.Matrix4, new List<SlotValueType>()
- {SlotValueType.Dynamic, SlotValueType.DynamicMatrix, SlotValueType.Matrix2, SlotValueType.Matrix3, SlotValueType.Matrix4}},
- {ConcreteSlotValueType.Texture2D, new List<SlotValueType>() {SlotValueType.Texture2D}},
- {ConcreteSlotValueType.Texture3D, new List<SlotValueType>() {SlotValueType.Texture3D}},
- {ConcreteSlotValueType.Texture2DArray, new List<SlotValueType>() {SlotValueType.Texture2DArray}},
- {ConcreteSlotValueType.Cubemap, new List<SlotValueType>() {SlotValueType.Cubemap}},
- {ConcreteSlotValueType.SamplerState, new List<SlotValueType>() {SlotValueType.SamplerState}},
- {ConcreteSlotValueType.Gradient, new List<SlotValueType>() {SlotValueType.Gradient}},
- };
- }
- if(s_ValidConversions.TryGetValue(outputType, out s_ValidSlotTypes))
- {
- return s_ValidSlotTypes.Contains(inputType);
- }
- throw new ArgumentOutOfRangeException("Unknown Concrete Slot Type: " + outputType);
- }
- }
- }
|