public void LoadXnd(out bool hasRedirectionType) { hasRedirectionType = false; Hash64 hash = GetFolderHash(); var address = ClassName.GetDirectory() + hash.ToString().ToLower() + "/"; var files = CEngine.Instance.FileManager.GetFiles(address, "*.metadata"); if (files == null || files.Count == 0) { Profiler.Log.WriteLine(Profiler.ELogTag.Warning, "MetaData", $"MetaClass {address} is empty"); } foreach (var i in files) { var MetaHash = CEngine.Instance.FileManager.GetPureFileFromFullName(i, false); var meta = new MetaData(i); this.Metas[System.Convert.ToUInt32(MetaHash)] = meta; if (CIPlatform.Instance.PlayMode != CIPlatform.enPlayMode.Game) { bool isRedirection = false; meta.LoadMetaData(i, out isRedirection); System.Diagnostics.Debug.Assert(MetaHash == meta.MetaHash.ToString()); if (isRedirection) { hasRedirectionType = true; } } } }
/// <summary> /// Gets the group with the given key. /// </summary> /// <param name="key">The key, nor null.</param> /// <returns>The cache group.</returns> protected virtual IDiskCacheGroup GetGroup(string key) { var hash = new Hash64(); hash = hash.Add(key); string path = Path.Combine(cacheDirectoryPath, hash.ToString()); return new Group(this, key, new DirectoryInfo(path)); }
MetaClass CreateMetaClass(System.Type type) { var cname = RttiHelper.GetTypeSaveString(type); var klass = new MetaClass(); klass.MetaType = type; var csIdx = cname.IndexOf('|'); var fileName = cname; if (csIdx >= 0) { fileName = cname.Substring(csIdx + 1); } klass.ClassName = RName.GetRName(MetaDirectory.Name + "/" + fileName); MetaData curVer = new MetaData(); curVer.BuildMetaData(type); Hash64 hash = klass.GetFolderHash(); string dir = klass.ClassName.GetDirectory() + hash.ToString(); if (EngineNS.CEngine.Instance.FileManager.DirectoryExists(dir)) { bool hasRedirection = false; klass.LoadXnd(out hasRedirection); #if PWindow //if (hasRedirection) // klass.Save2Xnd(false); #endif MetaData data = klass.FindMetaData(curVer.MetaHash); if (data == null) { klass.RegMetaData(curVer.MetaHash, curVer); var xnd = IO.XndHolder.NewXNDHolder(); curVer.Save2Xnd(xnd.Node); IO.XndHolder.SaveXND(dir + "/" + curVer.MetaHash + ".MetaData", xnd); } } else { CEngine.Instance.FileManager.CreateDirectory(dir); var sw = new System.IO.StreamWriter(dir + "/typename.txt", false); sw.WriteLine(cname); sw.Close(); klass.RegMetaData(curVer.MetaHash, curVer); var xnd = IO.XndHolder.NewXNDHolder(); curVer.Save2Xnd(xnd.Node); IO.XndHolder.SaveXND(dir + "/" + curVer.MetaHash + ".MetaData", xnd); } klass.CurrentVersion = curVer; Klasses.Add(cname, klass); return(klass); }
/// <summary> /// Gets the group with the given key. /// </summary> /// <param name="key">The key, nor null.</param> /// <returns>The cache group.</returns> protected virtual IDiskCacheGroup GetGroup(string key) { var hash = new Hash64(); hash = hash.Add(key); string path = Path.Combine(cacheDirectoryPath, hash.ToString()); return(new Group(this, key, new DirectoryInfo(path))); }
public static async System.Threading.Tasks.Task LoadAllShaders(CRenderContext rc) { var sm = CRenderContext.ShaderModelString; var shaderPath = CEngine.Instance.FileManager.DDCDirectory + sm + "/"; var shaders = CEngine.Instance.FileManager.GetFiles(shaderPath, "*.shader"); Profiler.Log.WriteLine(Profiler.ELogTag.Info, "LoadShaders", $"Begin LoadShaders Number = {shaders.Count}"); var t1 = Support.Time.HighPrecision_GetTickCount(); var smp = Thread.ASyncSemaphore.CreateSemaphore(shaders.Count); foreach (var i in shaders) { if (MultiThreadCompile) { CEngine.Instance.EventPoster.RunOn(async() => { var fileName = CEngine.Instance.FileManager.GetPureFileFromFullName(i, false); Hash64 hash = Hash64.TryParse(fileName); var effect = new CGfxEffect(); if (await effect.LoadFromXndAsync(rc, hash) == 0) { CEngine.Instance.EffectManager.RegEffect(hash, effect); } else { CEngine.Instance.FileManager.DeleteFile(shaderPath + hash.ToString() + ".shader"); } smp.Release(); return(true); }, Thread.Async.EAsyncTarget.TPools); } else { var fileName = CEngine.Instance.FileManager.GetPureFileFromFullName(i, false); Hash64 hash = Hash64.TryParse(fileName); var effect = new CGfxEffect(); if (await effect.LoadFromXndAsync(rc, hash) == 0) { CEngine.Instance.EffectManager.RegEffect(hash, effect); } else { CEngine.Instance.FileManager.DeleteFile(shaderPath + hash.ToString() + ".shader"); } smp.Release(); } } await smp.Await(); var t2 = Support.Time.HighPrecision_GetTickCount(); Profiler.Log.WriteLine(Profiler.ELogTag.Info, "LoadShaders", $"End LoadShaders, Times = {(t2 - t1) / 1000} ms"); }
public static string GetShaderInfoFileName(Hash64 hash) { return(CEngine.Instance.FileManager.DDCDirectory + "shaderinfo/" + hash.ToString().ToLower() + ".xml"); }