Decompiled source of LegacyFogSystem v0.0.2

plugins/LegacyFogSystem.dll

Decompiled 8 months ago
using System;
using System.CodeDom.Compiler;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Core.Logging.Interpolation;
using BepInEx.Logging;
using BepInEx.Unity.IL2CPP;
using CullingSystem;
using GTFO.API;
using HarmonyLib;
using Il2CppInterop.Runtime;
using Il2CppInterop.Runtime.Injection;
using Il2CppSystem;
using Il2CppSystem.Collections.Generic;
using LegacyFogSystem.Systems;
using LegacyFogSystem.Systems.Buffers;
using LegacyFogSystem.Systems.Debugs;
using Microsoft.CodeAnalysis;
using Player;
using UnityEngine;
using UnityEngine.PostProcessing;
using UnityEngine.Rendering;
using UnityEngine.Rendering.PostProcessing;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")]
[assembly: AssemblyCompany("LegacyFogSystem")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("LegacyFogSystem")]
[assembly: AssemblyTitle("LegacyFogSystem")]
[assembly: TargetPlatform("Windows7.0")]
[assembly: SupportedOSPlatform("Windows7.0")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace LegacyFogSystem
{
	internal enum PostProcessingPipeline
	{
		Unchanged,
		Legacy,
		Mixed
	}
	internal static class CFG
	{
		internal static void Init(ConfigFile cfg)
		{
			ConfigEntry<bool> val = cfg.Bind<bool>("User", "Reduce Fog Density", false, "Reduce Fog Density by 35% (Useful for R6+ Rundowns)");
			ConfigEntry<PostProcessingPipeline> val2 = cfg.Bind<PostProcessingPipeline>("User", "Post Processing Pipeline", PostProcessingPipeline.Legacy, "Aka Shader Type to use // Unchanged is R6's lighting // Legacy is Old rundowns settings // Mixed is in between Default and Legacy");
			LegacyLitVolume.DensityMultiplier = (val.Value ? 0.35f : 1f);
			PostProcessingObserver.Pipeline = val2.Value;
		}
	}
	[BepInPlugin("LegacyFogSystem", "LegacyFogSystem", "1.0.0")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	internal class EntryPoint : BasePlugin
	{
		private Harmony _Harmony = null;

		public override void Load()
		{
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			//IL_0023: Expected O, but got Unknown
			ClassInjector.RegisterTypeInIl2Cpp<LegacyLitVolume>();
			ClassInjector.RegisterTypeInIl2Cpp<AtlasDebugger>();
			ClassInjector.RegisterTypeInIl2Cpp<PostProcessingObserver>();
			_Harmony = new Harmony("LegacyFogSystem.Harmony");
			_Harmony.PatchAll();
			CFG.Init(((BasePlugin)this).Config);
		}

		public override bool Unload()
		{
			_Harmony.UnpatchSelf();
			return ((BasePlugin)this).Unload();
		}
	}
	internal static class Logger
	{
		private static readonly ManualLogSource _Logger;

		static Logger()
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: Expected O, but got Unknown
			_Logger = new ManualLogSource("LegacyFogSystem");
			Logger.Sources.Add((ILogSource)(object)_Logger);
		}

		private static string Format(object msg)
		{
			return msg.ToString();
		}

		public static void Info(BepInExInfoLogInterpolatedStringHandler handler)
		{
			_Logger.LogInfo(handler);
		}

		public static void Info(string str)
		{
			_Logger.LogMessage((object)str);
		}

		public static void Info(object data)
		{
			_Logger.LogMessage((object)Format(data));
		}

		public static void Debug(BepInExDebugLogInterpolatedStringHandler handler)
		{
			_Logger.LogDebug(handler);
		}

		public static void Debug(string str)
		{
			_Logger.LogDebug((object)str);
		}

		public static void Debug(object data)
		{
			_Logger.LogDebug((object)Format(data));
		}

		public static void Error(BepInExErrorLogInterpolatedStringHandler handler)
		{
			_Logger.LogError(handler);
		}

		public static void Error(string str)
		{
			_Logger.LogError((object)str);
		}

		public static void Error(object data)
		{
			_Logger.LogError((object)Format(data));
		}

		public static void Fatal(BepInExFatalLogInterpolatedStringHandler handler)
		{
			_Logger.LogFatal(handler);
		}

		public static void Fatal(string str)
		{
			_Logger.LogFatal((object)str);
		}

		public static void Fatal(object data)
		{
			_Logger.LogFatal((object)Format(data));
		}

		public static void Warn(BepInExWarningLogInterpolatedStringHandler handler)
		{
			_Logger.LogWarning(handler);
		}

		public static void Warn(string str)
		{
			_Logger.LogWarning((object)str);
		}

		public static void Warn(object data)
		{
			_Logger.LogWarning((object)Format(data));
		}

		[Conditional("DEBUG")]
		public static void DebugOnly(object data)
		{
			_Logger.LogDebug((object)Format(data));
		}
	}
	internal static class CommandBufferExtensions
	{
		public static void DispatchCompute(this CommandBuffer cmd, ComputeShader cs, int kernel, int[] groupCount)
		{
			cmd.DispatchCompute(cs, kernel, groupCount[0], groupCount[1], groupCount[2]);
		}
	}
	[GeneratedCode("VersionInfoGenerator", "2.1.3+git35c0c2a-master")]
	[CompilerGenerated]
	internal static class VersionInfo
	{
		public const string RootNamespace = "LegacyFogSystem";

		public const string Version = "1.0.0";

		public const string VersionPrerelease = null;

		public const string VersionMetadata = null;

		public const string SemVer = "1.0.0";

		public const string GitRevShort = null;

		public const string GitRevLong = null;

		public const string GitBranch = null;

		public const string GitTag = null;

		public const int GitCommitsSinceTag = 0;

		public const bool GitIsDirty = false;
	}
}
namespace LegacyFogSystem.Systems
{
	internal sealed class LegacyLitVolume : MonoBehaviour
	{
		private LitBuffer<sCL_SpotLight> _CB_SpotLight;

		private LitBuffer<sCL_PointLight> _CB_PointLight;

		private LitBuffer<sCL_PointLight> _CB_EffectLight;

		private LitBuffer<sCL_FogSphere> _CB_FogSphere;

		public Color FogColor;

		public float FogAmbience;

		public float FogRange = 40f;

		public float LightAttenuation = 0.035f;

		public float DepthExponent = 2f;

		public float Density;

		public float DensityHeightMaxBoost;

		public float DensityHeight;

		public float DensityHeightRange;

		public Texture3D DensityNoise;

		public Vector3 DensityNoiseDirection;

		public float DensityNoiseSpeed;

		public float DensityNoiseScale;

		public ComputeShader CalcCS;

		public ComputeShader BlurCS;

		public Material BlendMat;

		private int _Kernel_Calc;

		private int _Kernel_Accumulate;

		private int _Kernel_Passthrough;

		private int _Kernel_GaussianBlur;

		private Camera _Cam;

		private CommandBuffer _CMD_Blend;

		private CommandBuffer _CMD_Calc;

		private Matrix4x4 _PrevInvProjection;

		private Matrix4x4 _PrevInvView;

		private float _HasPrevFrame = 0f;

		private float _ReprojectionBlend = 0f;

		public static float DensityMultiplier = 1f;

		public PreLitVolume PreLit;

		public float ActualSpotlightIrr = 1f;

		public float ActualPointlightIrr = 2.25f;

		public float ActualEffectlightIrr = 2.5f;

		public float ActualSpotlightRange = 1f;

		public float ActualSpotlightAngle = 1f;

		public float ActualPointlightRange = 1f;

		public float ActualEffectlightRange = 1f;

		public float ActualFogSphereIrr = 150f;

		private RenderTexture _RT_FrustumVoxel_Body;

		private RenderTexture _RT_FrustumVoxel_Reblend;

		private RenderTexture _RT_FrustumVoxel_Accumulate;

		private RenderTextureDescriptor _RTD_Froxel;

		private int _VoxelDepth;

		private int _VoxelWidth;

		private int _VoxelHeight;

		private readonly int[] _Calc_GroupCount = new int[3];

		private readonly int[] _Blur_GroupCount = new int[3];

		private readonly int[] _Accum_GroupCount = new int[3];

		private int _CurrentFogQuality = -1;

		private Resolution _CurrentRes;

		private int _ScrWidth;

		private int _ScrHeight;

		private Vector3 _NoiseOffset;

		private float _Coeff_Noise = 0.75f;

		private float _Coeff_Phase = 0f;

		private float _Coeff_Absorbtion = 0.087f;

		private float _Coeff_Extinction = 0.5f;

		private void Setup_ComputeBuffer()
		{
			_CB_SpotLight = new LitBuffer<sCL_SpotLight>(32);
			_CB_PointLight = new LitBuffer<sCL_PointLight>(32);
			_CB_EffectLight = new LitBuffer<sCL_PointLight>(32);
			_CB_FogSphere = new LitBuffer<sCL_FogSphere>(32);
		}

		private void Clear_ComputeBuffer()
		{
			_CB_SpotLight?.Dispose();
			_CB_SpotLight = null;
			_CB_PointLight?.Dispose();
			_CB_PointLight = null;
			_CB_EffectLight?.Dispose();
			_CB_EffectLight = null;
			_CB_FogSphere?.Dispose();
			_CB_FogSphere = null;
		}

		private void Start()
		{
			_Kernel_Calc = CalcCS.FindKernel("Calculate");
			_Kernel_Accumulate = CalcCS.FindKernel("Accumulate");
			_Kernel_Passthrough = BlurCS.FindKernel("Passthrough");
			_Kernel_GaussianBlur = BlurCS.FindKernel("GaussianBlur");
			_Cam = ((Component)this).GetComponent<Camera>();
			Setup_ComputeBuffer();
			Setup_CalcBuffer();
			Setup_BlendBuffer();
		}

		private void Update()
		{
			Update_CheckRes();
			Update_ShaderProperties();
		}

		private void OnPreCull()
		{
			Update_LinkPreLitVolume();
			Update_CalcBuffer();
			Update_BlendBuffer();
		}

		private void OnPreRender()
		{
			Update_CollectLight();
		}

		private void OnDestroy()
		{
			Clear_ComputeBuffer();
			Clear_RenderTextures();
			Clear_CalcBuffer();
			Clear_BlendBuffer();
		}

		private void Setup_BlendBuffer()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0018: Expected O, but got Unknown
			_CMD_Blend = new CommandBuffer
			{
				name = "LitVolume Blend Cmd"
			};
			_Cam.AddCommandBuffer((CameraEvent)23, _CMD_Blend);
		}

		private void Update_BlendBuffer()
		{
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0056: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_0087: Unknown result type (might be due to invalid IL or missing references)
			//IL_008d: Unknown result type (might be due to invalid IL or missing references)
			if (_CMD_Blend != null && !((Object)(object)BlendMat == (Object)null))
			{
				_CMD_Blend.Clear();
				_CMD_Blend.GetTemporaryRT(SID.TEMP_Grab, -1, -1, 24, (FilterMode)0, (RenderTextureFormat)9);
				_CMD_Blend.Blit(RenderTargetIdentifier.op_Implicit((BuiltinRenderTextureType)2), RenderTargetIdentifier.op_Implicit(SID.TEMP_Grab));
				_CMD_Blend.SetGlobalTexture("_MainTex", RenderTargetIdentifier.op_Implicit(SID.TEMP_Grab));
				_CMD_Blend.Blit(RenderTargetIdentifier.op_Implicit(SID.TEMP_Grab), RenderTargetIdentifier.op_Implicit((BuiltinRenderTextureType)2), BlendMat);
				_CMD_Blend.ReleaseTemporaryRT(SID.TEMP_Grab);
			}
		}

		private void Clear_BlendBuffer()
		{
			if (_CMD_Blend != null)
			{
				_Cam.RemoveCommandBuffer((CameraEvent)23, _CMD_Blend);
				_CMD_Blend.Dispose();
				_CMD_Blend = null;
			}
		}

		private void Setup_CalcBuffer()
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0018: Expected O, but got Unknown
			_CMD_Calc = new CommandBuffer
			{
				name = "LitVolume Calc Cmd"
			};
			_Cam.AddCommandBuffer((CameraEvent)5, _CMD_Calc);
		}

		private void Update_CalcBuffer()
		{
			//IL_0104: Unknown result type (might be due to invalid IL or missing references)
			//IL_010f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0120: Unknown result type (might be due to invalid IL or missing references)
			//IL_0126: Unknown result type (might be due to invalid IL or missing references)
			//IL_0131: Unknown result type (might be due to invalid IL or missing references)
			//IL_0136: Unknown result type (might be due to invalid IL or missing references)
			//IL_013b: Unknown result type (might be due to invalid IL or missing references)
			//IL_014d: Unknown result type (might be due to invalid IL or missing references)
			//IL_017e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0196: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_0224: Unknown result type (might be due to invalid IL or missing references)
			//IL_022e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0255: Unknown result type (might be due to invalid IL or missing references)
			//IL_027d: Unknown result type (might be due to invalid IL or missing references)
			if (_CMD_Calc != null && !((Object)(object)_RT_FrustumVoxel_Body == (Object)null))
			{
				_CMD_Calc.Clear();
				UpdateParams(_CMD_Calc);
				_CMD_Calc.SetComputeBufferParam(CalcCS, _Kernel_Calc, SID.CB_PointLight, _CB_PointLight.CB);
				_CMD_Calc.SetComputeBufferParam(CalcCS, _Kernel_Calc, SID.CB_EffectLight, _CB_EffectLight.CB);
				_CMD_Calc.SetComputeBufferParam(CalcCS, _Kernel_Calc, SID.CB_SpotLight, _CB_SpotLight.CB);
				_CMD_Calc.SetComputeBufferParam(CalcCS, _Kernel_Calc, SID.CB_FogSphere, _CB_FogSphere.CB);
				_CMD_Calc.DispatchCompute(CalcCS, _Kernel_Calc, _Calc_GroupCount);
				_CMD_Calc.CopyTexture(RenderTargetIdentifier.op_Implicit((Texture)(object)_RT_FrustumVoxel_Body), RenderTargetIdentifier.op_Implicit((Texture)(object)_RT_FrustumVoxel_Reblend));
				Matrix4x4 val = GL.GetGPUProjectionMatrix(_Cam.projectionMatrix, false) * _Cam.worldToCameraMatrix;
				_CMD_Calc.SetComputeMatrixParam(CalcCS, SID.VF_Prev_VP, val);
				_CMD_Calc.DispatchCompute(CalcCS, _Kernel_Accumulate, _Accum_GroupCount);
				_CMD_Calc.GetTemporaryRT(SID.TEMP_BlurCopy, _RTD_Froxel, (FilterMode)2);
				_CMD_Calc.CopyTexture(RenderTargetIdentifier.op_Implicit((Texture)(object)_RT_FrustumVoxel_Accumulate), RenderTargetIdentifier.op_Implicit(SID.TEMP_BlurCopy));
				_CMD_Calc.SetComputeTextureParam(BlurCS, _Kernel_Passthrough, SID.Input, RenderTargetIdentifier.op_Implicit(SID.TEMP_BlurCopy));
				_CMD_Calc.SetComputeTextureParam(BlurCS, _Kernel_Passthrough, SID.Output, RenderTargetIdentifier.op_Implicit((Texture)(object)_RT_FrustumVoxel_Accumulate));
				_CMD_Calc.DispatchCompute(BlurCS, _Kernel_Passthrough, _Blur_GroupCount);
				_CMD_Calc.CopyTexture(RenderTargetIdentifier.op_Implicit((Texture)(object)_RT_FrustumVoxel_Accumulate), RenderTargetIdentifier.op_Implicit(SID.TEMP_BlurCopy));
				_CMD_Calc.SetComputeTextureParam(BlurCS, _Kernel_Passthrough, SID.Input, RenderTargetIdentifier.op_Implicit(SID.TEMP_BlurCopy));
				_CMD_Calc.SetComputeTextureParam(BlurCS, _Kernel_Passthrough, SID.Output, RenderTargetIdentifier.op_Implicit((Texture)(object)_RT_FrustumVoxel_Accumulate));
				_CMD_Calc.DispatchCompute(BlurCS, _Kernel_Passthrough, _Blur_GroupCount);
				_CMD_Calc.ReleaseTemporaryRT(SID.TEMP_BlurCopy);
			}
		}

		private void Clear_CalcBuffer()
		{
			if (_CMD_Calc != null)
			{
				_Cam.RemoveCommandBuffer((CameraEvent)5, _CMD_Calc);
				_CMD_Calc.Dispose();
				_CMD_Calc = null;
			}
		}

		private void UpdateParams(CommandBuffer cmd)
		{
			//IL_003f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: Unknown result type (might be due to invalid IL or missing references)
			//IL_0047: Unknown result type (might be due to invalid IL or missing references)
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			//IL_0058: Unknown result type (might be due to invalid IL or missing references)
			//IL_007a: Unknown result type (might be due to invalid IL or missing references)
			//IL_008e: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_010a: Unknown result type (might be due to invalid IL or missing references)
			//IL_011c: Unknown result type (might be due to invalid IL or missing references)
			//IL_013b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0140: Unknown result type (might be due to invalid IL or missing references)
			//IL_014c: Unknown result type (might be due to invalid IL or missing references)
			//IL_014d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0153: Unknown result type (might be due to invalid IL or missing references)
			//IL_0155: Unknown result type (might be due to invalid IL or missing references)
			float nearClipPlane = _Cam.nearClipPlane;
			float farClipPlane = _Cam.farClipPlane;
			farClipPlane = Mathf.Clamp(FogRange, nearClipPlane, farClipPlane);
			Matrix4x4 val = Matrix4x4.Perspective(_Cam.fieldOfView, _Cam.aspect, nearClipPlane, farClipPlane);
			Matrix4x4 inverse = ((Matrix4x4)(ref val)).inverse;
			Matrix4x4 cameraToWorldMatrix = _Cam.cameraToWorldMatrix;
			Vector4 val2 = default(Vector4);
			((Vector4)(ref val2))..ctor(nearClipPlane, farClipPlane, (float)Time.frameCount, DepthExponent);
			BlendMat.SetVector(SID.VF_FogParams, val2);
			cmd.SetComputeVectorParam(CalcCS, SID.VF_FogParams, val2);
			cmd.SetComputeVectorParam(CalcCS, SID.VF_ReprojectionParams, new Vector4(_ReprojectionBlend, 1f, _HasPrevFrame, (_ReprojectionBlend > 0f) ? ((float)Time.frameCount) : 0f));
			cmd.SetComputeMatrixParam(CalcCS, SID.VF_Inv_Proj, inverse);
			cmd.SetComputeMatrixParam(CalcCS, SID.VF_Inv_View, cameraToWorldMatrix);
			BlendMat.SetMatrix(SID.VF_Inv_Proj, inverse);
			BlendMat.SetMatrix(SID.VF_Inv_View, cameraToWorldMatrix);
			cmd.SetComputeVectorParam(CalcCS, SID.VF_CameraWorldPos, Vector4.op_Implicit(((Component)_Cam).transform.position));
			_PrevInvProjection = inverse;
			_PrevInvView = cameraToWorldMatrix;
			_HasPrevFrame = 1f;
		}

		private void Update_LinkPreLitVolume()
		{
			//IL_001d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_008f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0094: Unknown result type (might be due to invalid IL or missing references)
			if (!((Object)(object)PreLit == (Object)null))
			{
				FogColor = PreLit.m_fogColor;
				FogAmbience = PreLit.m_fogAmbience;
				Density = PreLit.m_fogDensity * DensityMultiplier;
				DensityHeight = PreLit.m_densityHeightAltitude;
				DensityHeightRange = PreLit.m_densityHeightRange;
				DensityHeightMaxBoost = PreLit.m_densityHeightMaxBoost * DensityMultiplier;
				DensityNoiseDirection = PreLit.m_densityNoiseDirection;
				DensityNoiseScale = PreLit.m_densityNoiseScale;
				DensityNoiseSpeed = PreLit.m_densityNoiseSpeed;
			}
		}

		private void Update_CollectLight()
		{
			//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0100: Unknown result type (might be due to invalid IL or missing references)
			//IL_0105: Unknown result type (might be due to invalid IL or missing references)
			//IL_010c: Unknown result type (might be due to invalid IL or missing references)
			//IL_010e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0131: Unknown result type (might be due to invalid IL or missing references)
			//IL_0133: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_0203: Unknown result type (might be due to invalid IL or missing references)
			//IL_0208: Unknown result type (might be due to invalid IL or missing references)
			//IL_0228: Unknown result type (might be due to invalid IL or missing references)
			//IL_0237: Unknown result type (might be due to invalid IL or missing references)
			//IL_023c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0243: Unknown result type (might be due to invalid IL or missing references)
			//IL_0245: Unknown result type (might be due to invalid IL or missing references)
			//IL_026a: Unknown result type (might be due to invalid IL or missing references)
			//IL_026c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0320: Unknown result type (might be due to invalid IL or missing references)
			//IL_032c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0338: Unknown result type (might be due to invalid IL or missing references)
			//IL_0347: Unknown result type (might be due to invalid IL or missing references)
			//IL_0357: Unknown result type (might be due to invalid IL or missing references)
			//IL_035c: Unknown result type (might be due to invalid IL or missing references)
			//IL_037e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0383: Unknown result type (might be due to invalid IL or missing references)
			//IL_0385: Unknown result type (might be due to invalid IL or missing references)
			//IL_0388: Unknown result type (might be due to invalid IL or missing references)
			//IL_038d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0396: Unknown result type (might be due to invalid IL or missing references)
			//IL_03a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_03bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_03cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_03cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_03cf: Unknown result type (might be due to invalid IL or missing references)
			//IL_03d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_03f3: Unknown result type (might be due to invalid IL or missing references)
			//IL_03f8: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_0401: Unknown result type (might be due to invalid IL or missing references)
			//IL_041a: Unknown result type (might be due to invalid IL or missing references)
			//IL_041c: Unknown result type (might be due to invalid IL or missing references)
			//IL_043e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0440: Unknown result type (might be due to invalid IL or missing references)
			//IL_0499: Unknown result type (might be due to invalid IL or missing references)
			//IL_049e: Unknown result type (might be due to invalid IL or missing references)
			//IL_04a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_04b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_04b8: Unknown result type (might be due to invalid IL or missing references)
			//IL_04d9: Unknown result type (might be due to invalid IL or missing references)
			//IL_04db: Unknown result type (might be due to invalid IL or missing references)
			_CB_PointLight.ClearBuffer();
			_CB_EffectLight.ClearBuffer();
			_CB_SpotLight.ClearBuffer();
			_CB_FogSphere.ClearBuffer();
			int num = 0;
			Enumerator<C_Light> enumerator = C_CullingManager.VisiblePointLights.GetEnumerator();
			Vector3 val = default(Vector3);
			while (enumerator.MoveNext())
			{
				C_Light current = enumerator.Current;
				if (num >= _CB_PointLight.MaxSize)
				{
					break;
				}
				if (((C_Cullable)current).IsShown && ((C_Cullable)current).IsRegistered)
				{
					Light unityLight = current.m_unityLight;
					float num2 = unityLight.range * ActualPointlightRange;
					((Vector3)(ref val))..ctor(unityLight.color.r, unityLight.color.g, unityLight.color.b);
					val *= unityLight.intensity * ActualPointlightIrr;
					_CB_PointLight.TempBuffer[num] = new sCL_PointLight
					{
						Position = ((Component)unityLight).transform.position,
						Irradiance = val,
						InvRangeSqr = 1f / (num2 * num2),
						Physical = 0f
					};
					num++;
				}
			}
			_CB_PointLight.PushTempBuffer(num);
			num = 0;
			Enumerator<LightBase> enumerator2 = ClusteredRendering.s_visibleEffectLights.GetEnumerator();
			Vector3 val2 = default(Vector3);
			while (enumerator2.MoveNext())
			{
				LightBase current2 = enumerator2.Current;
				if (num >= _CB_EffectLight.MaxSize)
				{
					break;
				}
				if (current2.IsVisible && ((Behaviour)current2).enabled && current2.WantsToShow)
				{
					Color color = current2.Color;
					((Vector3)(ref val2))..ctor(color.r, color.g, color.b);
					val2 *= current2.Intensity * ActualEffectlightIrr;
					float num3 = current2.Range * ActualEffectlightRange;
					_CB_EffectLight.TempBuffer[num] = new sCL_PointLight
					{
						Position = ((Component)current2).transform.position,
						Irradiance = val2,
						InvRangeSqr = 1f / (num3 * num3),
						Physical = current2.Physical
					};
					num++;
				}
			}
			_CB_EffectLight.PushTempBuffer(num);
			num = 0;
			Enumerator<C_Light> enumerator3 = C_CullingManager.VisibleSpotLights.GetEnumerator();
			Vector3 val3 = default(Vector3);
			while (enumerator3.MoveNext())
			{
				C_Light current3 = enumerator3.Current;
				if (num >= _CB_SpotLight.MaxSize)
				{
					break;
				}
				if (((C_Cullable)current3).IsShown && ((C_Cullable)current3).IsRegistered)
				{
					Light unityLight2 = current3.m_unityLight;
					float num4 = unityLight2.range * ActualSpotlightRange;
					float num5 = unityLight2.spotAngle * ActualSpotlightAngle;
					((Vector3)(ref val3))..ctor(unityLight2.color.r, unityLight2.color.g, unityLight2.color.b);
					val3 *= unityLight2.intensity * ActualSpotlightIrr;
					CL_ShadowGenerator shadowGenerator = current3.m_shadowGenerator;
					Matrix4x4 val4 = Matrix4x4.Perspective(num5, shadowGenerator.m_aspect, shadowGenerator.m_zNear, shadowGenerator.m_zFar);
					val4 = GL.GetGPUProjectionMatrix(val4, true);
					Matrix4x4 val5 = Matrix4x4.TRS(((Component)unityLight2).transform.position, ((Component)unityLight2).transform.rotation, new Vector3(1f, 1f, -1f));
					Matrix4x4 inverse = ((Matrix4x4)(ref val5)).inverse;
					Matrix4x4 viewProjection = val4 * inverse;
					_CB_SpotLight.TempBuffer[num] = new sCL_SpotLight
					{
						Position = ((Component)unityLight2).transform.position,
						Irradiance = val3,
						InvRangeSqr = 1f / (num4 * num4),
						ViewProjection = viewProjection,
						InvNearRange = shadowGenerator.InvNearRange,
						ShadowIndex = shadowGenerator.ShadowID
					};
					num++;
				}
			}
			_CB_SpotLight.PushTempBuffer(num);
			num = 0;
			Enumerator<FogSphere> enumerator4 = PreLitVolume.s_activeFogSpheres.GetEnumerator();
			while (enumerator4.MoveNext())
			{
				FogSphere current4 = enumerator4.Current;
				if (num >= _CB_FogSphere.MaxSize)
				{
					break;
				}
				sCL_FogSphere data = current4.m_data;
				ref Vector3 radiance = ref data.Radiance;
				radiance *= ActualFogSphereIrr;
				data.Density *= DensityMultiplier;
				_CB_FogSphere.TempBuffer[num] = data;
				num++;
			}
			_CB_FogSphere.PushTempBuffer(num);
		}

		private void Update_CheckRes()
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			//IL_0054: Unknown result type (might be due to invalid IL or missing references)
			Resolution currentResolution = Screen.currentResolution;
			int intValue = CellSettingsManager.GetIntValue((eCellSettingID)79);
			if (((Resolution)(ref currentResolution)).width != ((Resolution)(ref _CurrentRes)).width || ((Resolution)(ref currentResolution)).height != ((Resolution)(ref _CurrentRes)).height || intValue != _CurrentFogQuality)
			{
				_CurrentFogQuality = intValue;
				_CurrentRes = currentResolution;
				_ScrWidth = ((Resolution)(ref currentResolution)).width;
				_ScrHeight = ((Resolution)(ref currentResolution)).height;
				Clear_RenderTextures();
				Create_RenderTextures();
				UpdateOnce_OnResChange();
			}
		}

		private void Create_RenderTextures()
		{
			//IL_01dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0239: Unknown result type (might be due to invalid IL or missing references)
			//IL_023b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0242: Unknown result type (might be due to invalid IL or missing references)
			//IL_0247: Unknown result type (might be due to invalid IL or missing references)
			//IL_024c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0258: Unknown result type (might be due to invalid IL or missing references)
			//IL_0261: Unknown result type (might be due to invalid IL or missing references)
			//IL_026e: Expected O, but got Unknown
			//IL_027c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0281: Unknown result type (might be due to invalid IL or missing references)
			//IL_0286: Unknown result type (might be due to invalid IL or missing references)
			//IL_0292: Unknown result type (might be due to invalid IL or missing references)
			//IL_029b: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a8: Expected O, but got Unknown
			//IL_02b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_02bb: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_02cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e2: Expected O, but got Unknown
			int num;
			int voxelDepth;
			switch (_CurrentFogQuality)
			{
			case 0:
				num = 16;
				voxelDepth = 96;
				break;
			case 1:
				num = 16;
				voxelDepth = 112;
				break;
			case 2:
				num = 12;
				voxelDepth = 112;
				break;
			case 3:
				num = 12;
				voxelDepth = 128;
				break;
			default:
				num = 8;
				voxelDepth = 128;
				break;
			}
			_VoxelWidth = _ScrWidth / num;
			_VoxelHeight = _ScrHeight / num;
			_VoxelDepth = voxelDepth;
			uint num2 = default(uint);
			uint num3 = default(uint);
			uint num4 = default(uint);
			CalcCS.GetKernelThreadGroupSizes(_Kernel_Calc, ref num2, ref num3, ref num4);
			_Calc_GroupCount[0] = Mathf.CeilToInt(Mathf.Max(1f, (float)_VoxelWidth / (float)num2));
			_Calc_GroupCount[1] = Mathf.CeilToInt(Mathf.Max(1f, (float)_VoxelHeight / (float)num3));
			_Calc_GroupCount[2] = Mathf.CeilToInt(Mathf.Max(1f, (float)_VoxelDepth / (float)num4));
			uint num5 = default(uint);
			CalcCS.GetKernelThreadGroupSizes(_Kernel_Accumulate, ref num2, ref num3, ref num5);
			_Accum_GroupCount[0] = Mathf.CeilToInt(Mathf.Max(1f, (float)_VoxelWidth / (float)num2));
			_Accum_GroupCount[1] = Mathf.CeilToInt(Mathf.Max(1f, (float)_VoxelHeight / (float)num3));
			_Accum_GroupCount[2] = 1;
			BlurCS.GetKernelThreadGroupSizes(_Kernel_Passthrough, ref num2, ref num3, ref num4);
			_Blur_GroupCount[0] = Mathf.CeilToInt(Mathf.Max(1f, (float)_VoxelWidth / (float)num2));
			_Blur_GroupCount[1] = Mathf.CeilToInt(Mathf.Max(1f, (float)_VoxelHeight / (float)num3));
			_Blur_GroupCount[2] = Mathf.CeilToInt(Mathf.Max(1f, (float)_VoxelDepth / (float)num4));
			RenderTextureDescriptor rTD_Froxel = default(RenderTextureDescriptor);
			((RenderTextureDescriptor)(ref rTD_Froxel)).width = _VoxelWidth;
			((RenderTextureDescriptor)(ref rTD_Froxel)).height = _VoxelHeight;
			((RenderTextureDescriptor)(ref rTD_Froxel)).volumeDepth = _VoxelDepth;
			((RenderTextureDescriptor)(ref rTD_Froxel)).msaaSamples = 1;
			((RenderTextureDescriptor)(ref rTD_Froxel)).dimension = (TextureDimension)3;
			((RenderTextureDescriptor)(ref rTD_Froxel)).useMipMap = false;
			((RenderTextureDescriptor)(ref rTD_Froxel)).enableRandomWrite = true;
			((RenderTextureDescriptor)(ref rTD_Froxel)).colorFormat = (RenderTextureFormat)2;
			_RTD_Froxel = rTD_Froxel;
			_RT_FrustumVoxel_Body = new RenderTexture(_RTD_Froxel)
			{
				name = "RT LLV Froxel Body",
				hideFlags = (HideFlags)61,
				filterMode = (FilterMode)2
			};
			_RT_FrustumVoxel_Body.Create();
			_RT_FrustumVoxel_Reblend = new RenderTexture(_RTD_Froxel)
			{
				name = "RT LLV Froxel Reblend History",
				hideFlags = (HideFlags)61,
				filterMode = (FilterMode)2
			};
			_RT_FrustumVoxel_Reblend.Create();
			_RT_FrustumVoxel_Accumulate = new RenderTexture(_RTD_Froxel)
			{
				name = "RT LLV Froxel Accum",
				hideFlags = (HideFlags)61,
				filterMode = (FilterMode)2
			};
			_RT_FrustumVoxel_Accumulate.Create();
		}

		private void Clear_RenderTextures()
		{
			if ((Object)(object)_RT_FrustumVoxel_Body != (Object)null)
			{
				_RT_FrustumVoxel_Body.Release();
				_RT_FrustumVoxel_Body = null;
			}
			if ((Object)(object)_RT_FrustumVoxel_Reblend != (Object)null)
			{
				_RT_FrustumVoxel_Reblend.Release();
				_RT_FrustumVoxel_Reblend = null;
			}
			if ((Object)(object)_RT_FrustumVoxel_Accumulate != (Object)null)
			{
				_RT_FrustumVoxel_Accumulate.Release();
				_RT_FrustumVoxel_Accumulate = null;
			}
		}

		private void UpdateOnce_OnResChange()
		{
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e8: Unknown result type (might be due to invalid IL or missing references)
			Vector3 val = default(Vector3);
			((Vector3)(ref val))..ctor((float)_VoxelWidth, (float)_VoxelHeight, (float)_VoxelDepth);
			CalcCS.SetVector(SID.VF_VoxelDimension, Vector4.op_Implicit(val));
			CalcCS.SetTexture(_Kernel_Calc, SID.DensityNoiseTexture, (Texture)(object)DensityNoise);
			CalcCS.SetTexture(_Kernel_Calc, "_FogVolume_Reblend", (Texture)(object)_RT_FrustumVoxel_Reblend);
			CalcCS.SetTexture(_Kernel_Calc, SID.FogVolume_Body, (Texture)(object)_RT_FrustumVoxel_Body);
			CalcCS.SetTexture(_Kernel_Accumulate, SID.FogVolume_Body, (Texture)(object)_RT_FrustumVoxel_Body);
			CalcCS.SetTexture(_Kernel_Accumulate, SID.FogVolume_Accumulate, (Texture)(object)_RT_FrustumVoxel_Accumulate);
			BlurCS.SetVector("_Dimension", Vector4.op_Implicit(val));
			BlendMat.SetVector(SID.VF_VoxelDimension, Vector4.op_Implicit(val));
			BlendMat.SetTexture(SID.VF_Volume, (Texture)(object)_RT_FrustumVoxel_Accumulate);
		}

		private void Update_ShaderProperties()
		{
			//IL_0079: Unknown result type (might be due to invalid IL or missing references)
			//IL_008b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0090: Unknown result type (might be due to invalid IL or missing references)
			//IL_0095: Unknown result type (might be due to invalid IL or missing references)
			//IL_009a: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fd: Unknown result type (might be due to invalid IL or missing references)
			//IL_0127: Unknown result type (might be due to invalid IL or missing references)
			//IL_0164: Unknown result type (might be due to invalid IL or missing references)
			//IL_0186: Unknown result type (might be due to invalid IL or missing references)
			//IL_0199: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_01eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ed: Unknown result type (might be due to invalid IL or missing references)
			Vector4 val = default(Vector4);
			val.x = 1f - FogColor.r;
			val.y = 1f - FogColor.g;
			val.z = 1f - FogColor.b;
			float num = Mathf.Min(Density, DensityHeightMaxBoost);
			val.w = FogColor.a * (1f - num) + num;
			_NoiseOffset += DensityNoiseSpeed * Time.deltaTime * DensityNoiseDirection;
			_NoiseOffset.x %= 1f;
			_NoiseOffset.y %= 1f;
			_NoiseOffset.z %= 1f;
			CalcCS.SetFloat(SID.LightAttenuation, LightAttenuation);
			CalcCS.SetVector(SID.FogColorAbsorbtion, val);
			CalcCS.SetVector(SID.DensityParams, new Vector4(Density, DensityHeightMaxBoost, DensityHeight, DensityHeightRange));
			CalcCS.SetVector(SID.DensityNoiseParams, new Vector4(_NoiseOffset.x, _NoiseOffset.y, _NoiseOffset.z, DensityNoiseScale));
			CalcCS.SetVector(SID.VF_ScatteringParams, new Vector4(_Coeff_Noise, _Coeff_Phase, val.w * _Coeff_Absorbtion, _Coeff_Extinction));
			RenderTexture atlasTexture = CL_ShadowAtlas.AtlasTexture;
			if ((Object)(object)atlasTexture != (Object)null)
			{
				Vector2 val2 = Vector2.one * (float)CL_ShadowAtlas.cShadowResolution;
				CalcCS.SetTexture(_Kernel_Calc, SID.SA_AtlasTexture, (Texture)(object)atlasTexture);
				CalcCS.SetVector(SID.SA_AtlasCellDim, Vector4.op_Implicit(val2));
			}
		}
	}
	internal sealed class PostProcessingObserver : MonoBehaviour
	{
		public static PostProcessingPipeline Pipeline;

		private PostProcessLayer _Layer;

		private PostProcessingBehaviour _Behaviour;

		private void Start()
		{
			if (Pipeline == PostProcessingPipeline.Unchanged)
			{
				Object.Destroy((Object)(object)this);
				return;
			}
			_Layer = ((Component)this).GetComponent<PostProcessLayer>();
			_Behaviour = ((Component)this).GetComponent<PostProcessingBehaviour>();
			if (Pipeline == PostProcessingPipeline.Legacy)
			{
				if ((Object)(object)_Layer != (Object)null)
				{
					((Behaviour)_Layer).enabled = false;
				}
				if ((Object)(object)_Behaviour != (Object)null)
				{
					((PostProcessingModel)_Behaviour.profile.vignette).enabled = false;
				}
			}
			else if (Pipeline == PostProcessingPipeline.Mixed)
			{
				if ((Object)(object)_Layer != (Object)null)
				{
					((Behaviour)_Layer).enabled = false;
				}
				if ((Object)(object)_Behaviour != (Object)null)
				{
					((Behaviour)_Behaviour).enabled = true;
				}
			}
		}

		private void OnPreCull()
		{
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0091: Unknown result type (might be due to invalid IL or missing references)
			//IL_00af: Unknown result type (might be due to invalid IL or missing references)
			if (!((Object)(object)_Layer == (Object)null) && !((Object)(object)_Behaviour == (Object)null))
			{
				if (Pipeline == PostProcessingPipeline.Legacy)
				{
					((Behaviour)_Behaviour).enabled = true;
					((Behaviour)_Layer).enabled = true;
				}
				else if (Pipeline == PostProcessingPipeline.Mixed)
				{
					((Behaviour)_Behaviour).enabled = true;
					((Behaviour)_Layer).enabled = false;
					Settings settings = ((PostProcessingComponent<EyeAdaptationModel>)(object)_Behaviour.m_EyeAdaptation).model.settings;
					settings.maxLuminance = -9.75f;
					((PostProcessingComponent<EyeAdaptationModel>)(object)_Behaviour.m_EyeAdaptation).model.settings = settings;
				}
			}
		}
	}
	internal static class SID
	{
		public static readonly int FogColorAbsorbtion = ID("_FogColorAbsorbtion");

		public static readonly int LightAttenuation = ID("_LightAttenuation");

		public static readonly int DensityParams = ID("_DensityParams");

		public static readonly int DensityNoiseParams = ID("_DensityNoiseParams");

		public static readonly int DensityNoiseTexture = ID("_DensityNoiseTexture");

		public static readonly int FogVolume_Body = ID("_FogVolume_Body");

		public static readonly int FogVolume_Accumulate = ID("_FogVolume_Accumulate");

		public static readonly int CB_PointLight = ID("_CB_PointLight");

		public static readonly int CB_EffectLight = ID("_CB_EffectLight");

		public static readonly int CB_SpotLight = ID("_CB_SpotLight");

		public static readonly int CB_FogSphere = ID("_CB_FogSphere");

		public static readonly int VF_VoxelDimension = ID("_VF_VoxelDimension");

		public static readonly int VF_Inv_Proj = ID("_VF_Inv_Proj");

		public static readonly int VF_Inv_View = ID("_VF_Inv_View");

		public static readonly int VF_Prev_VP = ID("_VF_Prev_VP");

		public static readonly int VF_FogParams = ID("_VF_FogParams");

		public static readonly int VF_ReprojectionParams = ID("_VF_ReprojectionParams");

		public static readonly int VF_ScatteringParams = ID("_VF_ScatteringParams");

		public static readonly int VF_CameraWorldPos = ID("_VF_CameraWorldPos");

		public static readonly int VF_Volume = ID("_VF_Volume");

		public static readonly int SA_AtlasTexture = ID("_SA_AtlasTexture");

		public static readonly int SA_AtlasCellDim = ID("_SA_AtlasCellDimension");

		public static readonly int TEMP_Grab = ID("_TMP_Grab");

		public static readonly int TEMP_BlurCopy = ID("_TMP_BlurCopy");

		public static readonly int TEMP_Blurry = ID("_TMP_Blurry");

		public static readonly int Input = ID("_Input");

		public static readonly int Output = ID("_Output");

		private static int ID(string name)
		{
			return Shader.PropertyToID(name);
		}
	}
}
namespace LegacyFogSystem.Systems.Debugs
{
	internal sealed class AtlasDebugger : MonoBehaviour
	{
		private Material _DEBUGMat;

