public void Save2XML(IO.XmlNode node) { //string fileName = ""; var hlslDesc = CEngine.Instance.FileManager.HLSLFileDescManager.FindFileDesc(this.EnvShaderPatch.ShaderName.Address); node.AddAttrib("HLSLHashCode", hlslDesc.HashWithDepends.ToString()); node.AddAttrib("Material_RNameType", ((int)MtlShaderPatch.Name.RNameType).ToString()); node.AddAttrib("Material", MtlShaderPatch.Name.ToString()); node.AddAttrib("ShadingEnv", EnvShaderPatch.ShaderName.ToString()); node.AddAttrib("ShadingEnvType", Rtti.RttiHelper.GetTypeSaveString(EnvShaderPatch.EnvType)); node.AddAttrib("CacheTime", System.DateTime.Now.ToString()); { var mdfCaller = MdfQueueShaderPatch.GetMdfQueueCaller(); var mdf = node.AddNode("MdfQueue", "", node.mHolder); mdf.AddAttrib("MDFQUEUE_FUNCTION", mdfCaller); foreach (var i in MdfQueueShaderPatch.Modifiers) { mdf.AddNode(i.Name, "", node.mHolder); } } { var mtl = MtlShaderPatch.GetMtlMacroArray(); var mtlNode = node.AddNode("MtlMacro", "", node.mHolder); foreach (var i in mtl) { mtlNode.AddAttrib(i.mMacroName, i.mMacroValue); } } { var env = node.AddNode("EnvMacro", "", node.mHolder); var defs = EnvShaderPatch.MacroDefines; if (defs != null) { foreach (var i in defs) { env.AddAttrib(i.Name, i.Definition); } } } }
private void UpdateMacroArray() { ShaderMacros.ClearDefines(); ShaderMacros.SetExtraInclude(CShaderDefinitions.EExtraIncludeType.Material, MtlShaderPatch.GetShaderIncludes()); if (MdfQueueShaderPatch.GetShaderIncludes() != null) { ShaderMacros.SetExtraInclude(CShaderDefinitions.EExtraIncludeType.MdfQueue, MdfQueueShaderPatch.GetShaderIncludes()); } ShaderMacros.SetExtraDefines(CShaderDefinitions.EExtraIncludeType.Material, MtlShaderPatch.GetShaderDefines()); if (MdfQueueShaderPatch.GetShaderDefines() != null) { ShaderMacros.SetExtraDefines(CShaderDefinitions.EExtraIncludeType.MdfQueue, MdfQueueShaderPatch.GetShaderDefines()); } if (EnvShaderPatch.MacroDefines != null) { var defs = EnvShaderPatch.MacroDefines; foreach (var i in defs) { ShaderMacros.SetDefine(i.Name, i.Definition); } } List <CGfxMaterial.MtlMacro> MacroArray = MtlShaderPatch.GetMtlMacroArray(); for (int idx = 0; idx < MacroArray.Count; idx++) { ShaderMacros.SetDefine(MacroArray[idx].mMacroName, MacroArray[idx].mMacroValue); } var mdfCaller = MdfQueueShaderPatch.GetMdfQueueCaller(); if (string.IsNullOrEmpty(mdfCaller) == false) { ShaderMacros.SetDefine("MDFQUEUE_FUNCTION", mdfCaller); } }
internal void UpdateHash64(bool UpdateMacro) { if (UpdateMacro) { UpdateMacroArray(); } String = ""; if (MtlShaderPatch != null) { String += MtlShaderPatch.ToString(); } if (MdfQueueShaderPatch != null) { String += MdfQueueShaderPatch.ToString(); } if (ShaderMacros != null) { String += ShaderMacros.ToString(); } String += EnvShaderPatch.ToString(); Hash64.CalcHash64(ref NameHash, String); }