Files
UnrealEngine/Engine/Source/Developer/Android/AndroidTargetPlatformSettings/Public/AndroidTargetPlatformSettings.h
2025-05-18 13:04:45 +08:00

227 lines
7.0 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "Common/TargetPlatformSettingsBase.h"
#include "Android/AndroidPlatformProperties.h"
#include "Misc/ConfigCacheIni.h"
#include "Misc/MonitoredProcess.h"
#include "Containers/Ticker.h"
#if WITH_ENGINE
#include "StaticMeshResources.h"
#endif // WITH_ENGINE
/** Listed in order of priority...if device supports multiple formats, first format in list will be chosen */
enum class EAndroidTextureFormatCategory
{
DXT,
ETC2,
ASTC,
Count,
};
namespace AndroidTexFormat
{
// Compressed Texture Formats
const static FName NameDXT1(TEXT("DXT1"));
const static FName NameDXT5(TEXT("DXT5"));
const static FName NameDXT5n(TEXT("DXT5n"));
const static FName NameAutoDXT(TEXT("AutoDXT"));
const static FName NameBC4(TEXT("BC4"));
const static FName NameBC5(TEXT("BC5"));
const static FName NameBC6H(TEXT("BC6H"));
const static FName NameBC7(TEXT("BC7"));
const static FName NameETC2_RGB(TEXT("ETC2_RGB"));
const static FName NameETC2_RGBA(TEXT("ETC2_RGBA"));
const static FName NameETC2_R11(TEXT("ETC2_R11"));
const static FName NameETC2_RG11(TEXT("ETC2_RG11"));
const static FName NameAutoETC2(TEXT("AutoETC2"));
const static FName NameAutoASTC(TEXT("ASTC_RGBAuto"));
const static FName NameASTC_NormalRG(TEXT("ASTC_NormalRG"));
// L+A mode suppoprted by ARM ASTC encoder
const static FName NameASTC_NormalLA(TEXT("ASTC_NormalLA"));
// Uncompressed Texture Formats
const static FName NameBGRA8(TEXT("BGRA8"));
const static FName NameG8(TEXT("G8"));
const static FName NameRGBA16F(TEXT("RGBA16F"));
const static FName NameR16F(TEXT("R16F"));
const static FName NameG16(TEXT("G16"));
//A1RGB555 is mapped to RGB555A1, because OpenGL GL_RGB5_A1 only supports alpha on the lowest bit
const static FName NameA1RGB555(TEXT("A1RGB555"));
const static FName NameRGB555A1(TEXT("RGB555A1"));
const static FName GenericRemap[][2] =
{
{ NameA1RGB555, NameRGB555A1 },
{ NameG16, NameR16F }, // GLES does not support R16Unorm, fallback all Android to R16F
};
static const FName NameASTC_RGB_HDR(TEXT("ASTC_RGB_HDR"));
static const FName NameASTC_RGB_LDR(TEXT("ASTC_RGB"));
const static FName ASTCRemap[][2] =
{
// Default format: ASTC format:
{ NameDXT1, FName(TEXT("ASTC_RGB")) },
{ NameDXT5, FName(TEXT("ASTC_RGBA")) },
{ NameDXT5n, FName(TEXT("ASTC_NormalAG"))},
{ NameBC5, NameASTC_NormalRG },
{ NameBC4, NameETC2_R11 },
{ NameBC6H, NameASTC_RGB_HDR },
{ NameBC7, FName(TEXT("ASTC_RGBA_HQ")) },
{ NameAutoDXT, NameAutoASTC },
};
const static FName ETCRemap[][2] =
{
// Default format: ETC2 format:
{ NameDXT1, NameETC2_RGB },
{ NameDXT5, NameETC2_RGBA },
{ NameDXT5n, NameETC2_RGB },
{ NameBC5, NameETC2_RG11 },
{ NameBC4, NameETC2_R11 },
{ NameBC6H, NameRGBA16F },
{ NameBC7, NameETC2_RGBA },
{ NameAutoDXT, NameAutoETC2 },
};
}
class FAndroidTargetPlatformSettings : public TTargetPlatformSettingsBase<FAndroidPlatformProperties>
{
public:
ANDROIDTARGETPLATFORMSETTINGS_API FAndroidTargetPlatformSettings(const TCHAR* CookFlavor = nullptr, const TCHAR* OverrideIniPlatformName = nullptr);
/**
* Destructor
*/
virtual ~FAndroidTargetPlatformSettings(){}
virtual bool SupportsTextureFormatCategory(EAndroidTextureFormatCategory Category) const
{
return true;
}
ANDROIDTARGETPLATFORMSETTINGS_API virtual bool SupportsFeature(ETargetPlatformFeatures Feature) const override;
ANDROIDTARGETPLATFORMSETTINGS_API virtual void GetAllPossibleShaderFormats(TArray<FName>& OutFormats) const override;
ANDROIDTARGETPLATFORMSETTINGS_API virtual void GetAllTargetedShaderFormats(TArray<FName>& OutFormats) const override;
virtual bool UsesRayTracing() const override
{
bool bEnableRayTracing = false;
GConfig->GetBool(TEXT("/Script/AndroidRuntimeSettings.AndroidRuntimeSettings"), TEXT("bEnableRayTracing"), bEnableRayTracing, GEngineIni);
return bEnableRayTracing;
}
#if WITH_ENGINE
ANDROIDTARGETPLATFORMSETTINGS_API virtual void GetReflectionCaptureFormats(TArray<FName>& OutFormats) const override;
ANDROIDTARGETPLATFORMSETTINGS_API virtual const UTextureLODSettings& GetTextureLODSettings() const override;
virtual void RegisterTextureLODSettings(const UTextureLODSettings* InTextureLODSettings) override
{
TextureLODSettings = InTextureLODSettings;
}
ANDROIDTARGETPLATFORMSETTINGS_API virtual const class FStaticMeshLODSettings& GetStaticMeshLODSettings() const override;
#endif
// query for rendering mode support
ANDROIDTARGETPLATFORMSETTINGS_API bool SupportsES31() const;
ANDROIDTARGETPLATFORMSETTINGS_API bool SupportsVulkan() const;
ANDROIDTARGETPLATFORMSETTINGS_API bool SupportsVulkanSM5() const;
protected:
// r.Mobile.ShadingPath value
int32 MobileShadingPath;
// true if DistanceField is enabled
bool bDistanceField;
// r.Mobile.Forward.EnableClusteredReflections value
bool bMobileForwardEnableClusteredReflections;
#if WITH_ENGINE
// Holds a cache of the target LOD settings.
const UTextureLODSettings* TextureLODSettings;
// Holds the static mesh LOD settings.
FStaticMeshLODSettings StaticMeshLODSettings;
#endif
};
class FAndroid_DXTTargetPlatformSettings : public FAndroidTargetPlatformSettings
{
public:
FAndroid_DXTTargetPlatformSettings() : FAndroidTargetPlatformSettings(TEXT("DXT"))
{
}
virtual bool SupportsTextureFormatCategory(EAndroidTextureFormatCategory Category) const override
{
return Category == EAndroidTextureFormatCategory::DXT;
}
};
class FAndroid_ASTCTargetPlatformSettings : public FAndroidTargetPlatformSettings
{
public:
FAndroid_ASTCTargetPlatformSettings(const TCHAR* Name=TEXT("ASTC")) : FAndroidTargetPlatformSettings(Name)
{
}
virtual bool SupportsTextureFormatCategory(EAndroidTextureFormatCategory Category) const override
{
return Category == EAndroidTextureFormatCategory::ASTC;
}
};
class FAndroid_ETC2TargetPlatformSettings : public FAndroidTargetPlatformSettings
{
public:
FAndroid_ETC2TargetPlatformSettings() : FAndroidTargetPlatformSettings(TEXT("ETC2"))
{
}
virtual bool SupportsTextureFormatCategory(EAndroidTextureFormatCategory Category) const override
{
return Category == EAndroidTextureFormatCategory::ETC2;
}
};
class FAndroid_MultiTargetPlatformSettings : public FAndroidTargetPlatformSettings
{
public:
FAndroid_MultiTargetPlatformSettings() : FAndroidTargetPlatformSettings(TEXT("Multi"))
{
}
bool SupportsFeature(ETargetPlatformFeatures Feature) const override
{
//FAndroid_MultiTargetPlatformControls::GetTextureFormats() replaces NormalLA for NormalRG
//So we disable the feature support to ensure shaders rebuild the blue channel correctly (See: LA_NORMALMAPS)
if (Feature == ETargetPlatformFeatures::NormalmapLAEncodingMode)
{
return false;
}
return FAndroidTargetPlatformSettings::SupportsFeature(Feature);
}
};
class FAndroid_OpenXRTargetPlatformSettings : public FAndroid_ASTCTargetPlatformSettings
{
public:
FAndroid_OpenXRTargetPlatformSettings() : FAndroid_ASTCTargetPlatformSettings(TEXT("OpenXR"))
{
}
};