From 2a5de178faa134b40adb36e8d60d2f60192ed8ae Mon Sep 17 00:00:00 2001 From: Chandler Cox Date: Fri, 4 Oct 2024 19:21:15 -0500 Subject: [PATCH] Small fix for Reconstructing Z Channel and add keeping aspect ration when resizing. --- .../Engine/Tools/TextureTool/TextureTool.DirectXTex.cpp | 9 +++++---- Source/Engine/Tools/TextureTool/TextureTool.cpp | 4 ++++ Source/Engine/Tools/TextureTool/TextureTool.h | 4 ++++ 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/Source/Engine/Tools/TextureTool/TextureTool.DirectXTex.cpp b/Source/Engine/Tools/TextureTool/TextureTool.DirectXTex.cpp index e62d32842..aa1e5fece 100644 --- a/Source/Engine/Tools/TextureTool/TextureTool.DirectXTex.cpp +++ b/Source/Engine/Tools/TextureTool/TextureTool.DirectXTex.cpp @@ -661,7 +661,7 @@ bool TextureTool::ImportTextureDirectXTex(ImageType type, const StringView& path if (sourceWidth != width || sourceHeight != height) { // During resizing we need to keep texture aspect ratio - const bool keepAspectRatio = false; // TODO: expose as import option + const bool keepAspectRatio = options.KeepAspectRatio; if (keepAspectRatio) { const float aspectRatio = static_cast(sourceWidth) / sourceHeight; @@ -728,7 +728,8 @@ bool TextureTool::ImportTextureDirectXTex(ImageType type, const StringView& path bool keepAsIs = false; if (!options.FlipY && - !options.InvertGreenChannel && + !options.InvertGreenChannel && + !options.ReconstructZChannel && options.Compress && type == ImageType::DDS && mipLevels == sourceMipLevels && @@ -833,7 +834,7 @@ bool TextureTool::ImportTextureDirectXTex(ImageType type, const StringView& path if (!keepAsIs & options.ReconstructZChannel) { auto& timage = GET_TMP_IMG(); - bool isunorm = (DirectX::FormatDataType(currentImage->GetMetadata().format) == DirectX::FORMAT_TYPE_UNORM) != 0; + bool isunorm = (DirectX::FormatDataType(sourceDxgiFormat) == DirectX::FORMAT_TYPE_UNORM) != 0; result = TransformImage(currentImage->GetImages(), currentImage->GetImageCount(), currentImage->GetMetadata(), [&](DirectX::XMVECTOR* outPixels, const DirectX::XMVECTOR* inPixels, size_t w, size_t y) { @@ -855,7 +856,7 @@ bool TextureTool::ImportTextureDirectXTex(ImageType type, const StringView& path { z = DirectX::XMVectorSqrt(DirectX::XMVectorSubtract(DirectX::g_XMOne, DirectX::XMVector2Dot(value, value))); } - outPixels[j] = XMVectorSelect(value, z, s_selectz); + outPixels[j] = DirectX::XMVectorSelect(value, z, s_selectz); } }, timage); if (FAILED(result)) diff --git a/Source/Engine/Tools/TextureTool/TextureTool.cpp b/Source/Engine/Tools/TextureTool/TextureTool.cpp index 48df4cb31..34be2c9fb 100644 --- a/Source/Engine/Tools/TextureTool/TextureTool.cpp +++ b/Source/Engine/Tools/TextureTool/TextureTool.cpp @@ -82,6 +82,9 @@ void TextureTool::Options::Serialize(SerializeStream& stream, const void* otherO stream.JKEY("Resize"); stream.Bool(Resize); + stream.JKEY("KeepAspectRatio"); + stream.Bool(KeepAspectRatio); + stream.JKEY("PreserveAlphaCoverage"); stream.Bool(PreserveAlphaCoverage); @@ -139,6 +142,7 @@ void TextureTool::Options::Deserialize(DeserializeStream& stream, ISerializeModi InvertGreenChannel = JsonTools::GetBool(stream, "InvertGreenChannel", InvertGreenChannel); ReconstructZChannel = JsonTools::GetBool(stream, "ReconstructZChannel", ReconstructZChannel); Resize = JsonTools::GetBool(stream, "Resize", Resize); + KeepAspectRatio = JsonTools::GetBool(stream, "KeepAspectRatio", KeepAspectRatio); PreserveAlphaCoverage = JsonTools::GetBool(stream, "PreserveAlphaCoverage", PreserveAlphaCoverage); PreserveAlphaCoverageReference = JsonTools::GetFloat(stream, "PreserveAlphaCoverageReference", PreserveAlphaCoverageReference); TextureGroup = JsonTools::GetInt(stream, "TextureGroup", TextureGroup); diff --git a/Source/Engine/Tools/TextureTool/TextureTool.h b/Source/Engine/Tools/TextureTool/TextureTool.h index 3acf41eb9..494618c60 100644 --- a/Source/Engine/Tools/TextureTool/TextureTool.h +++ b/Source/Engine/Tools/TextureTool/TextureTool.h @@ -77,6 +77,10 @@ API_CLASS(Namespace="FlaxEngine.Tools", Static) class FLAXENGINE_API TextureTool API_FIELD(Attributes="EditorOrder(100)") bool Resize = false; + // Keeps the aspect ratio when resizing. + API_FIELD(Attributes="EditorOrder(101), VisibleIf(nameof(Resize))") + bool KeepAspectRatio = false; + // The width of the imported texture. If Resize property is set to true then texture will be resized during the import to this value during the import, otherwise it will be ignored. API_FIELD(Attributes="HideInEditor") int32 SizeX = 1024;