No Description
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

PostProcessPasses.cs 5.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. using System;
  2. using UnityEngine.Experimental.Rendering;
  3. using UnityEngine.Rendering.Universal.Internal;
  4. using UnityEngine.Serialization;
  5. namespace UnityEngine.Rendering.Universal
  6. {
  7. /// <summary>
  8. /// Run-time creation parameters for post process passes.
  9. /// </summary>
  10. internal struct PostProcessParams
  11. {
  12. /// <summary>
  13. /// The blit <c>Material</c> to use.
  14. /// </summary>
  15. /// <seealso cref="Material"/>
  16. public Material blitMaterial;
  17. /// <summary>
  18. /// Requested <c>GraphicsFormat</c> for postprocess rendering.
  19. /// </summary>
  20. /// <seealso cref="GraphicsFormat"/>
  21. public GraphicsFormat requestColorFormat;
  22. /// <summary>
  23. /// A static factory function for default initialization of PostProcessParams.
  24. /// </summary>
  25. /// <returns></returns>
  26. public static PostProcessParams Create()
  27. {
  28. PostProcessParams ppParams;
  29. ppParams.blitMaterial = null;
  30. ppParams.requestColorFormat = GraphicsFormat.None;
  31. return ppParams;
  32. }
  33. }
  34. /// <summary>
  35. /// Type acts as wrapper for post process passes. Can we be recreated and destroyed at any point during runtime with post process data.
  36. /// </summary>
  37. internal struct PostProcessPasses : IDisposable
  38. {
  39. ColorGradingLutPass m_ColorGradingLutPass;
  40. PostProcessPass m_PostProcessPass;
  41. PostProcessPass m_FinalPostProcessPass;
  42. internal RTHandle m_AfterPostProcessColor;
  43. internal RTHandle m_ColorGradingLut;
  44. PostProcessData m_RendererPostProcessData;
  45. PostProcessData m_CurrentPostProcessData;
  46. Material m_BlitMaterial;
  47. public ColorGradingLutPass colorGradingLutPass { get => m_ColorGradingLutPass; }
  48. public PostProcessPass postProcessPass { get => m_PostProcessPass; }
  49. public PostProcessPass finalPostProcessPass { get => m_FinalPostProcessPass; }
  50. public RTHandle afterPostProcessColor { get => m_AfterPostProcessColor; }
  51. public RTHandle colorGradingLut { get => m_ColorGradingLut; }
  52. public bool isCreated { get => m_CurrentPostProcessData != null; }
  53. /// <summary>
  54. /// Creates post process passes with supplied data anda params.
  55. /// </summary>
  56. /// <param name="rendererPostProcessData">Post process resources.</param>
  57. /// <param name="postProcessParams">Post process run-time creation parameters.</param>
  58. public PostProcessPasses(PostProcessData rendererPostProcessData, ref PostProcessParams postProcessParams)
  59. {
  60. m_ColorGradingLutPass = null;
  61. m_PostProcessPass = null;
  62. m_FinalPostProcessPass = null;
  63. m_CurrentPostProcessData = null;
  64. m_AfterPostProcessColor = null;
  65. m_ColorGradingLut = null;
  66. m_RendererPostProcessData = rendererPostProcessData;
  67. m_BlitMaterial = postProcessParams.blitMaterial;
  68. Recreate(rendererPostProcessData, ref postProcessParams);
  69. }
  70. /// <summary>
  71. /// Recreates post process passes with supplied data. If already contains valid post process passes, they will be replaced by new ones.
  72. /// </summary>
  73. /// <param name="data">Resources used for creating passes. In case of the null, no passes will be created.</param>
  74. /// <param name="ppParams">Run-time parameters used for creating passes.</param>
  75. public void Recreate(PostProcessData data, ref PostProcessParams ppParams)
  76. {
  77. if (m_RendererPostProcessData)
  78. data = m_RendererPostProcessData;
  79. if (data == m_CurrentPostProcessData)
  80. return;
  81. if (m_CurrentPostProcessData != null)
  82. {
  83. m_ColorGradingLutPass?.Cleanup();
  84. m_PostProcessPass?.Cleanup();
  85. m_FinalPostProcessPass?.Cleanup();
  86. // We need to null post process passes to avoid using them
  87. m_ColorGradingLutPass = null;
  88. m_PostProcessPass = null;
  89. m_FinalPostProcessPass = null;
  90. m_CurrentPostProcessData = null;
  91. }
  92. if (data != null)
  93. {
  94. m_ColorGradingLutPass = new ColorGradingLutPass(RenderPassEvent.BeforeRenderingPrePasses, data);
  95. m_PostProcessPass = new PostProcessPass(RenderPassEvent.AfterRenderingPostProcessing - 1, data, ref ppParams);
  96. m_FinalPostProcessPass = new PostProcessPass(RenderPassEvent.AfterRendering - 1, data, ref ppParams);
  97. m_CurrentPostProcessData = data;
  98. }
  99. }
  100. public void Dispose()
  101. {
  102. // always dispose unmanaged resources
  103. m_ColorGradingLutPass?.Cleanup();
  104. m_PostProcessPass?.Cleanup();
  105. m_FinalPostProcessPass?.Cleanup();
  106. m_AfterPostProcessColor?.Release();
  107. m_ColorGradingLut?.Release();
  108. }
  109. internal void ReleaseRenderTargets()
  110. {
  111. m_AfterPostProcessColor?.Release();
  112. m_PostProcessPass?.Dispose();
  113. m_FinalPostProcessPass?.Dispose();
  114. m_ColorGradingLut?.Release();
  115. }
  116. }
  117. }