// 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 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(); ASTCCompressionSettingsSingleton->AddToRoot(); } return ASTCCompressionSettingsSingleton; } FASTCCompressionItem UASTCCompressionSettings::GetASTCCompressionItem(TextureGroup Group) { TArray& 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(); CookLevel = InCookLevel; CookLevelStr = CookLevelEnum->GetMetaData(TEXT("DisplayName"), (int)CookLevel); } EASTCCookLevel UASTCCompressionSettings::GetCookLevel() { if (CookLevel == EASTCCookLevel::ASTCCL_MAX) { UCookerSettings* CookerSettings = NewObject(); SetCookLevel(EASTCCookLevel(CookerSettings->ASTCCookLevel)); } return CookLevel; } FString UASTCCompressionSettings::GetCookLevelStr() { if (CookLevelStr == FString()) { UCookerSettings const* CookerSettings = GetDefault(); SetCookLevel(EASTCCookLevel(CookerSettings->ASTCCookLevel)); } return CookLevelStr; }