78 lines
2.2 KiB
C#
78 lines
2.2 KiB
C#
|
using System;
|
||
|
using UnityEngine.Assertions;
|
||
|
|
||
|
namespace UnityEngine.Rendering.PostProcessing
|
||
|
{
|
||
|
/// <summary>
|
||
|
/// A tuple-like class that holds reference to an effect settings and its associated attribute
|
||
|
/// and renderer.
|
||
|
/// </summary>
|
||
|
public sealed class PostProcessBundle
|
||
|
{
|
||
|
/// <summary>
|
||
|
/// The attribute set on the effect.
|
||
|
/// </summary>
|
||
|
public PostProcessAttribute attribute { get; private set; }
|
||
|
|
||
|
/// <summary>
|
||
|
/// The settings for the effect.
|
||
|
/// </summary>
|
||
|
public PostProcessEffectSettings settings { get; private set; }
|
||
|
|
||
|
internal PostProcessEffectRenderer renderer
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
if (m_Renderer == null)
|
||
|
{
|
||
|
Assert.IsNotNull(attribute.renderer);
|
||
|
var rendererType = attribute.renderer;
|
||
|
m_Renderer = (PostProcessEffectRenderer)Activator.CreateInstance(rendererType);
|
||
|
m_Renderer.SetSettings(settings);
|
||
|
m_Renderer.Init();
|
||
|
}
|
||
|
|
||
|
return m_Renderer;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
PostProcessEffectRenderer m_Renderer;
|
||
|
|
||
|
internal PostProcessBundle(PostProcessEffectSettings settings)
|
||
|
{
|
||
|
// If settings is null, it means that at some point a null element has been added to
|
||
|
// the volume effect list or there was a deserialization error and a reference to
|
||
|
// the settings scriptableobject was lost
|
||
|
Assert.IsNotNull(settings);
|
||
|
this.settings = settings;
|
||
|
attribute = settings.GetType().GetAttribute<PostProcessAttribute>();
|
||
|
}
|
||
|
|
||
|
internal void Release()
|
||
|
{
|
||
|
if (m_Renderer != null)
|
||
|
m_Renderer.Release();
|
||
|
|
||
|
RuntimeUtilities.Destroy(settings);
|
||
|
}
|
||
|
|
||
|
internal void ResetHistory()
|
||
|
{
|
||
|
if (m_Renderer != null)
|
||
|
m_Renderer.ResetHistory();
|
||
|
}
|
||
|
|
||
|
internal T CastSettings<T>()
|
||
|
where T : PostProcessEffectSettings
|
||
|
{
|
||
|
return (T)settings;
|
||
|
}
|
||
|
|
||
|
internal T CastRenderer<T>()
|
||
|
where T : PostProcessEffectRenderer
|
||
|
{
|
||
|
return (T)renderer;
|
||
|
}
|
||
|
}
|
||
|
}
|