using System.Collections.Generic; using UnityEditor.Build; using UnityEditor.Rendering; using UnityEngine; using UnityEngine.Rendering; namespace Beautify.Universal { class BeautifyOptCompiler : IPreprocessShaders { public const string PLAYER_PREF_KEYNAME = "BeautifyStripKeywordSet"; public int callbackOrder => 1; public void OnProcessShader( Shader shader, ShaderSnippetData snippet, IList shaderCompilerData) { try { if (shaderCompilerData == null) return; if (!"Hidden/Universal Render Pipeline/UberPost".Equals(shader.name) && !"Hidden/Kronnect/Beautify".Equals(shader.name)) return; string strippedKeywords = PlayerPrefs.GetString(PLAYER_PREF_KEYNAME); if (string.IsNullOrEmpty(strippedKeywords)) return; for (int k = shaderCompilerData.Count - 1; k >= 0; k--) { ShaderCompilerData data = shaderCompilerData[k]; ShaderKeyword[] keywords = data.shaderKeywordSet.GetShaderKeywords(); for (int s = 0; s < keywords.Length; s++) { ShaderKeyword keyword = keywords[s]; #if UNITY_2021_2_OR_NEWER string keywordName = keyword.name; #else string keywordName; if (ShaderKeyword.IsKeywordLocal(keyword)) { keywordName = ShaderKeyword.GetKeywordName(shader, keyword); } else { keywordName = ShaderKeyword.GetGlobalKeywordName(keyword); } #endif if (keywordName.Length > 0 && strippedKeywords.Contains(keywordName)) { shaderCompilerData.RemoveAt(k); break; } } } } catch { } } } }