Fix bfres disappearing (bounding radius calculation) and fixes to xtx and astc support.
This commit is contained in:
parent
1a80f9207a
commit
137c086699
Binary file not shown.
Binary file not shown.
@ -1230,10 +1230,10 @@ namespace Bfres.Structs
|
|||||||
float xxMax = GetExtent(max.X, min.X);
|
float xxMax = GetExtent(max.X, min.X);
|
||||||
float yyMax = GetExtent(max.Y, min.Y);
|
float yyMax = GetExtent(max.Y, min.Y);
|
||||||
float zzMax = GetExtent(max.Z, min.Z);
|
float zzMax = GetExtent(max.Z, min.Z);
|
||||||
float radius = CalculateBoundingRadius(min, max);
|
|
||||||
|
|
||||||
Vector3 extend = new Vector3(xxMax, yyMax, zzMax);
|
Vector3 extend = new Vector3(xxMax, yyMax, zzMax);
|
||||||
|
|
||||||
|
float radius = (float)(center.Length + extend.Length);
|
||||||
|
|
||||||
return new BoundingBox() { Radius = radius, Center = center, Extend = extend };
|
return new BoundingBox() { Radius = radius, Center = center, Extend = extend };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@ namespace FirstPlugin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool DisplayIcons => true;
|
public bool DisplayIcons => false; //Astc decoding is slow and the UI has loading issues atm
|
||||||
|
|
||||||
public List<STGenericTexture> TextureList
|
public List<STGenericTexture> TextureList
|
||||||
{
|
{
|
||||||
@ -65,12 +65,18 @@ namespace FirstPlugin
|
|||||||
string name = Path.GetFileNameWithoutExtension(FileName);
|
string name = Path.GetFileNameWithoutExtension(FileName);
|
||||||
TextureInfos[i].Text = TextureInfos.Count == 1 ? name : $"{name}_image{i}";
|
TextureInfos[i].Text = TextureInfos.Count == 1 ? name : $"{name}_image{i}";
|
||||||
}
|
}
|
||||||
|
|
||||||
ContextMenuStrip = new STContextMenuStrip();
|
|
||||||
ContextMenuStrip.Items.Add(new ToolStripMenuItem("Save", null, SaveAction, Keys.Control | Keys.S));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SaveAction(object sender, EventArgs args)
|
public ToolStripItem[] GetContextMenuItems()
|
||||||
|
{
|
||||||
|
return new ToolStripItem[]
|
||||||
|
{
|
||||||
|
new ToolStripMenuItem("Save", null, Save, Keys.Control | Keys.S),
|
||||||
|
new ToolStripMenuItem("Export All", null, ExportAllAction, Keys.Control | Keys.E),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Save(object sender, EventArgs args)
|
||||||
{
|
{
|
||||||
SaveFileDialog sfd = new SaveFileDialog();
|
SaveFileDialog sfd = new SaveFileDialog();
|
||||||
sfd.DefaultExt = "xtx";
|
sfd.DefaultExt = "xtx";
|
||||||
@ -83,6 +89,45 @@ namespace FirstPlugin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void ExportAllAction(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (Nodes.Count <= 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
string formats = FileFilters.XTX;
|
||||||
|
|
||||||
|
string[] forms = formats.Split('|');
|
||||||
|
|
||||||
|
List<string> Formats = new List<string>();
|
||||||
|
|
||||||
|
for (int i = 0; i < forms.Length; i++)
|
||||||
|
{
|
||||||
|
if (i > 1 || i == (forms.Length - 1)) //Skip lines with all extensions
|
||||||
|
{
|
||||||
|
if (!forms[i].StartsWith("*"))
|
||||||
|
Formats.Add(forms[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FolderSelectDialog sfd = new FolderSelectDialog();
|
||||||
|
if (sfd.ShowDialog() == DialogResult.OK)
|
||||||
|
{
|
||||||
|
string folderPath = sfd.SelectedPath;
|
||||||
|
|
||||||
|
BatchFormatExport form = new BatchFormatExport(Formats);
|
||||||
|
if (form.ShowDialog() == DialogResult.OK)
|
||||||
|
{
|
||||||
|
string extension = form.GetSelectedExtension();
|
||||||
|
extension.Replace(" ", string.Empty);
|
||||||
|
|
||||||
|
foreach (STGenericTexture node in Nodes)
|
||||||
|
{
|
||||||
|
((STGenericTexture)node).Export($"{folderPath}\\{node.Text}{extension}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void Unload()
|
public void Unload()
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -326,53 +371,6 @@ namespace FirstPlugin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual ToolStripItem[] GetContextMenuItems()
|
|
||||||
{
|
|
||||||
List<ToolStripItem> Items = new List<ToolStripItem>();
|
|
||||||
Items.Add(new ToolStripMenuItem("Export All", null, ExportAllAction, Keys.Control | Keys.E));
|
|
||||||
return Items.ToArray();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void ExportAllAction(object sender, EventArgs args)
|
|
||||||
{
|
|
||||||
ExportAll();
|
|
||||||
}
|
|
||||||
|
|
||||||
public virtual void ExportAll()
|
|
||||||
{
|
|
||||||
List<string> Formats = new List<string>();
|
|
||||||
Formats.Add("Microsoft DDS (.dds)");
|
|
||||||
Formats.Add("Portable Graphics Network (.png)");
|
|
||||||
Formats.Add("Joint Photographic Experts Group (.jpg)");
|
|
||||||
Formats.Add("Bitmap Image (.bmp)");
|
|
||||||
Formats.Add("Tagged Image File Format (.tiff)");
|
|
||||||
|
|
||||||
FolderSelectDialog sfd = new FolderSelectDialog();
|
|
||||||
|
|
||||||
if (sfd.ShowDialog() == DialogResult.OK)
|
|
||||||
{
|
|
||||||
string folderPath = sfd.SelectedPath;
|
|
||||||
|
|
||||||
BatchFormatExport form = new BatchFormatExport(Formats);
|
|
||||||
if (form.ShowDialog() == DialogResult.OK)
|
|
||||||
{
|
|
||||||
foreach (STGenericTexture tex in Nodes)
|
|
||||||
{
|
|
||||||
if (form.Index == 0)
|
|
||||||
tex.SaveDDS(folderPath + '\\' + tex.Text + ".dds");
|
|
||||||
else if (form.Index == 1)
|
|
||||||
tex.SaveBitMap(folderPath + '\\' + tex.Text + ".png");
|
|
||||||
else if (form.Index == 2)
|
|
||||||
tex.SaveBitMap(folderPath + '\\' + tex.Text + ".jpg");
|
|
||||||
else if (form.Index == 3)
|
|
||||||
tex.SaveBitMap(folderPath + '\\' + tex.Text + ".bmp");
|
|
||||||
else if (form.Index == 4)
|
|
||||||
tex.SaveBitMap(folderPath + '\\' + tex.Text + ".tiff");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public class BlockHeader
|
public class BlockHeader
|
||||||
{
|
{
|
||||||
public uint BlockSize { get; set; }
|
public uint BlockSize { get; set; }
|
||||||
@ -479,11 +477,22 @@ namespace FirstPlugin
|
|||||||
public uint[] MipOffsets { get; set; }
|
public uint[] MipOffsets { get; set; }
|
||||||
public byte[] ImageData;
|
public byte[] ImageData;
|
||||||
|
|
||||||
|
public uint TextureLayout1;
|
||||||
|
public uint TextureLayout2;
|
||||||
|
|
||||||
|
public uint Boolean;
|
||||||
|
|
||||||
public override string ExportFilter => FileFilters.XTX;
|
public override string ExportFilter => FileFilters.XTX;
|
||||||
public override string ReplaceFilter => FileFilters.XTX;
|
public override string ReplaceFilter => FileFilters.XTX;
|
||||||
|
|
||||||
private byte[] unknownData;
|
private byte[] unknownData;
|
||||||
|
|
||||||
|
public TextureInfo()
|
||||||
|
{
|
||||||
|
CanExport = true;
|
||||||
|
CanReplace = true;
|
||||||
|
}
|
||||||
|
|
||||||
public void Read(FileReader reader)
|
public void Read(FileReader reader)
|
||||||
{
|
{
|
||||||
DataSize = reader.ReadUInt64();
|
DataSize = reader.ReadUInt64();
|
||||||
@ -495,15 +504,13 @@ namespace FirstPlugin
|
|||||||
XTXFormat = reader.ReadEnum<XTXFormats.XTXImageFormat>(true);
|
XTXFormat = reader.ReadEnum<XTXFormats.XTXImageFormat>(true);
|
||||||
MipCount = reader.ReadUInt32();
|
MipCount = reader.ReadUInt32();
|
||||||
SliceSize = reader.ReadUInt32();
|
SliceSize = reader.ReadUInt32();
|
||||||
MipOffsets = reader.ReadUInt32s((int)MipCount);
|
MipOffsets = reader.ReadUInt32s(17);
|
||||||
unknownData = reader.ReadBytes(0x38);
|
TextureLayout1 = reader.ReadUInt32();
|
||||||
|
TextureLayout2 = reader.ReadUInt32();
|
||||||
|
Boolean = reader.ReadUInt32();
|
||||||
|
|
||||||
Format = ConvertFormat(XTXFormat);
|
Format = ConvertFormat(XTXFormat);
|
||||||
ArrayCount = 1;
|
ArrayCount = 1;
|
||||||
|
|
||||||
ContextMenuStrip = new STContextMenuStrip();
|
|
||||||
ContextMenuStrip.Items.Add(new ToolStripMenuItem("Export", null, ExportAction, Keys.Control | Keys.E));
|
|
||||||
ContextMenuStrip.Items.Add(new ToolStripMenuItem("Replace", null, ReplaceAction, Keys.Control | Keys.R));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte[] Write()
|
public byte[] Write()
|
||||||
@ -535,7 +542,6 @@ namespace FirstPlugin
|
|||||||
|
|
||||||
public override void Replace(string FileName)
|
public override void Replace(string FileName)
|
||||||
{
|
{
|
||||||
var bntxFile = new BNTX();
|
|
||||||
var tex = new TextureData();
|
var tex = new TextureData();
|
||||||
tex.Replace(FileName, MipCount, 0, Format);
|
tex.Replace(FileName, MipCount, 0, Format);
|
||||||
|
|
||||||
@ -551,6 +557,8 @@ namespace FirstPlugin
|
|||||||
Width = tex.Texture.Width;
|
Width = tex.Texture.Width;
|
||||||
Height = tex.Texture.Height;
|
Height = tex.Texture.Height;
|
||||||
MipCount = tex.Texture.MipCount;
|
MipCount = tex.Texture.MipCount;
|
||||||
|
TextureLayout1 = tex.Texture.textureLayout;
|
||||||
|
TextureLayout2 = tex.Texture.textureLayout2;
|
||||||
|
|
||||||
Format = tex.Format;
|
Format = tex.Format;
|
||||||
XTXFormat = ConvertFromGenericFormat(tex.Format);
|
XTXFormat = ConvertFromGenericFormat(tex.Format);
|
||||||
@ -733,7 +741,9 @@ namespace FirstPlugin
|
|||||||
|
|
||||||
public override byte[] GetImageData(int ArrayLevel = 0, int MipLevel = 0, int DepthLevel = 0)
|
public override byte[] GetImageData(int ArrayLevel = 0, int MipLevel = 0, int DepthLevel = 0)
|
||||||
{
|
{
|
||||||
return TegraX1Swizzle.GetImageData(this, ImageData, ArrayLevel, MipLevel, DepthLevel, (int)Target);
|
var blockHeightLog2 = TextureLayout1 & 7;
|
||||||
|
|
||||||
|
return TegraX1Swizzle.GetImageData(this, ImageData, ArrayLevel, MipLevel, DepthLevel, blockHeightLog2, (int)Target);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -47,7 +47,7 @@ namespace FirstPlugin
|
|||||||
public static string REV_TEX = GetFilter(".png", ".bmp", ".tga", ".jpg", ".tiff", ".tif", ".gif");
|
public static string REV_TEX = GetFilter(".png", ".bmp", ".tga", ".jpg", ".tiff", ".tif", ".gif");
|
||||||
|
|
||||||
public static string NUTEXB = GetFilter(".dds",".png", ".bmp", ".tga", ".jpg", ".tiff", ".tif", ".gif");
|
public static string NUTEXB = GetFilter(".dds",".png", ".bmp", ".tga", ".jpg", ".tiff", ".tif", ".gif");
|
||||||
public static string XTX = GetFilter(".dds", ".png", ".bmp", ".tga", ".jpg", ".tiff", ".tif", ".gif");
|
public static string XTX = GetFilter(".dds", ".astc", ".png", ".bmp", ".tga", ".jpg", ".tiff", ".tif", ".gif");
|
||||||
|
|
||||||
public static string GetFilter(Type type, object CheckAnimEffect = null, bool IsExporting = false)
|
public static string GetFilter(Type type, object CheckAnimEffect = null, bool IsExporting = false)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user