private void AddVariantMenuSelected(object userData, string[] options, int selected)
        {
            AddVariantMenuData data = (AddVariantMenuData)userData;

            char[]   separator = new char[] { ' ' };
            string[] keywords  = data.keywords[selected].Split(separator);
            ShaderVariantCollection.ShaderVariant variant = new ShaderVariantCollection.ShaderVariant(data.shader, (PassType)data.types[selected], keywords);
            Undo.RecordObject(data.collection, "Add variant");
            data.collection.Add(variant);
        }
 private void DisplayAddVariantsMenu(Rect rect, Shader shader, ShaderVariantCollection collection)
 {
     AddVariantMenuData userData = new AddVariantMenuData {
         shader = shader,
         collection = collection
     };
     ShaderUtil.GetShaderVariantEntries(shader, collection, out userData.types, out userData.keywords);
     if (userData.keywords.Length == 0)
     {
         EditorApplication.Beep();
     }
     else
     {
         string[] options = new string[userData.keywords.Length];
         for (int i = 0; i < userData.keywords.Length; i++)
         {
             options[i] = ((PassType) userData.types[i]) + "/" + (!string.IsNullOrEmpty(userData.keywords[i]) ? userData.keywords[i] : "<no keywords>");
         }
         EditorUtility.DisplayCustomMenu(rect, options, null, new EditorUtility.SelectMenuItemFunction(this.AddVariantMenuSelected), userData);
     }
 }
        private void DisplayAddVariantsMenu(Rect rect, Shader shader, ShaderVariantCollection collection)
        {
            AddVariantMenuData userData = new AddVariantMenuData {
                shader     = shader,
                collection = collection
            };

            ShaderUtil.GetShaderVariantEntries(shader, collection, out userData.types, out userData.keywords);
            if (userData.keywords.Length == 0)
            {
                EditorApplication.Beep();
            }
            else
            {
                string[] options = new string[userData.keywords.Length];
                for (int i = 0; i < userData.keywords.Length; i++)
                {
                    options[i] = ((PassType)userData.types[i]) + "/" + (!string.IsNullOrEmpty(userData.keywords[i]) ? userData.keywords[i] : "<no keywords>");
                }
                EditorUtility.DisplayCustomMenu(rect, options, null, new EditorUtility.SelectMenuItemFunction(this.AddVariantMenuSelected), userData);
            }
        }