using System;
using System.Collections.Generic;
using UnityEngine;

namespace AmplifyBloom
{
	public class AmplifyUtils
	{
		public static int MaskTextureId;

		public static int BlurRadiusId;

		public static string HighPrecisionKeyword = "AB_HIGH_PRECISION";

		public static string ShaderModeTag = "Mode";

		public static string ShaderModeValue = "Full";

		public static string DebugStr = "[AmplifyBloom] ";

		public static int UpscaleContributionId;

		public static int SourceContributionId;

		public static int LensStarburstRTId;

		public static int LensDirtRTId;

		public static int LensFlareRTId;

		public static int LensGlareRTId;

		public static int[] MipResultsRTS;

		public static int[] AnamorphicRTS;

		public static int[] AnamorphicGlareWeightsMatStr;

		public static int[] AnamorphicGlareOffsetsMatStr;

		public static int[] AnamorphicGlareWeightsStr;

		public static int[] UpscaleWeightsStr;

		public static int[] LensDirtWeightsStr;

		public static int[] LensStarburstWeightsStr;

		public static int BloomRangeId;

		public static int LensDirtStrengthId;

		public static int BloomParamsId;

		public static int TempFilterValueId;

		public static int LensFlareStarMatrixId;

		public static int LensFlareStarburstStrengthId;

		public static int LensFlareGhostsParamsId;

		public static int LensFlareLUTId;

		public static int LensFlareHaloParamsId;

		public static int LensFlareGhostChrDistortionId;

		public static int LensFlareHaloChrDistortionId;

		public static int BokehParamsId = -1;

		public static RenderTextureFormat CurrentRTFormat = (RenderTextureFormat)9;

		public static FilterMode CurrentFilterMode = (FilterMode)1;

		public static TextureWrapMode CurrentWrapMode = (TextureWrapMode)1;

		public static RenderTextureReadWrite CurrentReadWriteMode = (RenderTextureReadWrite)2;

		public static bool IsInitialized = false;

		private static List<RenderTexture> _allocatedRT = new List<RenderTexture>();

		public static void InitializeIds()
		{
			AmplifyUtils.IsInitialized = true;
			AmplifyUtils.MaskTextureId = Shader.PropertyToID("_MaskTex");
			AmplifyUtils.MipResultsRTS = new int[]
			{
				Shader.PropertyToID("_MipResultsRTS0"),
				Shader.PropertyToID("_MipResultsRTS1"),
				Shader.PropertyToID("_MipResultsRTS2"),
				Shader.PropertyToID("_MipResultsRTS3"),
				Shader.PropertyToID("_MipResultsRTS4"),
				Shader.PropertyToID("_MipResultsRTS5")
			};
			AmplifyUtils.AnamorphicRTS = new int[]
			{
				Shader.PropertyToID("_AnamorphicRTS0"),
				Shader.PropertyToID("_AnamorphicRTS1"),
				Shader.PropertyToID("_AnamorphicRTS2"),
				Shader.PropertyToID("_AnamorphicRTS3"),
				Shader.PropertyToID("_AnamorphicRTS4"),
				Shader.PropertyToID("_AnamorphicRTS5"),
				Shader.PropertyToID("_AnamorphicRTS6"),
				Shader.PropertyToID("_AnamorphicRTS7")
			};
			AmplifyUtils.AnamorphicGlareWeightsMatStr = new int[]
			{
				Shader.PropertyToID("_AnamorphicGlareWeightsMat0"),
				Shader.PropertyToID("_AnamorphicGlareWeightsMat1"),
				Shader.PropertyToID("_AnamorphicGlareWeightsMat2"),
				Shader.PropertyToID("_AnamorphicGlareWeightsMat3")
			};
			AmplifyUtils.AnamorphicGlareOffsetsMatStr = new int[]
			{
				Shader.PropertyToID("_AnamorphicGlareOffsetsMat0"),
				Shader.PropertyToID("_AnamorphicGlareOffsetsMat1"),
				Shader.PropertyToID("_AnamorphicGlareOffsetsMat2"),
				Shader.PropertyToID("_AnamorphicGlareOffsetsMat3")
			};
			AmplifyUtils.AnamorphicGlareWeightsStr = new int[]
			{
				Shader.PropertyToID("_AnamorphicGlareWeights0"),
				Shader.PropertyToID("_AnamorphicGlareWeights1"),
				Shader.PropertyToID("_AnamorphicGlareWeights2"),
				Shader.PropertyToID("_AnamorphicGlareWeights3"),
				Shader.PropertyToID("_AnamorphicGlareWeights4"),
				Shader.PropertyToID("_AnamorphicGlareWeights5"),
				Shader.PropertyToID("_AnamorphicGlareWeights6"),
				Shader.PropertyToID("_AnamorphicGlareWeights7"),
				Shader.PropertyToID("_AnamorphicGlareWeights8"),
				Shader.PropertyToID("_AnamorphicGlareWeights9"),
				Shader.PropertyToID("_AnamorphicGlareWeights10"),
				Shader.PropertyToID("_AnamorphicGlareWeights11"),
				Shader.PropertyToID("_AnamorphicGlareWeights12"),
				Shader.PropertyToID("_AnamorphicGlareWeights13"),
				Shader.PropertyToID("_AnamorphicGlareWeights14"),
				Shader.PropertyToID("_AnamorphicGlareWeights15")
			};
			AmplifyUtils.UpscaleWeightsStr = new int[]
			{
				Shader.PropertyToID("_UpscaleWeights0"),
				Shader.PropertyToID("_UpscaleWeights1"),
				Shader.PropertyToID("_UpscaleWeights2"),
				Shader.PropertyToID("_UpscaleWeights3"),
				Shader.PropertyToID("_UpscaleWeights4"),
				Shader.PropertyToID("_UpscaleWeights5"),
				Shader.PropertyToID("_UpscaleWeights6"),
				Shader.PropertyToID("_UpscaleWeights7")
			};
			AmplifyUtils.LensDirtWeightsStr = new int[]
			{
				Shader.PropertyToID("_LensDirtWeights0"),
				Shader.PropertyToID("_LensDirtWeights1"),
				Shader.PropertyToID("_LensDirtWeights2"),
				Shader.PropertyToID("_LensDirtWeights3"),
				Shader.PropertyToID("_LensDirtWeights4"),
				Shader.PropertyToID("_LensDirtWeights5"),
				Shader.PropertyToID("_LensDirtWeights6"),
				Shader.PropertyToID("_LensDirtWeights7")
			};
			AmplifyUtils.LensStarburstWeightsStr = new int[]
			{
				Shader.PropertyToID("_LensStarburstWeights0"),
				Shader.PropertyToID("_LensStarburstWeights1"),
				Shader.PropertyToID("_LensStarburstWeights2"),
				Shader.PropertyToID("_LensStarburstWeights3"),
				Shader.PropertyToID("_LensStarburstWeights4"),
				Shader.PropertyToID("_LensStarburstWeights5"),
				Shader.PropertyToID("_LensStarburstWeights6"),
				Shader.PropertyToID("_LensStarburstWeights7")
			};
			AmplifyUtils.BloomRangeId = Shader.PropertyToID("_BloomRange");
			AmplifyUtils.LensDirtStrengthId = Shader.PropertyToID("_LensDirtStrength");
			AmplifyUtils.BloomParamsId = Shader.PropertyToID("_BloomParams");
			AmplifyUtils.TempFilterValueId = Shader.PropertyToID("_TempFilterValue");
			AmplifyUtils.LensFlareStarMatrixId = Shader.PropertyToID("_LensFlareStarMatrix");
			AmplifyUtils.LensFlareStarburstStrengthId = Shader.PropertyToID("_LensFlareStarburstStrength");
			AmplifyUtils.LensFlareGhostsParamsId = Shader.PropertyToID("_LensFlareGhostsParams");
			AmplifyUtils.LensFlareLUTId = Shader.PropertyToID("_LensFlareLUT");
			AmplifyUtils.LensFlareHaloParamsId = Shader.PropertyToID("_LensFlareHaloParams");
			AmplifyUtils.LensFlareGhostChrDistortionId = Shader.PropertyToID("_LensFlareGhostChrDistortion");
			AmplifyUtils.LensFlareHaloChrDistortionId = Shader.PropertyToID("_LensFlareHaloChrDistortion");
			AmplifyUtils.BokehParamsId = Shader.PropertyToID("_BokehParams");
			AmplifyUtils.BlurRadiusId = Shader.PropertyToID("_BlurRadius");
			AmplifyUtils.LensStarburstRTId = Shader.PropertyToID("_LensStarburst");
			AmplifyUtils.LensDirtRTId = Shader.PropertyToID("_LensDirt");
			AmplifyUtils.LensFlareRTId = Shader.PropertyToID("_LensFlare");
			AmplifyUtils.LensGlareRTId = Shader.PropertyToID("_LensGlare");
			AmplifyUtils.SourceContributionId = Shader.PropertyToID("_SourceContribution");
			AmplifyUtils.UpscaleContributionId = Shader.PropertyToID("_UpscaleContribution");
		}

