2021-09-09 20:42:29 -04:00

71 lines
2.3 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using static UnityEditor.VFX.VFXAbstractRenderedOutput;
namespace UnityEditor.VFX
{
class VFXSRPSubOutput : VFXModel
{
public void Init(VFXAbstractRenderedOutput owner)
{
if (m_Owner != null)
throw new InvalidOperationException("Owner is already set");
if (owner == null)
throw new NullReferenceException("Owner cannot be null");
m_Owner = owner;
}
private VFXAbstractRenderedOutput m_Owner;
public VFXAbstractRenderedOutput owner => m_Owner;
// Caps
public virtual bool supportsExposure { get { return false; } }
public virtual bool supportsMotionVector { get { return false; } }
public virtual bool supportsExcludeFromTAA { get { return false; } }
// Sealed override as SRP suboutputs cannot have dependencies
public sealed override void CollectDependencies(HashSet<ScriptableObject> objs, bool ownedOnly = true) {}
public virtual string GetBlendModeStr()
{
switch (owner.blendMode)
{
case BlendMode.Additive:
return "Blend SrcAlpha One";
case BlendMode.Alpha:
return "Blend SrcAlpha OneMinusSrcAlpha";
case BlendMode.AlphaPremultiplied:
return "Blend One OneMinusSrcAlpha";
default:
return string.Empty;
}
}
public virtual string GetRenderQueueStr()
{
switch (owner.blendMode)
{
case BlendMode.Additive:
case BlendMode.Alpha:
case BlendMode.AlphaPremultiplied:
return "Transparent";
case BlendMode.Opaque:
if (owner.hasAlphaClipping)
return "AlphaTest";
else
return "Geometry";
default:
throw new NotImplementedException("Unknown blend mode");
}
}
public virtual IEnumerable<KeyValuePair<string, VFXShaderWriter>> GetStencilStateOverridesStr()
{
return Enumerable.Empty<KeyValuePair<string, VFXShaderWriter>>();
}
}
}