public bool KeepVariants(Shader shader, ShaderSnippetData snippet, ShaderCompilerData variants) { keywords.Clear(); var shaderKeywords = variants.shaderKeywordSet.GetShaderKeywords(); foreach (var shaderkeyword in shaderKeywords) { keywords.Add(ShaderKeyword.GetGlobalKeywordName(shaderkeyword)); } bool hasKeywords = keywords.Count > 0; Debug.Log(shader.name + "\tVariants:" + (hasKeywords ? string.Join("\t", keywords.ToArray()) : "<no keywords>")); if (hasKeywords && keepExportVariants != null) { ShaderVariant shaderVariant = new ShaderVariant(shader, snippet.passType, keywords.ToArray()); // 必须,自动导出的变体组合 if (keepExportVariants.Contains(shaderVariant)) { return(true); } // 可选,自定义变体组合 if (keepCustomVariants != null && keepCustomVariants.Contains(shaderVariant)) { return(true); } return(false); } return(true); }
static StackObject *Add_2(ILIntepreter __intp, StackObject *__esp, IList <object> __mStack, CLRMethod __method, bool isNewObj) { CSHotFix.Runtime.Enviorment.AppDomain __domain = __intp.AppDomain; StackObject *ptr_of_this_method; StackObject *__ret = ILIntepreter.Minus(__esp, 2); ptr_of_this_method = ILIntepreter.Minus(__esp, 1); UnityEngine.ShaderVariantCollection.ShaderVariant variant = (UnityEngine.ShaderVariantCollection.ShaderVariant) typeof(UnityEngine.ShaderVariantCollection.ShaderVariant).CheckCLRTypes(StackObject.ToObject(ptr_of_this_method, __domain, __mStack)); __intp.Free(ptr_of_this_method); ptr_of_this_method = ILIntepreter.Minus(__esp, 2); UnityEngine.ShaderVariantCollection instance_of_this_method; instance_of_this_method = (UnityEngine.ShaderVariantCollection) typeof(UnityEngine.ShaderVariantCollection).CheckCLRTypes(StackObject.ToObject(ptr_of_this_method, __domain, __mStack)); __intp.Free(ptr_of_this_method); var result_of_this_method = instance_of_this_method.Add(variant); __ret->ObjectType = ObjectTypes.Integer; __ret->Value = result_of_this_method ? 1 : 0; return(__ret + 1); }