| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 | 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<ScriptableRenderContext, RenderingData, RenderTexture, RenderTargetIdentifier, RenderTextureDescriptor> OnExecuteCallBack;        // private ScriptableRenderer renderer;        private RTHandle _rtHandle;        public static void SetRenderTexture(RenderTexture renderTexture, System.Action finish,            System.Action<ScriptableRenderContext, RenderingData, RenderTexture, RenderTargetIdentifier, RenderTextureDescriptor> 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(RTHandle rtHandle)        {            this._rtHandle = rtHandle;        }        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);                                Blit(cmd,_rtHandle, RenderTexture);                               context.ExecuteCommandBuffer(cmd);                CommandBufferPool.Release(cmd);                OnExecuteCallBack?.Invoke(context, renderingData, RenderTexture,_rtHandle, 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;        }    }}
 |