InterceptGamePass.cs 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  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. public static void SetRenderTexture(RenderTexture renderTexture, System.Action finish,
  23. System.Action<ScriptableRenderContext, RenderingData, RenderTexture, RenderTargetIdentifier, RenderTextureDescriptor> executeCallBack = null)
  24. {
  25. // Debug.Log("开始准备背景界面");
  26. // finish?.Invoke();
  27. // return;
  28. RenderTexture = renderTexture;
  29. _finish+= finish;
  30. isIntercept = true;
  31. OnExecuteCallBack = executeCallBack;
  32. count = 1;
  33. }
  34. public InterceptGamePass(RenderPassEvent evt)
  35. {
  36. renderPassEvent = evt;
  37. }
  38. public void Setup(ScriptableRenderer renderer)
  39. {
  40. this.renderer = renderer;
  41. }
  42. public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)
  43. {
  44. if (isIntercept)
  45. {
  46. // Debug.Log("执行背景背景界面");
  47. count--;
  48. // 执行拷贝命令
  49. CommandBuffer cmd = CommandBufferPool.Get(m_ProfilerTag);
  50. // var descriptor = RenderTextureDescriptor;
  51. // descriptor.depthBufferBits = 0;
  52. //
  53. // RenderTargetIdentifier renderTargetIdentifier = new RenderTargetIdentifier(RenderTexture);
  54. // m_Destination.Init(renderTargetIdentifier);
  55. cmd.Blit(renderer.cameraColorTargetHandle, RenderTexture);
  56. context.ExecuteCommandBuffer(cmd);
  57. CommandBufferPool.Release(cmd);
  58. OnExecuteCallBack?.Invoke(context, renderingData, RenderTexture, renderer.cameraColorTargetHandle, cameraTextureDescriptor);
  59. }
  60. }
  61. public override void OnFinishCameraStackRendering(CommandBuffer cmd)
  62. {
  63. // if (m_Destination != RenderTargetHandle.CameraTarget)
  64. // {
  65. // // m_Destination = RenderTargetHandle.CameraTarget;
  66. // }
  67. if (count <= 0&&isIntercept)
  68. {
  69. // Debug.Log("完成背景界面");
  70. isIntercept = false;
  71. _finish?.Invoke();
  72. _finish = null;
  73. }
  74. }
  75. public override void Configure(CommandBuffer cmd, RenderTextureDescriptor cameraTextureDescriptor)
  76. {
  77. this.cameraTextureDescriptor = cameraTextureDescriptor;
  78. }
  79. }
  80. }