Ejemplo n.º 1
0
        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;
                    }
                }
            }
        }
Ejemplo n.º 2
0
 /// <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));
 }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        /// <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)));
        }
Ejemplo n.º 5
0
        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");
        }
Ejemplo n.º 6
0
 public static string GetShaderInfoFileName(Hash64 hash)
 {
     return(CEngine.Instance.FileManager.DDCDirectory + "shaderinfo/" + hash.ToString().ToLower() + ".xml");
 }