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 AsyncInit(object[] uiData) { ManualAsyncTask ct = ManualAsyncTask.Create(); if (GObjectPoolInterface != null) { GObjectPoolInterface.SetActive(false); } // var rect = panelObj.AddComponent(); 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(); RectTransform scalerTran= scaler.GetComponent(); 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(); } } }