		private RenderTexture _RT;

		private void Start()
		{
			//IL_001f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0029: Expected O, but got Unknown
			_DEBUGMat = AssetAPI.GetLoadedAsset<Material>("Assets/LegacyLitVolume/Mats/DebugAtlas.mat");
			_RT = new RenderTexture(512, 256, 0, (RenderTextureFormat)13);
			_RT.Create();
		}

		private void OnPostRender()
		{
			if ((Object)(object)CL_ShadowAtlas.AtlasTexture != (Object)null)
			{
				RenderTexture atlasTexture = CL_ShadowAtlas.AtlasTexture;
				Graphics.Blit((Texture)(object)atlasTexture, _RT, _DEBUGMat);
			}
		}

		private void OnGUI()
		{
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			GUI.DrawTexture(new Rect(0f, 0f, 512f, 256f), (Texture)(object)_RT);
		}
	}
	internal sealed class ScreenDebug : MonoBehaviour
	{
		public static RenderTexture RT;

		private CommandBuffer _CB;

		private Camera _Cam;

		private CameraEvent _CurrentEvent;

		private BuiltinRenderTextureType Target;

		private void Start()
		{
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0025: Expected O, but got Unknown
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Expected O, but got Unknown
			_Cam = ((Component)this).GetComponent<Camera>();
			RT = new RenderTexture(Screen.width, Screen.height, 24, (RenderTextureFormat)9);
			_CB = new CommandBuffer();
			_CB.name = "Debug CB";
		}

