Exemple #1
0
        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);
                    }
                }
            }
        }
Exemple #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);
            }
        }
Exemple #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);
        }