mathe/Library/PackageCache/com.unity.shadergraph@14.0.8/Editor/Generation/Targets/CustomRenderTexture/CustomTextureSlice.cs
2024-09-20 20:30:10 +02:00

56 lines
2.1 KiB
C#

using UnityEngine;
using UnityEditor.ShaderGraph;
using UnityEditor.Graphing;
using UnityEditor.ShaderGraph.Internal;
namespace UnityEditor.Rendering.CustomRenderTexture.ShaderGraph
{
[Title("Custom Render Texture", "Slice Index / Cubemap Face")]
[SubTargetFilter(typeof(CustomTextureSubTarget))]
class CustomTextureSlice : AbstractMaterialNode, IGeneratesFunction
{
private const string kOutputSlotCubeFaceName = "Texture Cube Face";
private const string kOutputSlot3DSliceName = "Texture Depth Slice";
public const int OutputSlotCubeFaceId = 3;
public const int OutputSlot3DSliceId = 4;
public CustomTextureSlice()
{
name = "Slice Index / Cubemap Face";
UpdateNodeAfterDeserialization();
}
protected int[] validSlots => new[] { OutputSlotCubeFaceId, OutputSlot3DSliceId };
public sealed override void UpdateNodeAfterDeserialization()
{
AddSlot(new Vector1MaterialSlot(OutputSlotCubeFaceId, kOutputSlotCubeFaceName, kOutputSlotCubeFaceName, SlotType.Output, 0));
AddSlot(new Vector1MaterialSlot(OutputSlot3DSliceId, kOutputSlot3DSliceName, kOutputSlot3DSliceName, SlotType.Output, 0));
RemoveSlotsNameNotMatching(validSlots);
}
public override string GetVariableNameForSlot(int slotId)
{
switch (slotId)
{
case OutputSlotCubeFaceId:
return "_CustomRenderTextureCubeFace";
default:
case OutputSlot3DSliceId:
return "_CustomRenderTexture3DSlice";
}
}
public void GenerateNodeFunction(FunctionRegistry registry, GenerationMode generationMode)
{
// For preview only we declare CRT defines
if (generationMode == GenerationMode.Preview)
{
registry.builder.AppendLine("#define _CustomRenderTextureCubeFace 0.0");
registry.builder.AppendLine("#define _CustomRenderTexture3DSlice 0.0");
}
}
}
}