Small fix for Reconstructing Z Channel and add keeping aspect ration when resizing.

This commit is contained in:
Chandler Cox
2024-10-04 19:21:15 -05:00
parent 631ff14fc1
commit 2a5de178fa
3 changed files with 13 additions and 4 deletions

View File

@@ -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<float>(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))

View File

@@ -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);

View File

@@ -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;