Пример #1
0
        public static RName GetRNameFromType(Type type, bool checkFileExist, RName.enRNameType rNameType = RName.enRNameType.Game)
        {
            var fullName = GetAppTypeString(type);
            var retVal   = RName.GetRName(fullName.Replace(".", "/") + EngineNS.CEngineDesc.MacrossExtension, rNameType);

            if (checkFileExist)
            {
                if (!EngineNS.CEngine.Instance.FileManager.DirectoryExists(retVal.Address))
                {
                    return(null);
                }
            }
            return(retVal);
        }
Пример #2
0
        public void CollectRefObjects(RName rn)
        {
            RootPath     = CEngine.Instance.FileManager.ProjectContent;
            CurRNameType = RName.enRNameType.Game;
            var files = CEngine.Instance.FileManager.GetFiles(RootPath, "*.rinfo");

            ProcFiles(files, rn);

            RootPath     = CEngine.Instance.FileManager.EditorContent;
            CurRNameType = RName.enRNameType.Editor;
            files        = CEngine.Instance.FileManager.GetFiles(RootPath, "*.rinfo");
            ProcFiles(files, rn);

            RootPath     = CEngine.Instance.FileManager.EngineContent;
            CurRNameType = RName.enRNameType.Engine;
            files        = CEngine.Instance.FileManager.GetFiles(RootPath, "*.rinfo");
            ProcFiles(files, rn);
        }
Пример #3
0
        public static async System.Threading.Tasks.Task <CGfxEffectDesc> LoadEffectDescFromXml(CRenderContext rc, IO.XmlNode node, bool testHash = true)
        {
            var result = new CGfxEffectDesc();

            if (node == null)
            {
                return(result);
            }
            RName.enRNameType rNameType = RName.enRNameType.Game;
            var attr = node.FindAttrib("Material_RNameType");

            if (attr != null)
            {
                rNameType = (RName.enRNameType)System.Convert.ToInt32(attr.Value);
            }
            attr = node.FindAttrib("Material");
            if (attr != null)
            {
                result.MtlShaderPatch = await CEngine.Instance.MaterialManager.GetMaterialAsync(rc, RName.GetRName(attr.Value, rNameType));

                if (result.MtlShaderPatch == null)
                {
                    return(null);
                }
            }

            attr = node.FindAttrib("ShadingEnv");
            string shadingEnvName = null;

            if (attr != null)
            {
                result.mEnvShaderPatch = new Graphics.GfxEnvShaderCode();
                shadingEnvName         = attr.Value;

                var attr1 = node.FindAttrib("ShadingEnvType");
                if (attr1 != null)
                {
                    var envType = Rtti.RttiHelper.GetTypeFromSaveString(attr1.Value);
                    var envTemp = Rtti.RttiHelper.CreateInstance(envType) as CGfxShadingEnv;
                    if (envTemp != null)
                    {
                        envTemp.InitCodeOnce(result.mEnvShaderPatch);
                    }
                }
                var LoadDefs = new List <CShaderDefinitions.MacroDefine>();
                var defs     = node.FindNode("EnvMacro");
                if (defs != null)
                {
                    var macroAttrs = defs.GetAttribs();
                    for (int i = 0; i < macroAttrs.Count; i++)
                    {
                        result.mEnvShaderPatch.SetMacroDefineValue(macroAttrs[i].Name, macroAttrs[i].Value);
                    }
                }
            }

            result.MdfQueueShaderPatch = new Mesh.CGfxMdfQueue();
            var mdf = node.FindNode("MdfQueue").GetNodes();

            foreach (var i in mdf)
            {
                var type = Rtti.RttiHelper.GetTypeFromSaveString(i.Name);
                var om   = System.Activator.CreateInstance(type) as EngineNS.Graphics.Mesh.CGfxModifier;
                if (om == null)
                {
                    continue;
                }
                result.MdfQueueShaderPatch.AddModifier(om);
            }
            result.UpdateMacroArray();
            result.UpdateHash64(false);

            if (testHash)
            {
                attr = node.FindAttrib("HLSLHashCode");
                if (attr != null)
                {
                    result.HLSLHashCode = attr.Value;
                    var hlslDesc = CEngine.Instance.FileManager.HLSLFileDescManager.FindFileDesc(RName.GetRName(shadingEnvName, RName.enRNameType.Engine).Address);
                    if (hlslDesc != null && hlslDesc.HashWithDepends.ToString() != result.HLSLHashCode)
                    {
                        Profiler.Log.WriteLine(Profiler.ELogTag.Warning, "Shaders", $"effect {shadingEnvName} need recompile");
                        return(null);
                    }
                }
            }
            return(result);
        }