private string getBytecodeFilename() { //TODO: if macro's are in different order, the hash will be falsely different var hashData = ""; hashData += fx; if (ShaderMacros != null) { hashData = ShaderMacros.Aggregate("", (current, macro) => current + (macro.Name ?? "[NULL]" + macro.Value ?? "[NULL]")); } var hasher = SHA1.Create(); using (var strm = new MemoryStream(Encoding.ASCII.GetBytes(hashData))) hasher.ComputeHash(strm); return(string.Format("{0}\\{1}-{2}.bin", TWDir.Cache.CreateSubdirectory("Shaders"), FileHelper.ExtractFilename(filename, true), hasher.Hash.Aggregate("", (current, b) => current + b.ToString("X2")) )); }
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); }