using System; using UnityEngine; namespace UnityEditor.Rendering { /// /// Notifies when shader variants have been stripped /// public static class ShaderStrippingWatcher { /// /// Callback when a shader has been stripped /// /// The shader /// The variant /// The output variants after the stripping process /// The total amount of time to strip the variants /// The shader /// The variant public delegate void OnShaderStrippedCallbackHandler(TShader shader, TShaderVariant shaderVariant, uint variantsOut, double stripTimeMs) where TShader : UnityEngine.Object; /// /// Callback for /// public static event OnShaderStrippedCallbackHandler shaderProcessed; /// /// Callback for /// public static event OnShaderStrippedCallbackHandler computeShaderProcessed; internal static void OnShaderProcessed(TShader shader, TShaderVariant shaderVariant, uint variantsOut, double stripTimeMs) where TShader : UnityEngine.Object { if (typeof(TShader) == typeof(Shader)) { shaderProcessed?.Invoke((Shader)Convert.ChangeType(shader, typeof(Shader)), (ShaderSnippetData)Convert.ChangeType(shaderVariant, typeof(ShaderSnippetData)), variantsOut, stripTimeMs); } else if (typeof(TShader) == typeof(ComputeShader)) { computeShaderProcessed?.Invoke((ComputeShader)Convert.ChangeType(shader, typeof(ComputeShader)), shaderVariant.ToString(), variantsOut, stripTimeMs); } } } }