		private void AddBuffer(CameraEvent evt)
		{
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			//IL_005a: Unknown result type (might be due to invalid IL or missing references)
			//IL_005b: Unknown result type (might be due to invalid IL or missing references)
			_CB.Clear();
			_CB.Blit(RenderTargetIdentifier.op_Implicit(Target), RenderTargetIdentifier.op_Implicit((Texture)(object)RT));
			_Cam.RemoveCommandBuffer(_CurrentEvent, _CB);
			_Cam.AddCommandBuffer(evt, _CB);
			_CurrentEvent = evt;
		}

		private void OnGUI()
		{
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			if (!((Object)(object)RT == (Object)null))
			{
				GUI.DrawTexture(new Rect(0f, 0f, 256f, 144f), (Texture)(object)RT, (ScaleMode)2);
			}
		}
	}
}
namespace LegacyFogSystem.Systems.Buffers
{
	internal class LitBuffer<T> where T : struct
	{
		public readonly int MaxSize;

		public readonly int Stride;

		private readonly Array _Buffer;

		private readonly IntPtr _ClassPtr;

		public int Size { get; private set; }

		public ComputeBuffer CB { get; private set; }

		public T[] TempBuffer { get; private set; }

		public LitBuffer(int size)
		{
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_004d: Expected O, but got Unknown
			_Buffer = Array.CreateInstance(Il2CppType.Of<T>(), size);
			_ClassPtr = Il2CppClassPointerStore<T>.NativeClassPtr;
			int num = Marshal.SizeOf<T>();
			MaxSize = size;
			Size = 0;
			Stride = num;
			CB = new ComputeBuffer(size, num);
			TempBuffer = new T[size];
		}