		public static void DebugLog(string value, LogType type)
		{
			switch (type)
			{
			case LogType.Normal:
				Debug.Log(AmplifyUtils.DebugStr + value);
				return;
			case LogType.Warning:
				Debug.LogWarning(AmplifyUtils.DebugStr + value);
				return;
			case LogType.Error:
				Debug.LogError(AmplifyUtils.DebugStr + value);
				return;
			default:
				return;
			}
		}

		public static RenderTexture GetTempRenderTarget(int width, int height)
		{
			RenderTexture temporary = RenderTexture.GetTemporary(width, height, 0, AmplifyUtils.CurrentRTFormat, AmplifyUtils.CurrentReadWriteMode);
            temporary.antiAliasing = 1;
            temporary.filterMode = AmplifyUtils.CurrentFilterMode;
			temporary.wrapMode = AmplifyUtils.CurrentWrapMode;
			AmplifyUtils._allocatedRT.Add(temporary);
            temporary.name = "RenderTexture2";

            return temporary;
		}

		public static void ReleaseTempRenderTarget(RenderTexture renderTarget)
		{
			if (renderTarget != null && AmplifyUtils._allocatedRT.Remove(renderTarget))
			{
				renderTarget.DiscardContents();
				RenderTexture.ReleaseTemporary(renderTarget);
			}
		}

		public static void ReleaseAllRT()
		{
			for (int i = 0; i < AmplifyUtils._allocatedRT.Count; i++)
			{
				AmplifyUtils._allocatedRT[i].DiscardContents();
				RenderTexture.ReleaseTemporary(AmplifyUtils._allocatedRT[i]);
			}
			AmplifyUtils._allocatedRT.Clear();
		}

		public static void EnsureKeywordEnabled(Material mat, string keyword, bool state)
		{
			if (mat != null)
			{
				if (state && !mat.IsKeywordEnabled(keyword))
				{
					mat.EnableKeyword(keyword);
					return;
				}
				if (!state && mat.IsKeywordEnabled(keyword))
				{
					mat.DisableKeyword(keyword);
				}
			}
		}
	}
}