74 lines
2.7 KiB
C#
74 lines
2.7 KiB
C#
using UnityEditor.ShaderGraph;
|
|
using UnityEngine;
|
|
using static UnityEditor.Rendering.BuiltIn.ShaderUtils;
|
|
using UnityEditor.Rendering.BuiltIn;
|
|
using System;
|
|
using UnityEngine.UIElements;
|
|
using UnityEditor.Rendering.Canvas.ShaderGraph;
|
|
|
|
namespace UnityEditor.Rendering.Universal.ShaderGraph
|
|
{
|
|
class UniversalCanvasSubTarget: CanvasSubTarget<UniversalTarget>, IRequiresData<CanvasData>, IHasMetadata
|
|
{
|
|
static readonly GUID kSourceCodeGuid = new GUID("f7075c3a804b49bf86535f6f86615132"); // UniversalCanvasSubTarget.cs
|
|
|
|
static readonly string kCanvasPass = "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/CanvasPass.hlsl";
|
|
public override void Setup(ref TargetSetupContext context)
|
|
{
|
|
base.Setup(ref context);
|
|
context.AddAssetDependency(kSourceCodeGuid, AssetCollection.Flags.SourceDependency);
|
|
}
|
|
public override bool IsActive() => true;
|
|
|
|
// We don't need the save context / update materials for now
|
|
public override object saveContext => null;
|
|
|
|
protected override string pipelineTag => UniversalTarget.kPipelineTag;
|
|
|
|
protected override IncludeCollection pregraphIncludes => new IncludeCollection
|
|
{
|
|
{ CoreIncludes.CorePregraph },
|
|
{ kInstancing, IncludeLocation.Pregraph },
|
|
{ CoreIncludes.ShaderGraphPregraph },
|
|
};
|
|
protected override IncludeCollection postgraphIncludes => new IncludeCollection
|
|
{
|
|
{kCanvasPass, IncludeLocation.Postgraph},
|
|
};
|
|
|
|
public UniversalCanvasSubTarget()
|
|
{
|
|
displayName = "Canvas";
|
|
}
|
|
|
|
protected override DefineCollection GetAdditionalDefines()
|
|
{
|
|
var result = new DefineCollection();
|
|
if (canvasData.alphaClip)
|
|
result.Add(CoreKeywordDescriptors.AlphaTestOn, 1);
|
|
|
|
result.Add(base.GetAdditionalDefines());
|
|
return result;
|
|
}
|
|
|
|
public override void GetActiveBlocks(ref TargetActiveBlockContext context)
|
|
{
|
|
base.GetActiveBlocks(ref context);
|
|
context.AddBlock(BlockFields.SurfaceDescription.AlphaClipThreshold, canvasData.alphaClip);
|
|
}
|
|
|
|
public override void GetFields(ref TargetFieldContext context)
|
|
{
|
|
base.GetFields(ref context);
|
|
if (canvasData.alphaClip)
|
|
context.AddField(UnityEditor.ShaderGraph.Fields.AlphaTest);
|
|
}
|
|
public override void CollectShaderProperties(PropertyCollector collector, GenerationMode generationMode)
|
|
{
|
|
base.CollectShaderProperties(collector, generationMode);
|
|
if (canvasData.alphaClip)
|
|
collector.AddShaderProperty(CanvasProperties.AlphaTest);
|
|
}
|
|
}
|
|
}
|