		public unsafe void ClearBuffer()
		{
			//IL_0020: Unknown result type (might be due to invalid IL or missing references)
			//IL_0026: Expected O, but got Unknown
			for (int i = 0; i < MaxSize; i++)
			{
				T value = new T();
				IntPtr intPtr = (nint)Unsafe.AsPointer(ref value);
				Object val = new Object(IL2CPP.il2cpp_value_box(_ClassPtr, intPtr));
				_Buffer.SetValue(val, i);
				TempBuffer[i] = value;
			}
		}

		public void PushTempBuffer(int size = -1)
		{
			Push(TempBuffer, size);
		}

		public unsafe void Push(T[] buffers, int size = -1)
		{
			//IL_0059: Unknown result type (might be due to invalid IL or missing references)
			//IL_0060: Expected O, but got Unknown
			if (CB != null)
			{
				int num2 = (Size = Mathf.Min(Mathf.Min(buffers.Length, (size > 0) ? size : int.MaxValue), MaxSize));
				for (int i = 0; i < num2; i++)
				{
					IntPtr intPtr = (nint)Unsafe.AsPointer(ref buffers[i]);
					Object val = new Object(IL2CPP.il2cpp_value_box(_ClassPtr, intPtr));
					_Buffer.SetValue(val, i);
				}
				CB.SetData(_Buffer, 0, 0, MaxSize);
			}
		}

