Files
bansonic_beta_main/Assets/BlurRawImage/Scripts/Utils/MonitorDimension.cs
T

51 lines
1.7 KiB
C#

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Rendering;
namespace Qjjxk.Blur
{
[ExecuteAlways]
public class MonitorDimension : MonoBehaviour
{
public RenderTexture captureRT;
public CameraEvent cameraEvent;
private List<BlurRawImage> _blurList;
private CommandBuffer _cmdBuffer;
private Camera _mainCamera;
private void Awake()
{
_mainCamera = Camera.main!;
captureRT = new RenderTexture(_mainCamera.pixelWidth, _mainCamera.pixelHeight, 0) { name = "CaptureRT" };
_cmdBuffer = new CommandBuffer { name = "Capture" };
_cmdBuffer.Blit(BuiltinRenderTextureType.CurrentActive, captureRT);
cameraEvent = Application.isEditor ? CameraEvent.BeforeImageEffects : CameraEvent.AfterEverything;
_mainCamera!.AddCommandBuffer(cameraEvent, _cmdBuffer);
}
public void Register(BlurRawImage blurRawImage, bool isReg = true)
{
_blurList ??= new List<BlurRawImage>();
if (isReg)
{
_blurList.TryAdd(blurRawImage);
}
else
{
_blurList.Remove(blurRawImage);
if (_blurList.Count != 0) return;
this.Destroy();
}
}
private void OnRectTransformDimensionsChange()
{
if (!gameObject.scene.isLoaded || _blurList == null || _blurList.Count == 0) return;
captureRT.Resize(_mainCamera.pixelWidth, _mainCamera.pixelHeight);
foreach (var blurRawImage in _blurList)
{
blurRawImage.SetWindowSize();
}
}
}
}