// Copyright (C) 2019-2021 Alexander Bogarsukov. All rights reserved.
// See the LICENSE.md file in the project root for more information.
using System;
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Rendering.Universal;
namespace UnityFx.Outline.URP
{
///
/// Outline feature (URP).
///
///
/// Add instance of this class to . Configure
/// and assign outline resources and layers collection. Make sure
/// is set if you use .
///
public class OutlineFeature : ScriptableRendererFeature
{
#region data
#pragma warning disable 0649
[SerializeField, Tooltip(OutlineResources.OutlineResourcesTooltip)]
private OutlineResources _outlineResources;
[SerializeField, Tooltip(OutlineResources.OutlineLayerCollectionTooltip)]
private OutlineLayerCollection _outlineLayers;
[SerializeField]
private OutlineSettingsWithLayerMask _outlineSettings;
[SerializeField]
private RenderPassEvent _renderPassEvent = RenderPassEvent.AfterRenderingSkybox;
[SerializeField]
public string[] _shaderPassNames;
#pragma warning restore 0649
private OutlinePass _outlinePass;
private string _featureName;
#endregion
#region interface
internal OutlineResources OutlineResources => _outlineResources;
internal OutlineLayerCollection OutlineLayers => _outlineLayers;
internal IOutlineSettings OutlineSettings => _outlineSettings;
internal int OutlineLayerMask => _outlineSettings.OutlineLayerMask;
internal uint OutlineRenderingLayerMask => _outlineSettings.OutlineRenderingLayerMask;
internal string FeatureName => _featureName;
#endregion
#region ScriptableRendererFeature
///
public override void Create()
{
if (_outlineSettings != null)
{
_featureName = OutlineResources.EffectName + '-' + _outlineSettings.OutlineLayerMask;
}
else
{
_featureName = OutlineResources.EffectName;
}
_outlinePass = new OutlinePass(this, _shaderPassNames)
{
renderPassEvent = _renderPassEvent
};
}
///
public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData)
{
if (_outlineResources && _outlineResources.IsValid)
{
_outlinePass.Setup(renderer);
renderer.EnqueuePass(_outlinePass);
}
}
#endregion
}
}