You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
Resize converts Pow22 to sRGB because it can not output Pow22 #preflight 62bb22ef101ad5bf64ae7b2b #rb fabian.giesen [CL 20864029 by charles bloom in ue5-main branch]
94 lines
2.7 KiB
C++
94 lines
2.7 KiB
C++
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
#include "TextureBuildUtilities.h"
|
|
#include "Misc/DataDrivenPlatformInfoRegistry.h"
|
|
|
|
|
|
namespace UE
|
|
{
|
|
namespace TextureBuildUtilities
|
|
{
|
|
|
|
// Return true if texture format name is HDR
|
|
TEXTUREBUILDUTILITIES_API bool TextureFormatIsHdr(FName const& InName)
|
|
{
|
|
// TextureFormatRemovePrefixFromName first !
|
|
|
|
static FName NameRGBA16F(TEXT("RGBA16F"));
|
|
static FName NameRGBA32F(TEXT("RGBA32F"));
|
|
static FName NameR16F(TEXT("R16F"));
|
|
static FName NameR32F(TEXT("R32F"));
|
|
static FName NameBC6H(TEXT("BC6H"));
|
|
|
|
if ( InName == NameRGBA16F ) return true;
|
|
if ( InName == NameRGBA32F ) return true;
|
|
if ( InName == NameR16F ) return true;
|
|
if ( InName == NameR32F ) return true;
|
|
if ( InName == NameBC6H ) return true;
|
|
|
|
return false;
|
|
}
|
|
|
|
TEXTUREBUILDUTILITIES_API const FName TextureFormatRemovePrefixFromName(FName const& InName, FName& OutPrefix)
|
|
{
|
|
FString NameString = InName.ToString();
|
|
|
|
// Format names may have one of the following forms:
|
|
// - PLATFORM_PREFIX_FORMAT
|
|
// - PLATFORM_FORMAT
|
|
// - PREFIX_FORMAT
|
|
// - FORMAT
|
|
// We have to remove the platform prefix first, if it exists.
|
|
// Then we detect a non-platform prefix (such as codec name)
|
|
// and split the result into explicit FORMAT and PREFIX parts.
|
|
|
|
for (FName PlatformName : FDataDrivenPlatformInfoRegistry::GetSortedPlatformNames(EPlatformInfoType::AllPlatformInfos))
|
|
{
|
|
FString PlatformTextureFormatPrefix = PlatformName.ToString();
|
|
PlatformTextureFormatPrefix += TEXT('_');
|
|
if (NameString.StartsWith(PlatformTextureFormatPrefix, ESearchCase::IgnoreCase))
|
|
{
|
|
// Remove platform prefix and proceed with non-platform prefix detection.
|
|
NameString = NameString.RightChop(PlatformTextureFormatPrefix.Len());
|
|
break;
|
|
}
|
|
}
|
|
|
|
int32 UnderscoreIndex = INDEX_NONE;
|
|
if (NameString.FindChar(TCHAR('_'), UnderscoreIndex))
|
|
{
|
|
// Non-platform prefix, we want to keep these
|
|
OutPrefix = *NameString.Left(UnderscoreIndex + 1);
|
|
return *NameString.RightChop(UnderscoreIndex + 1);
|
|
}
|
|
|
|
return *NameString;
|
|
}
|
|
|
|
|
|
TEXTUREBUILDUTILITIES_API ERawImageFormat::Type GetVirtualTextureBuildIntermediateFormat(const FTextureBuildSettings& BuildSettings)
|
|
{
|
|
const FName TextureFormatName = TextureFormatRemovePrefixFromName(BuildSettings.TextureFormatName);
|
|
|
|
// note: using RGBA16F when the Source is HDR but the output is not HDR is not needed
|
|
// you could use BGRA8 intermediate in that case
|
|
// but it's rare and not a big problem, so leave it alone for now
|
|
|
|
const bool bIsHdr = BuildSettings.bHDRSource || TextureFormatIsHdr(TextureFormatName);
|
|
|
|
if (bIsHdr)
|
|
{
|
|
return ERawImageFormat::RGBA16F;
|
|
}
|
|
else if ( TextureFormatName == "G16" )
|
|
{
|
|
return ERawImageFormat::G16;
|
|
}
|
|
else
|
|
{
|
|
return ERawImageFormat::BGRA8;
|
|
}
|
|
}
|
|
|
|
} // namespace
|
|
} |