Editor/ShaderGraphPlus/Nodes/Variables/ViewportNode.cs
namespace ShaderGraphPlus.Nodes;

/// <summary>
/// Info about the current viewport.
/// </summary>
[Title( "Viewport" ), Category( "Variables" ), Icon( "tv" )]
public sealed class ViewportNode : ShaderNodePlus
{
	[JsonIgnore, Hide, Browsable( false )]
	public override Color NodeTitleColor => ShaderGraphPlusTheme.NodeHeaderColors.GlobalVariableNode;

	[Output( typeof( Vector2 ) ), Title( "Size" )]
	[Hide]
	public static NodeResult.Func ViewportSize => ( GraphCompiler compiler ) => new( ResultType.Vector2, "g_vViewportSize" );

	[Output( typeof( Vector2 ) ), Title( "Inverse Size" )]
	[Hide]
	public static NodeResult.Func ViewportInverseSize => ( GraphCompiler compiler ) => new( ResultType.Vector2, "g_vInvViewportSize" );

	[Output( typeof( Vector2 ) ), Title( "Offset" )]
	[Hide]
	public static NodeResult.Func ViewportOffset => ( GraphCompiler compiler ) => new( ResultType.Vector2, "g_vViewportOffset" );

	[Output( typeof( float ) ), Title( "Min Z" )]
	[Hide]
	public static NodeResult.Func ViewportMinZ => ( GraphCompiler compiler ) => new( ResultType.Float, "g_flViewportMinZ" );

	[Output( typeof( float ) ), Title( "Max Z" )]
	[Hide]
	public static NodeResult.Func ViewportMaxZ => ( GraphCompiler compiler ) => new( ResultType.Float, "g_flViewportMaxZ" );
}