InterceptGamePass.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. 
  2. using UnityEngine;
  3. using UnityEngine.Experimental.Rendering;
  4. using UnityEngine.Rendering;
  5. using UnityEngine.Rendering.Universal;
  6. using UnityEngine.Serialization;
  7. namespace Fort23.Mono.Test
  8. {
  9. [System.Serializable]
  10. public class InterceptGamePass : ScriptableRenderPass
  11. {
  12. private static bool isIntercept;
  13. // private RenderTextureDescriptor RenderTextureDescriptor;
  14. private static RenderTexture RenderTexture;
  15. private const string m_ProfilerTag = "Intercept";
  16. public RenderTargetHandle m_Destination;
  17. private static System.Action _finish;
  18. private static int count;
  19. private RenderTextureDescriptor cameraTextureDescriptor;
  20. private static System.Action<ScriptableRenderContext, RenderingData, RenderTexture, RenderTargetIdentifier, RenderTextureDescriptor> OnExecuteCallBack;
  21. // private ScriptableRenderer renderer;
  22. private RTHandle _rtHandle;
  23. public static void SetRenderTexture(RenderTexture renderTexture, System.Action finish,
  24. System.Action<ScriptableRenderContext, RenderingData, RenderTexture, RenderTargetIdentifier, RenderTextureDescriptor> executeCallBack = null)
  25. {
  26. // Debug.Log("开始准备背景界面");
  27. // finish?.Invoke();
  28. // return;
  29. RenderTexture = renderTexture;
  30. _finish+= finish;
  31. isIntercept = true;
  32. OnExecuteCallBack = executeCallBack;
  33. count = 1;
  34. }
  35. public InterceptGamePass(RenderPassEvent evt)
  36. {
  37. renderPassEvent = evt;
  38. }
  39. public void Setup(RTHandle rtHandle)
  40. {
  41. this._rtHandle = rtHandle;
  42. }
  43. public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)
  44. {
  45. if (isIntercept)
  46. {
  47. // Debug.Log("执行背景背景界面");
  48. count--;
  49. // 执行拷贝命令
  50. CommandBuffer cmd = CommandBufferPool.Get(m_ProfilerTag);
  51. // var descriptor = RenderTextureDescriptor;
  52. // descriptor.depthBufferBits = 0;
  53. //
  54. // RenderTargetIdentifier renderTargetIdentifier = new RenderTargetIdentifier(RenderTexture);
  55. // m_Destination.Init(renderTargetIdentifier);
  56. Blit(cmd,_rtHandle, RenderTexture);
  57. context.ExecuteCommandBuffer(cmd);
  58. CommandBufferPool.Release(cmd);
  59. OnExecuteCallBack?.Invoke(context, renderingData, RenderTexture,_rtHandle, cameraTextureDescriptor);
  60. }
  61. }
  62. public override void OnFinishCameraStackRendering(CommandBuffer cmd)
  63. {
  64. // if (m_Destination != RenderTargetHandle.CameraTarget)
  65. // {
  66. // // m_Destination = RenderTargetHandle.CameraTarget;
  67. // }
  68. if (count <= 0&&isIntercept)
  69. {
  70. // Debug.Log("完成背景界面");
  71. isIntercept = false;
  72. _finish?.Invoke();
  73. _finish = null;
  74. }
  75. }
  76. public override void Configure(CommandBuffer cmd, RenderTextureDescriptor cameraTextureDescriptor)
  77. {
  78. this.cameraTextureDescriptor = cameraTextureDescriptor;
  79. }
  80. }
  81. }