From 305d3a64966ea7dba4e83f7d5a9bb1fb91c67389 Mon Sep 17 00:00:00 2001 From: Chandler Cox Date: Fri, 4 Oct 2024 19:31:55 -0500 Subject: [PATCH] Add FlipX to texture tool. --- .../TextureTool/TextureTool.DirectXTex.cpp | 19 +++++++++++++++++-- .../Engine/Tools/TextureTool/TextureTool.cpp | 4 ++++ Source/Engine/Tools/TextureTool/TextureTool.h | 10 +++++++--- 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/Source/Engine/Tools/TextureTool/TextureTool.DirectXTex.cpp b/Source/Engine/Tools/TextureTool/TextureTool.DirectXTex.cpp index aa1e5fece..dc2b20778 100644 --- a/Source/Engine/Tools/TextureTool/TextureTool.DirectXTex.cpp +++ b/Source/Engine/Tools/TextureTool/TextureTool.DirectXTex.cpp @@ -727,7 +727,8 @@ bool TextureTool::ImportTextureDirectXTex(ImageType type, const StringView& path } bool keepAsIs = false; - if (!options.FlipY && + if (!options.FlipY && + !options.FlipX && !options.InvertGreenChannel && !options.ReconstructZChannel && options.Compress && @@ -788,7 +789,7 @@ bool TextureTool::ImportTextureDirectXTex(ImageType type, const StringView& path SET_CURRENT_IMG(tmpImg); } - // Check flip/rotate source image + // Check flip/rotate Y source image if (!keepAsIs && options.FlipY) { auto& tmpImg = GET_TMP_IMG(); @@ -802,6 +803,20 @@ bool TextureTool::ImportTextureDirectXTex(ImageType type, const StringView& path SET_CURRENT_IMG(tmpImg); } + // Check flip/rotate X source image + if (!keepAsIs && options.FlipX) + { + auto& tmpImg = GET_TMP_IMG(); + DirectX::TEX_FR_FLAGS flags = DirectX::TEX_FR_FLIP_HORIZONTAL; + result = FlipRotate(currentImage->GetImages(), currentImage->GetImageCount(), currentImage->GetMetadata(), flags, tmpImg); + if (FAILED(result)) + { + errorMsg = String::Format(TEXT("Cannot rotate/flip texture, error: {0:x}"), static_cast(result)); + return true; + } + SET_CURRENT_IMG(tmpImg); + } + // Check if invert green channel if (!keepAsIs && options.InvertGreenChannel) { diff --git a/Source/Engine/Tools/TextureTool/TextureTool.cpp b/Source/Engine/Tools/TextureTool/TextureTool.cpp index 34be2c9fb..550e26699 100644 --- a/Source/Engine/Tools/TextureTool/TextureTool.cpp +++ b/Source/Engine/Tools/TextureTool/TextureTool.cpp @@ -73,6 +73,9 @@ void TextureTool::Options::Serialize(SerializeStream& stream, const void* otherO stream.JKEY("FlipY"); stream.Bool(FlipY); + stream.JKEY("FlipX"); + stream.Bool(FlipX); + stream.JKEY("InvertGreenChannel"); stream.Bool(InvertGreenChannel); @@ -139,6 +142,7 @@ void TextureTool::Options::Deserialize(DeserializeStream& stream, ISerializeModi sRGB = JsonTools::GetBool(stream, "sRGB", sRGB); GenerateMipMaps = JsonTools::GetBool(stream, "GenerateMipMaps", GenerateMipMaps); FlipY = JsonTools::GetBool(stream, "FlipY", FlipY); + FlipX = JsonTools::GetBool(stream, "FlipX", FlipX); InvertGreenChannel = JsonTools::GetBool(stream, "InvertGreenChannel", InvertGreenChannel); ReconstructZChannel = JsonTools::GetBool(stream, "ReconstructZChannel", ReconstructZChannel); Resize = JsonTools::GetBool(stream, "Resize", Resize); diff --git a/Source/Engine/Tools/TextureTool/TextureTool.h b/Source/Engine/Tools/TextureTool/TextureTool.h index 494618c60..13bac0dc5 100644 --- a/Source/Engine/Tools/TextureTool/TextureTool.h +++ b/Source/Engine/Tools/TextureTool/TextureTool.h @@ -53,16 +53,20 @@ API_CLASS(Namespace="FlaxEngine.Tools", Static) class FLAXENGINE_API TextureTool API_FIELD(Attributes="EditorOrder(60)") bool GenerateMipMaps = true; - // True if flip Y coordinate of the texture. + // True if flip Y coordinate of the texture (Flips over X axis). API_FIELD(Attributes="EditorOrder(70)") bool FlipY = false; + // True if flip X coordinate of the texture (Flips over Y axis). + API_FIELD(Attributes="EditorOrder(71)") + bool FlipX = false; + // True if to invert the green channel on a normal map. Good for OpenGL to DirectX conversion. - API_FIELD(Attributes = "EditorOrder(71)") + API_FIELD(Attributes = "EditorOrder(72)") bool InvertGreenChannel = false; // Rebuild Z (blue) channel assuming X/Y are normals. - API_FIELD(Attributes = "EditorOrder(72)") + API_FIELD(Attributes = "EditorOrder(73)") bool ReconstructZChannel = false; // Texture size scale. Allows increasing or decreasing the imported texture resolution. Default is 1.