Exemple #1
0
        public static bool RefreshTxPic(string fileName)
        {
            var xnd = EngineNS.IO.XndHolder.SyncLoadXND(fileName);

            if (xnd == null)
            {
                return(false);
            }

            CTxPicDesc txDesc = new CTxPicDesc();

            txDesc.SetDefault();

            #region Desc
            var attr = xnd.Node.FindAttrib("Desc");
            attr.BeginRead();
            unsafe
            {
                if (attr.Version == 3)
                {
                    attr.Read((IntPtr)(&txDesc), sizeof(CTxPicDesc));
                }
                else if (attr.Version == 2)
                {
                    attr.Read(out txDesc.sRGB);
                }
            }
            attr.EndRead();
            #endregion

            var pngBitmap = LoadPngBitmapFromTxPic(xnd);

            txDesc.Width  = pngBitmap.Width;
            txDesc.Height = pngBitmap.Height;

            var saveXnd = EngineNS.IO.XndHolder.NewXNDHolder();
            SaveTxPic(saveXnd, ref txDesc, pngBitmap, txDesc.EtcFormat, txDesc.MipLevel);

            EngineNS.IO.XndHolder.SaveXND(fileName, saveXnd);
            return(true);
        }
        public override void DoImport(string file, string target, bool overwrite = false)
        {
            var rawData = EditorCommon.ImageInit.ReadRawData(file);
            //var pngData = EditorCommon.ImageInit.ConverImage2PNG(file);
            //if (pngData == null)
            //{
            //    EngineNS.Profiler.Log.WriteLine(EngineNS.Profiler.ELogTag.Error, "Resource", $"Texture {file} is not found");
            //    return;
            //}

            var xnd = EngineNS.IO.XndHolder.NewXNDHolder();
            var attr = xnd.Node.AddAttrib("Desc");

            attr.Version = 1;
            attr.BeginWrite();
            attr.Write(file);
            //这里最好导出的时候有参数,确定是否sRGB
            var txDesc = new EngineNS.CTxPicDesc();
            txDesc.SetDefault();
            unsafe
            {
                attr.Write((IntPtr)(&txDesc), sizeof(EngineNS.CTxPicDesc));
            }
            attr.EndWrite();

            attr = xnd.Node.AddAttrib("RawImage");
            attr.BeginWrite();
            attr.Write(rawData);
            attr.EndWrite();

            attr = xnd.Node.AddAttrib("PNG");
            attr.BeginWrite();
            var pngBlob = new EngineNS.Support.CBlobObject();
            EngineNS.CShaderResourceView.ConvertImage(EngineNS.CEngine.Instance.RenderContext, rawData, EIMAGE_FILE_FORMAT.PNG, pngBlob);
            var pngData = pngBlob.ToBytes();
            attr.Write(pngData);
            attr.EndWrite();

            attr = xnd.Node.AddAttrib("JPG");
            attr.BeginWrite();
            var jpgBlob = new EngineNS.Support.CBlobObject();
            EngineNS.CShaderResourceView.ConvertImage(EngineNS.CEngine.Instance.RenderContext, rawData, EIMAGE_FILE_FORMAT.JPG, jpgBlob);
            attr.Write(jpgBlob.ToBytes());
            attr.EndWrite();

            attr = xnd.Node.AddAttrib("DDS");
            attr.BeginWrite();
            var ddsBlob = new EngineNS.Support.CBlobObject();
            EngineNS.CShaderResourceView.ConvertImage(EngineNS.CEngine.Instance.RenderContext, rawData, EIMAGE_FILE_FORMAT.DDS, ddsBlob);
            attr.Write(ddsBlob.ToBytes());
            attr.EndWrite();

            attr = xnd.Node.AddAttrib("ETC2");
            attr.BeginWrite();
            //EngineNS.CShaderResourceView.SaveETC2(file, attr, 0, true);
            EngineNS.CShaderResourceView.SaveETC2_Png(pngData, attr, 0, true);
            attr.EndWrite();

            var pos = target.LastIndexOf('.');
            target = target.Substring(0, pos);
            target += EngineNS.CEngineDesc.TextureExtension;
            EngineNS.IO.XndHolder.SaveXND(target, xnd);

            pos = this.ResourceName.Name.LastIndexOf('.');
            var newRName = this.ResourceName.Name.Substring(0, pos);
            newRName += EngineNS.CEngineDesc.TextureExtension;
            this.ResourceName = RName.GetRName(newRName);
        }