| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 | using Fort23.Core;using Fort23.Mono.Test;using Fort23.UTool;using UnityEngine;using UnityEngine.Rendering;using UnityEngine.Rendering.Universal;using UnityEngine.UI;namespace Fort23.Mono{    [UIBinding(prefab = "BackgroundCom")]    public partial class BackgroundCom : UIComponent    {        protected Material Material = new Material(Shader.Find("Unlit/MoHu"));        private void Init()        {                    }        public override void AddEvent()        {        }        public override void DelEvent()        {        }        public override void AddButtonEvent()        {        }                        public async override CTask<bool> AsyncInit(object[] uiData)        {            ManualAsyncTask ct = ManualAsyncTask.Create();            if (GObjectPoolInterface != null)            {                GObjectPoolInterface.SetActive(false);            }            // var rect = panelObj.AddComponent<RectTransform>();                      UIManager.Instance.RefreshFull();            // Shader.SetGlobalTexture(CameraTransparentColorTexture, renderTexture);            InterceptGamePass.SetRenderTexture(renderTexture, delegate { ct.SetResult(); }, executeCallBack: Execute);            await ct.Wait();            RawImage.texture = renderTexture;                        RawImage.SetNativeSize();            TimerComponent.Instance.AddTimer(500, delegate            {                UIManager.Instance.RefreshFull();                                    });            await base.AsyncInit(uiData);            return true;        }                private RenderTexture renderTexture        {            get            {                if (_renderTexture == null)                {                    _renderTexture = new RenderTexture(Screen.width, Screen.height, 0, RenderTextureFormat.Default);                }                return _renderTexture;            }        }        private RenderTexture _renderTexture;        public override void Show()        {            base.Show();            transform.anchorMin = Vector2.zero;            transform.anchorMax = Vector2.one;            CanvasScaler scaler=  transform.GetComponentInParent<CanvasScaler>();            RectTransform scalerTran=   scaler.GetComponent<RectTransform>();            transform.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, scalerTran.sizeDelta.x);            transform.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, scalerTran.sizeDelta.y);        }        protected void Execute(ScriptableRenderContext context, RenderingData renderingData, RenderTexture renderTargetHandle, RenderTargetIdentifier source, RenderTextureDescriptor cameraTextureDescriptor)        {            if (Material == null)            {                Material = new Material(Shader.Find("Unlit/MoHu"));            }            // return;            LogTool.Log("回调背景图加载");            CommandBuffer cmd = CommandBufferPool.Get("background");            int w = cameraTextureDescriptor.width;            int h = cameraTextureDescriptor.height;            int randerIndex = -255;            RenderTargetIdentifier lasetIdentifier = default;            int lasetranderIndex = 10000;            for (int i = 0; i < 4; i++)            {                w /= 2;                h /= 2;                if (w <= 1 || h <= 1)                {                    break;                }                            int index =  Shader.PropertyToID("back_tu"+i);                // isTu1 = !isTu1;                cmd.GetTemporaryRT(index, w, h, 0, FilterMode.Bilinear, RenderTextureFormat.ARGB32);                RenderTargetIdentifier renderTargetIdentifier = new RenderTargetIdentifier(index);                if (lasetranderIndex != 10000)                {                    cmd.Blit(lasetIdentifier, renderTargetIdentifier, Material, 0);                    cmd.ReleaseTemporaryRT(lasetranderIndex);                }                else                {                    cmd.Blit(source, renderTargetIdentifier, Material, 0);                }                            lasetIdentifier = renderTargetIdentifier;                lasetranderIndex = index;                // break;            }                        for (int i = 0; i < 4; i++)            {                w *= 2;                h *= 2;                if (w > cameraTextureDescriptor.width || h > cameraTextureDescriptor.height)                {                    break;                }                            int index =  Shader.PropertyToID("back_fd"+i);                cmd.GetTemporaryRT(index, w, h, 0, FilterMode.Bilinear, RenderTextureFormat.ARGB32);                RenderTargetIdentifier renderTargetIdentifier = new RenderTargetIdentifier(index);                if (lasetranderIndex != 10000)                {                    cmd.Blit(lasetIdentifier, renderTargetIdentifier, Material, 1);                    cmd.ReleaseTemporaryRT(lasetranderIndex);                }                            lasetIdentifier = renderTargetIdentifier;                lasetranderIndex = index;                // break;            }            // int index = Shader.PropertyToID("back_tu");            // isTu1 = !isTu1;            // cmd.GetTemporaryRT(index, w, h, 0, FilterMode.Bilinear,            //     RenderTextureFormat.ARGB32);            // RenderTargetIdentifier renderTargetIdentifier = new RenderTargetIdentifier(index);            // cmd.Blit(source, renderTargetIdentifier,Material,0);            cmd.Blit(lasetIdentifier, renderTargetHandle,Material,2);            cmd.ReleaseTemporaryRT(lasetranderIndex);            context.ExecuteCommandBuffer(cmd);            CommandBufferPool.Release(cmd);        }        public override void Dispose()        {            base.Dispose();        }    }}
 |