Merge branch 'fix-recons-z' of https://github.com/Tryibion/FlaxEngine into Tryibion-fix-recons-z
This commit is contained in:
@@ -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;
|
||||
@@ -727,8 +727,10 @@ bool TextureTool::ImportTextureDirectXTex(ImageType type, const StringView& path
|
||||
}
|
||||
|
||||
bool keepAsIs = false;
|
||||
if (!options.FlipY &&
|
||||
!options.InvertGreenChannel &&
|
||||
if (!options.FlipY &&
|
||||
!options.FlipX &&
|
||||
!options.InvertGreenChannel &&
|
||||
!options.ReconstructZChannel &&
|
||||
options.Compress &&
|
||||
type == ImageType::DDS &&
|
||||
mipLevels == sourceMipLevels &&
|
||||
@@ -787,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();
|
||||
@@ -801,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<uint32>(result));
|
||||
return true;
|
||||
}
|
||||
SET_CURRENT_IMG(tmpImg);
|
||||
}
|
||||
|
||||
// Check if invert green channel
|
||||
if (!keepAsIs && options.InvertGreenChannel)
|
||||
{
|
||||
@@ -833,7 +849,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 +871,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))
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -82,6 +85,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);
|
||||
|
||||
@@ -136,9 +142,11 @@ 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);
|
||||
KeepAspectRatio = JsonTools::GetBool(stream, "KeepAspectRatio", KeepAspectRatio);
|
||||
PreserveAlphaCoverage = JsonTools::GetBool(stream, "PreserveAlphaCoverage", PreserveAlphaCoverage);
|
||||
PreserveAlphaCoverageReference = JsonTools::GetFloat(stream, "PreserveAlphaCoverageReference", PreserveAlphaCoverageReference);
|
||||
TextureGroup = JsonTools::GetInt(stream, "TextureGroup", TextureGroup);
|
||||
|
||||
@@ -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.
|
||||
@@ -77,6 +81,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;
|
||||
|
||||
Reference in New Issue
Block a user