r2mods/ilspy_dump/ror2_csproj/RoR2/BlurOptimized.cs

64 lines
1.9 KiB
C#
Raw Normal View History

2024-10-04 07:26:37 +00:00
using UnityEngine;
namespace RoR2;
[RequireComponent(typeof(Camera))]
public class BlurOptimized : MonoBehaviour
{
public enum BlurType
{
StandardGauss,
SgxGauss
}
[Range(0f, 2f)]
public int downsample = 1;
[Range(0f, 10f)]
public float blurSize = 3f;
[Range(1f, 4f)]
public int blurIterations = 2;
public BlurType blurType;
[HideInInspector]
public Material blurMaterial;
public void Start()
{
blurMaterial = new Material(LegacyShaderAPI.Find("Hidden/FastBlur"));
base.enabled = false;
}
public void OnRenderImage(RenderTexture source, RenderTexture destination)
{
float num = 1f / (1f * (float)(1 << downsample));
blurMaterial.SetVector("_Parameter", new Vector4(blurSize * num, (0f - blurSize) * num, 0f, 0f));
source.filterMode = FilterMode.Bilinear;
int width = source.width >> downsample;
int height = source.height >> downsample;
RenderTexture renderTexture = RenderTexture.GetTemporary(width, height, 0, source.format);
renderTexture.filterMode = FilterMode.Bilinear;
Graphics.Blit(source, renderTexture, blurMaterial, 0);
int num2 = ((blurType != 0) ? 2 : 0);
for (int i = 0; i < blurIterations; i++)
{
float num3 = (float)i * 1f;
blurMaterial.SetVector("_Parameter", new Vector4(blurSize * num + num3, (0f - blurSize) * num - num3, 0f, 0f));
RenderTexture temporary = RenderTexture.GetTemporary(width, height, 0, source.format);
temporary.filterMode = FilterMode.Bilinear;
Graphics.Blit(renderTexture, temporary, blurMaterial, 1 + num2);
RenderTexture.ReleaseTemporary(renderTexture);
renderTexture = temporary;
temporary = RenderTexture.GetTemporary(width, height, 0, source.format);
temporary.filterMode = FilterMode.Bilinear;
Graphics.Blit(renderTexture, temporary, blurMaterial, 2 + num2);
RenderTexture.ReleaseTemporary(renderTexture);
renderTexture = temporary;
}
Graphics.Blit(renderTexture, destination);
RenderTexture.ReleaseTemporary(renderTexture);
}
}