52 lines
1.9 KiB
C#

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> 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 { }
}
}
}