Editor/ShaderGraphPlus/Compiler/GraphCompiler.Types.cs
namespace ShaderGraphPlus;

public sealed partial class GraphCompiler
{
	/// <summary>
	/// Avalible value types that are passed between <seealso cref="ShaderNodePlus"/> nodes.
	/// Value represents if the key type is defined in editor code or not.
	/// </summary>
	internal static Dictionary<Type, bool> ValueTypes => new()
	{
		{ typeof( bool ), false },
		{ typeof( int ), false },
		{ typeof( float ), false },
		{ typeof( Vector2 ),false },
		{ typeof( Vector3 ), false },
		{ typeof( Vector4 ), false },
		{ typeof( Color ), false },
		{ typeof( Float2x2 ), true },
		{ typeof( Float3x3 ), true },
		{ typeof( Float4x4 ), true },
		{ typeof( Texture ), true },
		{ typeof( Sampler ), true },
	};

	/// <summary>
	/// Value types that are exposed to the material editor.
	/// </summary>
	internal static List<Type> MaterialParameterTypes => new()
	{
		{ typeof( bool ) },
		{ typeof( int ) },
		{ typeof( float ) },
		{ typeof( Vector2 ) },
		{ typeof( Vector3 ) },
		{ typeof( Vector4 ) },
		{ typeof( Color ) },
		{ typeof( Texture ) },
	};

	/// <summary>
	/// Value types that can be set on <seealso cref="RenderAttributes"/>
	/// </summary>
	internal static List<Type> ShaderAttributeTypes => new()
	{
		{ typeof( bool ) },
		{ typeof( int ) },
		{ typeof( Vector2Int ) },
		{ typeof( Vector3Int ) },
		{ typeof( float ) },
		{ typeof( Double ) },
		{ typeof( Angles ) },
		{ typeof( Vector2 ) },
		{ typeof( Vector3 ) },
		{ typeof( Vector4 ) },
		{ typeof( Color ) },
		{ typeof( Texture ) },
		{ typeof( Sampler ) },
	};

	/// <summary>
	/// Value types that have no defaults.
	/// </summary>
	internal static HashSet<Type> ValueTypesNoDefault => new()
	{
		{ typeof( Sampler ) },
		{ typeof( Texture ) },
	};
}