Files
Alex38Lyon 878ea46cac update
2025-06-03 12:00:47 +02:00

88 lines
3.1 KiB
C#

using System.Collections.Generic;
using UnityEditor;
using UnityEditor.Build;
using UnityEditor.Rendering;
using UnityEngine;
using UnityEngine.Rendering;
namespace Unity.FPS.EditorExt
{
// Simple example of stripping of a debug build configuration
class ShaderBuildStripping : IPreprocessShaders
{
List<ShaderKeyword> m_ExcludedKeywords;
public ShaderBuildStripping()
{
#if MANUAL_SHADER_STRIPPING
m_ExcludedKeywords = new List<ShaderKeyword>
{
new ShaderKeyword("DEBUG"),
// ifdef
new ShaderKeyword("UNITY_GATHER_SUPPORTED"),
new ShaderKeyword("UNITY_POSTFX_SSR"),
new ShaderKeyword("DISTORT"),
new ShaderKeyword("BLUR_HIGH_QUALITY"),
new ShaderKeyword("UNITY_CAN_COMPILE_TESSELLATION"),
new ShaderKeyword("ENABLE_WIND"),
new ShaderKeyword("WIND_EFFECT_FROND_RIPPLE_ADJUST_LIGHTING"),
new ShaderKeyword("LOD_FADE_CROSSFADE"),
new ShaderKeyword("DYNAMICLIGHTMAP_ON"),
new ShaderKeyword("EDITOR_VISUALIZATION"),
new ShaderKeyword("UNITY_INSTANCING_ENABLED"),
new ShaderKeyword("STEREO_MULTIVIEW_ON"),
new ShaderKeyword("STEREO_INSTANCING_ON"),
new ShaderKeyword("SOFTPARTICLES_ON"),
new ShaderKeyword("PIXELSNAP_ON"),
new ShaderKeyword("SHADER_API_D3D11"),
// if defined()
new ShaderKeyword("SHADER_API_VULKAN"),
new ShaderKeyword("UNITY_SINGLE_PASS_STEREO"),
new ShaderKeyword("FOG_LINEAR"),
new ShaderKeyword("FOG_EXP"),
new ShaderKeyword("FOG_EXP2"),
new ShaderKeyword("UNITY_PASS_DEFERRED"),
new ShaderKeyword("LIGHTMAP_ON"),
new ShaderKeyword("_PARALLAXMAP"),
new ShaderKeyword("SHADOWS_SCREEN"),
};
#endif
}
// Multiple callback may be implemented.
// The first one executed is the one where callbackOrder is returning the smallest number.
public int callbackOrder
{
get { return 0; }
}
public void OnProcessShader(
Shader shader, ShaderSnippetData snippet, IList<ShaderCompilerData> shaderCompilerData)
{
#if MANUAL_SHADER_STRIPPING
// In development, don't strip debug variants
if (EditorUserBuildSettings.development)
return;
for (int i = 0; i < shaderCompilerData.Count; ++i)
{
bool mustStrip = false;
foreach (var kw in m_ExcludedKeywords)
{
if (shaderCompilerData[i].shaderKeywordSet.IsEnabled(kw))
{
mustStrip = true;
break;
}
}
if (mustStrip)
{
shaderCompilerData.RemoveAt(i);
--i;
}
}
#endif
}
}
}