SRPHelper.cs 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #if UNITY_2018_1_OR_NEWER
  2. #define VLB_SRP_SUPPORT // Comment this to disable SRP support
  3. #endif
  4. #if VLB_SRP_SUPPORT
  5. #if UNITY_2019_1_OR_NEWER
  6. using AliasCurrentPipeline = UnityEngine.Rendering.RenderPipelineManager;
  7. using AliasCameraEvents = UnityEngine.Rendering.RenderPipelineManager;
  8. using CallbackType = System.Action<UnityEngine.Rendering.ScriptableRenderContext, UnityEngine.Camera>;
  9. #else
  10. using AliasCurrentPipeline = UnityEngine.Experimental.Rendering.RenderPipelineManager;
  11. using AliasCameraEvents = UnityEngine.Experimental.Rendering.RenderPipeline;
  12. using CallbackType = System.Action<UnityEngine.Camera>;
  13. #endif // UNITY_2019_1_OR_NEWER
  14. #endif // VLB_SRP_SUPPORT
  15. namespace VLB
  16. {
  17. public static class SRPHelper
  18. {
  19. public enum RenderPipeline
  20. {
  21. Undefined,
  22. BuiltIn,
  23. URP,
  24. LWRP,
  25. HDRP,
  26. }
  27. public static RenderPipeline renderPipelineType
  28. {
  29. get
  30. {
  31. // cache the value to prevent from comparing strings (in ComputeRenderPipeline) each frame when SRPBatcher is enabled
  32. if (m_RenderPipelineCached == RenderPipeline.Undefined)
  33. m_RenderPipelineCached = ComputeRenderPipeline();
  34. return m_RenderPipelineCached;
  35. }
  36. }
  37. static RenderPipeline m_RenderPipelineCached = RenderPipeline.Undefined;
  38. static RenderPipeline ComputeRenderPipeline()
  39. {
  40. #if VLB_SRP_SUPPORT
  41. var rp = UnityEngine.Rendering.GraphicsSettings.renderPipelineAsset;
  42. if (rp)
  43. {
  44. var name = rp.GetType().ToString();
  45. if (name.Contains("Universal")) return RenderPipeline.URP;
  46. if (name.Contains("Lightweight")) return RenderPipeline.LWRP;
  47. if (name.Contains("HD")) return RenderPipeline.HDRP;
  48. }
  49. #endif
  50. return RenderPipeline.BuiltIn;
  51. }
  52. #if VLB_SRP_SUPPORT
  53. public static bool IsUsingCustomRenderPipeline()
  54. {
  55. // TODO: optimize and use renderPipelineType
  56. return AliasCurrentPipeline.currentPipeline != null || UnityEngine.Rendering.GraphicsSettings.renderPipelineAsset != null;
  57. }
  58. public static void RegisterOnBeginCameraRendering(CallbackType cb)
  59. {
  60. if (IsUsingCustomRenderPipeline())
  61. {
  62. AliasCameraEvents.beginCameraRendering -= cb;
  63. AliasCameraEvents.beginCameraRendering += cb;
  64. }
  65. }
  66. public static void UnregisterOnBeginCameraRendering(CallbackType cb)
  67. {
  68. if (IsUsingCustomRenderPipeline())
  69. {
  70. AliasCameraEvents.beginCameraRendering -= cb;
  71. }
  72. }
  73. #else
  74. public static bool IsUsingCustomRenderPipeline() { return false; }
  75. #endif
  76. }
  77. }