PostProcessBundle.cs 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. using System;
  2. using UnityEngine.Assertions;
  3. namespace UnityEngine.Rendering.PostProcessing
  4. {
  5. public sealed class PostProcessBundle
  6. {
  7. public PostProcessAttribute attribute { get; private set; }
  8. public PostProcessEffectSettings settings { get; private set; }
  9. internal PostProcessEffectRenderer renderer
  10. {
  11. get
  12. {
  13. if (m_Renderer == null)
  14. {
  15. Assert.IsNotNull(attribute.renderer);
  16. var rendererType = attribute.renderer;
  17. m_Renderer = (PostProcessEffectRenderer)Activator.CreateInstance(rendererType);
  18. m_Renderer.SetSettings(settings);
  19. m_Renderer.Init();
  20. }
  21. return m_Renderer;
  22. }
  23. }
  24. PostProcessEffectRenderer m_Renderer;
  25. internal PostProcessBundle(PostProcessEffectSettings settings)
  26. {
  27. // If settings is null, it means that at some point a null element has been added to
  28. // the volume effect list or there was a deserialization error and a reference to
  29. // the settings scriptableobject was lost
  30. Assert.IsNotNull(settings);
  31. this.settings = settings;
  32. attribute = settings.GetType().GetAttribute<PostProcessAttribute>();
  33. }
  34. internal void Release()
  35. {
  36. if (m_Renderer != null)
  37. m_Renderer.Release();
  38. RuntimeUtilities.Destroy(settings);
  39. }
  40. internal void ResetHistory()
  41. {
  42. if (m_Renderer != null)
  43. m_Renderer.ResetHistory();
  44. }
  45. internal T CastSettings<T>()
  46. where T : PostProcessEffectSettings
  47. {
  48. return (T)settings;
  49. }
  50. internal T CastRenderer<T>()
  51. where T : PostProcessEffectRenderer
  52. {
  53. return (T)renderer;
  54. }
  55. }
  56. }