Exemplo n.º 1
0
            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"))
                                     ));
            }
Exemplo n.º 2
0
        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);
            }
        }
Exemplo n.º 3
0
        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);
        }