EM_Task/UnrealEd/Private/ASTCCompressionSettings.cpp
Boshuang Zhao 5144a49c9b add
2026-02-13 16:18:33 +08:00

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