using UnityEngine; using UnityEngine.Experimental.Rendering; using UnityEngine.Rendering; using UnityEngine.Rendering.Universal; using UnityEngine.Serialization; namespace Fort23.Mono.Test { [System.Serializable] public class InterceptGamePass : ScriptableRenderPass { private static bool isIntercept; // private RenderTextureDescriptor RenderTextureDescriptor; private static RenderTexture RenderTexture; private const string m_ProfilerTag = "Intercept"; public RenderTargetHandle m_Destination; private static System.Action _finish; private static int count; private RenderTextureDescriptor cameraTextureDescriptor; private static System.Action OnExecuteCallBack; private ScriptableRenderer renderer; public static void SetRenderTexture(RenderTexture renderTexture, System.Action finish, System.Action executeCallBack = null) { // Debug.Log("开始准备背景界面"); // finish?.Invoke(); // return; RenderTexture = renderTexture; _finish+= finish; isIntercept = true; OnExecuteCallBack = executeCallBack; count = 1; } public InterceptGamePass(RenderPassEvent evt) { renderPassEvent = evt; } public void Setup(ScriptableRenderer renderer) { this.renderer = renderer; } public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData) { if (isIntercept) { // Debug.Log("执行背景背景界面"); count--; // 执行拷贝命令 CommandBuffer cmd = CommandBufferPool.Get(m_ProfilerTag); // var descriptor = RenderTextureDescriptor; // descriptor.depthBufferBits = 0; // // RenderTargetIdentifier renderTargetIdentifier = new RenderTargetIdentifier(RenderTexture); // m_Destination.Init(renderTargetIdentifier); cmd.Blit(renderer.cameraColorTargetHandle, RenderTexture); context.ExecuteCommandBuffer(cmd); CommandBufferPool.Release(cmd); OnExecuteCallBack?.Invoke(context, renderingData, RenderTexture, renderer.cameraColorTargetHandle, cameraTextureDescriptor); } } public override void OnFinishCameraStackRendering(CommandBuffer cmd) { // if (m_Destination != RenderTargetHandle.CameraTarget) // { // // m_Destination = RenderTargetHandle.CameraTarget; // } if (count <= 0&&isIntercept) { // Debug.Log("完成背景界面"); isIntercept = false; _finish?.Invoke(); _finish = null; } } public override void Configure(CommandBuffer cmd, RenderTextureDescriptor cameraTextureDescriptor) { this.cameraTextureDescriptor = cameraTextureDescriptor; } } }