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); }