BNTX : Add BC4 alpha support
This commit is contained in:
parent
e639ac58b0
commit
7936762ec9
@ -52,6 +52,7 @@
|
|||||||
this.dataSizeLbl = new Toolbox.Library.Forms.STLabel();
|
this.dataSizeLbl = new Toolbox.Library.Forms.STLabel();
|
||||||
this.cnkGammaFix = new Toolbox.Library.Forms.STCheckBox();
|
this.cnkGammaFix = new Toolbox.Library.Forms.STCheckBox();
|
||||||
this.chkMultiThreading = new Toolbox.Library.Forms.STCheckBox();
|
this.chkMultiThreading = new Toolbox.Library.Forms.STCheckBox();
|
||||||
|
this.chkBC4Alpha = new Toolbox.Library.Forms.STCheckBox();
|
||||||
this.contentContainer.SuspendLayout();
|
this.contentContainer.SuspendLayout();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.SwizzleNum)).BeginInit();
|
((System.ComponentModel.ISupportInitialize)(this.SwizzleNum)).BeginInit();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.MipmapNum)).BeginInit();
|
((System.ComponentModel.ISupportInitialize)(this.MipmapNum)).BeginInit();
|
||||||
@ -60,6 +61,7 @@
|
|||||||
//
|
//
|
||||||
// contentContainer
|
// contentContainer
|
||||||
//
|
//
|
||||||
|
this.contentContainer.Controls.Add(this.chkBC4Alpha);
|
||||||
this.contentContainer.Controls.Add(this.chkMultiThreading);
|
this.contentContainer.Controls.Add(this.chkMultiThreading);
|
||||||
this.contentContainer.Controls.Add(this.cnkGammaFix);
|
this.contentContainer.Controls.Add(this.cnkGammaFix);
|
||||||
this.contentContainer.Controls.Add(this.dataSizeLbl);
|
this.contentContainer.Controls.Add(this.dataSizeLbl);
|
||||||
@ -103,6 +105,7 @@
|
|||||||
this.contentContainer.Controls.SetChildIndex(this.dataSizeLbl, 0);
|
this.contentContainer.Controls.SetChildIndex(this.dataSizeLbl, 0);
|
||||||
this.contentContainer.Controls.SetChildIndex(this.cnkGammaFix, 0);
|
this.contentContainer.Controls.SetChildIndex(this.cnkGammaFix, 0);
|
||||||
this.contentContainer.Controls.SetChildIndex(this.chkMultiThreading, 0);
|
this.contentContainer.Controls.SetChildIndex(this.chkMultiThreading, 0);
|
||||||
|
this.contentContainer.Controls.SetChildIndex(this.chkBC4Alpha, 0);
|
||||||
//
|
//
|
||||||
// button2
|
// button2
|
||||||
//
|
//
|
||||||
@ -316,7 +319,7 @@
|
|||||||
// cnkGammaFix
|
// cnkGammaFix
|
||||||
//
|
//
|
||||||
this.cnkGammaFix.AutoSize = true;
|
this.cnkGammaFix.AutoSize = true;
|
||||||
this.cnkGammaFix.Location = new System.Drawing.Point(757, 345);
|
this.cnkGammaFix.Location = new System.Drawing.Point(754, 345);
|
||||||
this.cnkGammaFix.Name = "cnkGammaFix";
|
this.cnkGammaFix.Name = "cnkGammaFix";
|
||||||
this.cnkGammaFix.Size = new System.Drawing.Size(160, 17);
|
this.cnkGammaFix.Size = new System.Drawing.Size(160, 17);
|
||||||
this.cnkGammaFix.TabIndex = 32;
|
this.cnkGammaFix.TabIndex = 32;
|
||||||
@ -335,6 +338,17 @@
|
|||||||
this.chkMultiThreading.UseVisualStyleBackColor = true;
|
this.chkMultiThreading.UseVisualStyleBackColor = true;
|
||||||
this.chkMultiThreading.CheckedChanged += new System.EventHandler(this.chkMultiThreading_CheckedChanged);
|
this.chkMultiThreading.CheckedChanged += new System.EventHandler(this.chkMultiThreading_CheckedChanged);
|
||||||
//
|
//
|
||||||
|
// chkBC4Alpha
|
||||||
|
//
|
||||||
|
this.chkBC4Alpha.AutoSize = true;
|
||||||
|
this.chkBC4Alpha.Location = new System.Drawing.Point(754, 368);
|
||||||
|
this.chkBC4Alpha.Name = "chkBC4Alpha";
|
||||||
|
this.chkBC4Alpha.Size = new System.Drawing.Size(76, 17);
|
||||||
|
this.chkBC4Alpha.TabIndex = 34;
|
||||||
|
this.chkBC4Alpha.Text = "BC4 Alpha";
|
||||||
|
this.chkBC4Alpha.UseVisualStyleBackColor = true;
|
||||||
|
this.chkBC4Alpha.CheckedChanged += new System.EventHandler(this.chkBC4Alpha_CheckedChanged);
|
||||||
|
//
|
||||||
// BinaryTextureImporterList
|
// BinaryTextureImporterList
|
||||||
//
|
//
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||||
@ -377,5 +391,6 @@
|
|||||||
private Toolbox.Library.Forms.STLabel compModeLbl;
|
private Toolbox.Library.Forms.STLabel compModeLbl;
|
||||||
private Toolbox.Library.Forms.STCheckBox cnkGammaFix;
|
private Toolbox.Library.Forms.STCheckBox cnkGammaFix;
|
||||||
private Toolbox.Library.Forms.STCheckBox chkMultiThreading;
|
private Toolbox.Library.Forms.STCheckBox chkMultiThreading;
|
||||||
|
private Toolbox.Library.Forms.STCheckBox chkBC4Alpha;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -53,7 +53,6 @@ namespace FirstPlugin
|
|||||||
// if (format != SurfaceFormat.Invalid)
|
// if (format != SurfaceFormat.Invalid)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
formatComboBox.Items.Add(SurfaceFormat.D32_FLOAT_S8X24_UINT);
|
formatComboBox.Items.Add(SurfaceFormat.D32_FLOAT_S8X24_UINT);
|
||||||
formatComboBox.Items.Add(SurfaceFormat.A1_B5_G5_R5_UNORM);
|
formatComboBox.Items.Add(SurfaceFormat.A1_B5_G5_R5_UNORM);
|
||||||
formatComboBox.Items.Add(SurfaceFormat.A4_B4_G4_R4_UNORM);
|
formatComboBox.Items.Add(SurfaceFormat.A4_B4_G4_R4_UNORM);
|
||||||
@ -93,6 +92,7 @@ namespace FirstPlugin
|
|||||||
compressionModeCB.SelectedIndex = 0;
|
compressionModeCB.SelectedIndex = 0;
|
||||||
compressionModeCB.Visible = false;
|
compressionModeCB.Visible = false;
|
||||||
compModeLbl.Visible = false;
|
compModeLbl.Visible = false;
|
||||||
|
chkBC4Alpha.Enabled = false;
|
||||||
|
|
||||||
foreach (SurfaceDim dim in (SurfaceDim[])Enum.GetValues(typeof(SurfaceDim)))
|
foreach (SurfaceDim dim in (SurfaceDim[])Enum.GetValues(typeof(SurfaceDim)))
|
||||||
{
|
{
|
||||||
@ -166,6 +166,11 @@ namespace FirstPlugin
|
|||||||
compModeLbl.Visible = false;
|
compModeLbl.Visible = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (setting.Format == SurfaceFormat.BC4_UNORM || setting.Format == SurfaceFormat.BC4_SNORM)
|
||||||
|
chkBC4Alpha.Enabled = true;
|
||||||
|
else
|
||||||
|
chkBC4Alpha.Enabled = false;
|
||||||
|
|
||||||
Bitmap bitmap = Toolbox.Library.Imaging.GetLoadingImage();
|
Bitmap bitmap = Toolbox.Library.Imaging.GetLoadingImage();
|
||||||
|
|
||||||
if (compressionModeCB.SelectedIndex == 0)
|
if (compressionModeCB.SelectedIndex == 0)
|
||||||
@ -180,7 +185,8 @@ namespace FirstPlugin
|
|||||||
|
|
||||||
pictureBox1.Image = bitmap;
|
pictureBox1.Image = bitmap;
|
||||||
|
|
||||||
var mips = setting.GenerateMipList(CompressionMode, MultiThreading);
|
var mips = setting.GenerateMipList(CompressionMode, MultiThreading, chkBC4Alpha.Checked);
|
||||||
|
|
||||||
setting.DataBlockOutput.Clear();
|
setting.DataBlockOutput.Clear();
|
||||||
setting.DataBlockOutput.Add(Utils.CombineByteArray(mips.ToArray()));
|
setting.DataBlockOutput.Add(Utils.CombineByteArray(mips.ToArray()));
|
||||||
|
|
||||||
@ -198,6 +204,10 @@ namespace FirstPlugin
|
|||||||
bitmap = STGenericTexture.DecodeBlockGetBitmap(mips[0],
|
bitmap = STGenericTexture.DecodeBlockGetBitmap(mips[0],
|
||||||
setting.TexWidth, setting.TexHeight, TextureData.ConvertFormat(setting.Format), new byte[0]);
|
setting.TexWidth, setting.TexHeight, TextureData.ConvertFormat(setting.Format), new byte[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (chkBC4Alpha.Checked)
|
||||||
|
bitmap = BitmapExtension.SetChannel(bitmap, STChannelType.Red,
|
||||||
|
STChannelType.Red, STChannelType.Red, STChannelType.Red);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pictureBox1.InvokeRequired)
|
if (pictureBox1.InvokeRequired)
|
||||||
@ -253,7 +263,6 @@ namespace FirstPlugin
|
|||||||
{
|
{
|
||||||
SetupSettings(SelectedTexSettings);
|
SetupSettings(SelectedTexSettings);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void listViewCustom1_SelectedIndexChanged(object sender, EventArgs e)
|
private void listViewCustom1_SelectedIndexChanged(object sender, EventArgs e)
|
||||||
@ -341,5 +350,11 @@ namespace FirstPlugin
|
|||||||
SetupSettings(SelectedTexSettings, false);
|
SetupSettings(SelectedTexSettings, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void chkBC4Alpha_CheckedChanged(object sender, EventArgs e) {
|
||||||
|
if (SelectedTexSettings != null) {
|
||||||
|
SetupSettings(SelectedTexSettings, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -159,11 +159,13 @@ namespace FirstPlugin
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public List<byte[]> GenerateMipList(STCompressionMode CompressionMode, bool multiThread, int SurfaceLevel = 0)
|
public List<byte[]> GenerateMipList(STCompressionMode CompressionMode, bool multiThread, bool bc4Alpha, int SurfaceLevel = 0)
|
||||||
{
|
{
|
||||||
Bitmap Image = BitmapExtension.GetBitmap(DecompressedData[SurfaceLevel], (int)TexWidth, (int)TexHeight);
|
Bitmap Image = BitmapExtension.GetBitmap(DecompressedData[SurfaceLevel], (int)TexWidth, (int)TexHeight);
|
||||||
if (GammaFix)
|
if (GammaFix)
|
||||||
Image = BitmapExtension.AdjustGamma(Image, 2.2f);
|
Image = BitmapExtension.AdjustGamma(Image, 2.2f);
|
||||||
|
if (bc4Alpha)
|
||||||
|
Image = BitmapExtension.SetChannel(Image, STChannelType.Alpha, STChannelType.Alpha, STChannelType.Alpha, STChannelType.Alpha);
|
||||||
|
|
||||||
List<byte[]> mipmaps = new List<byte[]>();
|
List<byte[]> mipmaps = new List<byte[]>();
|
||||||
for (int mipLevel = 0; mipLevel < MipCount; mipLevel++)
|
for (int mipLevel = 0; mipLevel < MipCount; mipLevel++)
|
||||||
@ -172,7 +174,7 @@ namespace FirstPlugin
|
|||||||
int MipHeight = Math.Max(1, (int)TexHeight >> mipLevel);
|
int MipHeight = Math.Max(1, (int)TexHeight >> mipLevel);
|
||||||
|
|
||||||
if (mipLevel != 0)
|
if (mipLevel != 0)
|
||||||
Image = BitmapExtension.ResizeImage(Image, MipWidth, MipHeight);
|
Image = BitmapExtension.Resize(Image, MipWidth, MipHeight);
|
||||||
|
|
||||||
mipmaps.Add(STGenericTexture.CompressBlock(BitmapExtension.ImageToByte(Image),
|
mipmaps.Add(STGenericTexture.CompressBlock(BitmapExtension.ImageToByte(Image),
|
||||||
Image.Width, Image.Height, TextureData.ConvertFormat(Format), alphaRef, multiThread, CompressionMode));
|
Image.Width, Image.Height, TextureData.ConvertFormat(Format), alphaRef, multiThread, CompressionMode));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user