FateViewer/Assets/AmplifyShaderEditor/Plugins/Editor/Nodes/HelperFuncs/ComputeScreenPosHlpNode.cs

77 lines
2.5 KiB
C#

// Amplify Shader Editor - Visual Shader Editing Tool
// Copyright (c) Amplify Creations, Lda <info@amplify.pt>
using UnityEngine;
using System;
namespace AmplifyShaderEditor
{
[Serializable]
[NodeAttributes( "Compute Screen Pos", "Camera And Screen", "Computes texture coordinate for doing a screenspace-mapped texture sample. Input is clip space position" )]
public sealed class ComputeScreenPosHlpNode : HelperParentNode
{
[SerializeField]
private bool m_normalize = false;
private string NormalizeStr = "Normalize";
private readonly string[] NormalizeOps =
{ "{0} = {0} / {0}.w;",
"{0}.z = ( UNITY_NEAR_CLIP_VALUE >= 0 ) ? {0}.z : {0}.z* 0.5 + 0.5;"
};
protected override void CommonInit( int uniqueId )
{
base.CommonInit( uniqueId );
m_funcType = "ComputeScreenPos";
m_funcHDFormatOverride = "ComputeScreenPos( {0} , _ProjectionParams.x )";
m_inputPorts[ 0 ].ChangeType( WirePortDataType.FLOAT4, false );
m_outputPorts[ 0 ].ChangeType( WirePortDataType.FLOAT4, false );
m_outputPorts[ 0 ].Name = "XYZW";
m_autoWrapProperties = true;
m_previewShaderGUID = "97bd4895d847d764eb21d2bf7aa13671";
}
public override void SetPreviewInputs()
{
base.SetPreviewInputs();
m_previewMaterialPassId = m_normalize ? 1 : 0;
}
protected override void OnUniqueIDAssigned()
{
base.OnUniqueIDAssigned();
m_localVarName = "computeScreenPos" + OutputId;
}
public override void DrawProperties()
{
base.DrawProperties();
m_normalize = EditorGUILayoutToggle( NormalizeStr, m_normalize );
}
public override string GenerateShaderForOutput( int outputId, ref MasterNodeDataCollector dataCollector, bool ignoreLocalvar )
{
string result = base.GenerateShaderForOutput( outputId, ref dataCollector, ignoreLocalvar );
if( m_normalize )
{
dataCollector.AddLocalVariable( UniqueId, string.Format( NormalizeOps[ 0 ], m_localVarName ) );
dataCollector.AddLocalVariable( UniqueId, string.Format( NormalizeOps[ 1 ], m_localVarName ) );
}
return result;
}
public override void WriteToString( ref string nodeInfo, ref string connectionsInfo )
{
base.WriteToString( ref nodeInfo, ref connectionsInfo );
IOUtils.AddFieldValueToString( ref nodeInfo, m_normalize );
}
public override void ReadFromString( ref string[] nodeParams )
{
base.ReadFromString( ref nodeParams );
if( UIUtils.CurrentShaderVersion() > 15404 )
{
m_normalize = Convert.ToBoolean( GetCurrentParam( ref nodeParams ) );
}
}
}
}