From 20f4699b83af2743e2893e1f91cbbaf37016f72c Mon Sep 17 00:00:00 2001 From: CallumDev Date: Mon, 17 Dec 2018 04:15:35 +1030 Subject: [PATCH] Editor: Texture Import allow flipping textures --- src/Editor/LancerEdit/TextureImport.cs | 15 +++++++++------ src/Editor/LancerEdit/UtfTab.Popups.cs | 8 +++++--- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/Editor/LancerEdit/TextureImport.cs b/src/Editor/LancerEdit/TextureImport.cs index 18cdf589..5a2e0af0 100644 --- a/src/Editor/LancerEdit/TextureImport.cs +++ b/src/Editor/LancerEdit/TextureImport.cs @@ -50,31 +50,33 @@ public static void LoadLibraries() } } - static List GenerateMipmapsRGBA(string input, MipmapMethod mipm) + static List GenerateMipmapsRGBA(string input, MipmapMethod mipm, bool flip) { List mips = new List(); var surface = TeximpNet.Surface.LoadFromFile(input); + if (flip) surface.FlipVertically(); surface.ConvertTo(TeximpNet.ImageConversion.To32Bits); surface.GenerateMipMaps(mips, (TeximpNet.ImageFilter)mipm); return mips; } - public static byte[] TGANoMipmap(string input) + public static byte[] TGANoMipmap(string input, bool flip) { LoadLibraries(); using(var stream = new MemoryStream()) { using(var surface = TeximpNet.Surface.LoadFromFile(input)) { + if (flip) surface.FlipVertically(); surface.ConvertTo(TeximpNet.ImageConversion.To32Bits); surface.SaveToStream(TeximpNet.ImageFormat.TARGA, stream); } return stream.ToArray(); } } - public static unsafe List TGAMipmaps(string input, MipmapMethod mipm) + public static unsafe List TGAMipmaps(string input, MipmapMethod mipm, bool flip) { LoadLibraries(); var nodes = new List(); - var mips = GenerateMipmapsRGBA(input, mipm); + var mips = GenerateMipmapsRGBA(input, mipm, flip); for (int i = 0; i < mips.Count; i++) { using(var stream = new MemoryStream()) { mips[i].SaveToStream(TeximpNet.ImageFormat.TARGA, stream); @@ -85,7 +87,7 @@ public static unsafe List TGAMipmaps(string input, MipmapMethod mipm) } return nodes; } - public static byte[] CreateDDS(string input, DDSFormat format, MipmapMethod mipm, bool slow) + public static byte[] CreateDDS(string input, DDSFormat format, MipmapMethod mipm, bool slow, bool flip) { LoadLibraries(); using (var stream = new MemoryStream()) @@ -98,10 +100,11 @@ public static byte[] CreateDDS(string input, DDSFormat format, MipmapMethod mipm { using (var surface = TeximpNet.Surface.LoadFromFile(input)) { + if (flip) surface.FlipVertically(); compress.Input.SetData(surface); } } else { - var mips = GenerateMipmapsRGBA(input, mipm); + var mips = GenerateMipmapsRGBA(input, mipm, flip); compress.Input.SetTextureLayout(TextureType.Texture2D, mips[0].Width, mips[0].Height); for (int i = 0; i < mips.Count; i++) { diff --git a/src/Editor/LancerEdit/UtfTab.Popups.cs b/src/Editor/LancerEdit/UtfTab.Popups.cs index f85eb333..9d909793 100644 --- a/src/Editor/LancerEdit/UtfTab.Popups.cs +++ b/src/Editor/LancerEdit/UtfTab.Popups.cs @@ -47,6 +47,7 @@ void RegisterPopups() }; int mipmapOption = 6; bool compressSlow = false; + bool texFlip = false; void TexImportDialog(PopupData data) { if (teximportprev == null) @@ -78,6 +79,7 @@ void TexImportDialog(PopupData data) ImGui.Text(string.Format("Dimensions: {0}x{1}", teximportprev.Width, teximportprev.Height)); ImGui.Combo("Format", ref compressOption, texOptions, texOptions.Length); ImGui.Combo("Mipmaps", ref mipmapOption, mipmapOptions, mipmapOptions.Length); + ImGui.Checkbox("Flip Vertically", ref texFlip); ImGui.Checkbox("High Quality (slow)", ref compressSlow); if (ImGui.Button("Import")) { @@ -125,11 +127,11 @@ void TexImportDialog(PopupData data) break; } if (mipm == MipmapMethod.None && format == DDSFormat.Uncompressed) - texImportData = TextureImport.TGANoMipmap(teximportpath); + texImportData = TextureImport.TGANoMipmap(teximportpath, texFlip); else if (format == DDSFormat.Uncompressed) - texImportChildren = TextureImport.TGAMipmaps(teximportpath, mipm); + texImportChildren = TextureImport.TGAMipmaps(teximportpath, mipm, texFlip); else - texImportData = TextureImport.CreateDDS(teximportpath, format, mipm, compressSlow); + texImportData = TextureImport.CreateDDS(teximportpath, format, mipm, compressSlow, texFlip); texImportWaiting = false; }).Start(); }