		public void Dispose()
		{
			if (CB != null)
			{
				CB.Dispose();
				CB = null;
			}
		}
	}
}
namespace LegacyFogSystem.Injects
{
	[HarmonyPatch(typeof(LocalPlayerAgent), "Setup")]
	internal static class Inject_ModifyAmbient
	{
		private static void Postfix(LocalPlayerAgent __instance)
		{
			EffectLight ambientLight = __instance.m_ambientLight;
			if ((Object)(object)ambientLight != (Object)null)
			{
				((LightBase)ambientLight).Intensity = 0.12f;
				((LightBase)ambientLight).Range = 1.62f;
			}
		}
	}
	[HarmonyPatch(typeof(PlayerManager), "Awake")]
	internal static class Inject_Reorder_UI_Apply
	{
		private static void Postfix(PlayerManager __instance)
		{
			GameObject prefabLocal = __instance.m_prefabLocal;
			GameObject gameObject = ((Component)prefabLocal.GetComponentInChildren<FPSCamera>(true)).gameObject;
			UI_Apply component = gameObject.GetComponent<UI_Apply>();
			UI_Apply val = gameObject.AddComponent<UI_Apply>();
			val.m_UIBlitterMaterial = component.m_UIBlitterMaterial;
			Object.Destroy((Object)(object)component);
		}
	}
	[HarmonyPatch(typeof(ClusteredRendering), "Setup")]
	internal class Inject_SetupLegacyPreLit
	{
		private static void Postfix(ClusteredRendering __instance)
		{
			PreLitVolume component = ((Component)__instance).GetComponent<PreLitVolume>();
			if ((Object)(object)component == (Object)null)
			{
				Logger.Error("PreLitVolume is missing?!");
				return;
			}
			RenderPipe.Config.smoothnessLimit = 1f;
			ShaderIDs.VolumesEnabled = Shader.PropertyToID("_NoDontAlterTheVolumeSettingsThankYou");
			Shader.SetGlobalFloat("_VolumesEnabled", 0f);
			__instance.UpdateLitVolume = false;
			((Component)__instance).GetComponent<AmplifyOcclusionEffect>().Intensity = 0f;
			LegacyLitVolume component2 = ((Component)__instance).GetComponent<LegacyLitVolume>();
			if ((Object)(object)component2 == (Object)null)
			{
				component2 = ((Component)__instance).gameObject.AddComponent<LegacyLitVolume>();
				component2.PreLit = component;
				component2.DensityNoise = component.m_densityNoise;
				component2.CalcCS = AssetAPI.GetLoadedAsset<ComputeShader>("Assets/LegacyLitVolume/Shaders/CalcLitVolume.compute");
				component2.BlurCS = AssetAPI.GetLoadedAsset<ComputeShader>("Assets/LegacyLitVolume/Shaders/BlurLitVolume.compute");
				component2.BlendMat = AssetAPI.GetLoadedAsset<Material>("Assets/LegacyLitVolume/Mats/BlendFog.mat");
				((Component)__instance).gameObject.AddComponent<PostProcessingObserver>();
			}
		}
	}
}