Editor/ShaderGraphPlus/Nodes/GBuffer/SampleGBufferNode.cs
namespace ShaderGraphPlus.Nodes;
public abstract class GBufferSampleNode : ShaderNodePlus
{
[JsonIgnore, Hide, Browsable( false )]
public override Color NodeTitleColor => ShaderGraphPlusTheme.NodeHeaderColors.FunctionNode;
[Input( typeof( Vector2 ) ), Title( "ScreenPos" ), Hide]
public NodeInput ScreenPosition { get; set; }
[Hide, JsonIgnore]
public virtual string Buffer { get; }
[Output, Title( "Result" )]
[Hide]
public NodeResult.Func Result => ( GraphCompiler compiler ) =>
{
var screenPostion = compiler.Result( ScreenPosition );
var result = "";
if ( !screenPostion.IsValid )
{
result = $"{Buffer}::Sample( {(compiler.IsVs ? $"i.vPositionPs.xy" : $"i.vPositionSs.xy")} )";
}
else
{
result = $"{Buffer}::Sample( {screenPostion.Code} )";
}
return new NodeResult( ResultType.Vector3, result );
};
}
/// <summary>
/// Sample the normal gbuffer.
/// </summary>
[Title( "Sample Normal GBuffer" ), Category( "GBuffer" ), Icon( "colorize" )]
public sealed class SampleNormalGBufferNode : GBufferSampleNode
{
[Hide, JsonIgnore]
public override string Buffer => "Normals";
}
/// <summary>
/// Sample the roughness gbuffer.
/// </summary>
[Title( "Sample Roughness GBuffer" ), Category( "GBuffer" ), Icon( "colorize" )]
public sealed class SampleRoughnessGBufferNode : GBufferSampleNode
{
[Hide, JsonIgnore]
public override string Buffer => "Roughness";
}