51 lines
1.7 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|
|
} |