108 lines
3.3 KiB
C++
108 lines
3.3 KiB
C++
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
#include "ASTCCompressionSettings.h"
|
|
#include "PlatformInfo.h"
|
|
|
|
int32 GetASTCCompressionMaxSize(EASTCCompressionMaxSize MaxSize)
|
|
{
|
|
int32 Size = 256;
|
|
for (int i = 0, Count = MaxSize; i < Count; ++i)
|
|
Size *= 2;
|
|
return Size;
|
|
}
|
|
|
|
UASTCCompressionSettings::UASTCCompressionSettings(const FObjectInitializer& ObjectInitializer)
|
|
: Super(ObjectInitializer)
|
|
{
|
|
}
|
|
|
|
TEnumAsByte<TextureGroup> UASTCCompressionSettings::ASTCGroups[] =
|
|
{
|
|
TEXTUREGROUP_World,
|
|
TEXTUREGROUP_WorldNormalMap,
|
|
TEXTUREGROUP_WorldEmission,
|
|
TEXTUREGROUP_WorldMixed,
|
|
TEXTUREGROUP_WorldMask,
|
|
TEXTUREGROUP_WorldOther,
|
|
TEXTUREGROUP_Character,
|
|
TEXTUREGROUP_CharacterNormalMap,
|
|
TEXTUREGROUP_CharacterEmission,
|
|
TEXTUREGROUP_CharacterMixed,
|
|
TEXTUREGROUP_CharacterMask,
|
|
TEXTUREGROUP_CharacterOther,
|
|
TEXTUREGROUP_Weapon,
|
|
TEXTUREGROUP_WeaponNormalMap,
|
|
TEXTUREGROUP_WeaponEmission,
|
|
TEXTUREGROUP_WeaponMixed,
|
|
TEXTUREGROUP_WeaponMask,
|
|
TEXTUREGROUP_WeaponOther,
|
|
TEXTUREGROUP_Cinematic,
|
|
TEXTUREGROUP_Effects,
|
|
TEXTUREGROUP_UI,
|
|
TEXTUREGROUP_Other};
|
|
|
|
int UASTCCompressionSettings::ASTCGroupNums = sizeof(ASTCGroups) / sizeof(ASTCGroups[0]);
|
|
|
|
UASTCCompressionSettings* UASTCCompressionSettings::ASTCCompressionSettingsSingleton = nullptr;
|
|
|
|
UASTCCompressionSettings* UASTCCompressionSettings::GetSingleton()
|
|
{
|
|
if (ASTCCompressionSettingsSingleton == nullptr)
|
|
{
|
|
ASTCCompressionSettingsSingleton = NewObject<UASTCCompressionSettings>();
|
|
ASTCCompressionSettingsSingleton->AddToRoot();
|
|
}
|
|
return ASTCCompressionSettingsSingleton;
|
|
}
|
|
|
|
FASTCCompressionItem UASTCCompressionSettings::GetASTCCompressionItem(TextureGroup Group)
|
|
{
|
|
TArray<FASTCCompressionItem>& Groups = GetSingleton()->ASTCCompressionGroups;
|
|
int Pos = (int)GetCookLevel() * ASTCGroupNums;
|
|
|
|
for (int i = Pos; i < Groups.Num(); ++i)
|
|
{
|
|
if (Groups[i].CookLevel == GetCookLevel() && Groups[i].Group == Group)
|
|
return Groups[i];
|
|
}
|
|
|
|
for (int i = 0; i < Groups.Num(); ++i)
|
|
{
|
|
if (Groups[i].CookLevel == GetCookLevel() && Groups[i].Group == Group)
|
|
return Groups[i];
|
|
}
|
|
|
|
return FASTCCompressionItem();
|
|
}
|
|
|
|
EASTCCookLevel UASTCCompressionSettings::CookLevel = EASTCCookLevel::ASTCCL_MAX;
|
|
|
|
FString UASTCCompressionSettings::CookLevelStr = FString();
|
|
|
|
void UASTCCompressionSettings::SetCookLevel(EASTCCookLevel InCookLevel)
|
|
{
|
|
static UEnum* CookLevelEnum = StaticEnum<EASTCCookLevel>();
|
|
CookLevel = InCookLevel;
|
|
CookLevelStr = CookLevelEnum->GetMetaData(TEXT("DisplayName"), (int)CookLevel);
|
|
}
|
|
|
|
EASTCCookLevel UASTCCompressionSettings::GetCookLevel()
|
|
{
|
|
if (CookLevel == EASTCCookLevel::ASTCCL_MAX)
|
|
{
|
|
UCookerSettings* CookerSettings = NewObject<UCookerSettings>();
|
|
SetCookLevel(EASTCCookLevel(CookerSettings->ASTCCookLevel));
|
|
}
|
|
return CookLevel;
|
|
}
|
|
|
|
FString UASTCCompressionSettings::GetCookLevelStr()
|
|
{
|
|
if (CookLevelStr == FString())
|
|
{
|
|
UCookerSettings const* CookerSettings = GetDefault<UCookerSettings>();
|
|
SetCookLevel(EASTCCookLevel(CookerSettings->ASTCCookLevel));
|
|
}
|
|
return CookLevelStr;
|
|
}
|