Files
UnrealEngine/Engine/Source/Runtime/IOS/IOSRuntimeSettings/Classes/IOSRuntimeSettings.h
2025-05-18 13:04:45 +08:00

626 lines
30 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "UObject/ObjectMacros.h"
#include "UObject/Object.h"
#include "UObject/Class.h"
#include "UObject/PropertyPortFlags.h"
#include "AudioCompressionSettings.h"
#include "IOSRuntimeSettings.generated.h"
UENUM()
enum class EPowerUsageFrameRateLock : uint8
{
/** Frame rate is not limited. */
PUFRL_None = 0 UMETA(DisplayName="None"),
/** Frame rate is limited to a maximum of 20 frames per second. */
PUFRL_20 = 20 UMETA(DisplayName="20 FPS"),
/** Frame rate is limited to a maximum of 30 frames per second. */
PUFRL_30 = 30 UMETA(DisplayName="30 FPS"),
/** Frame rate is limited to a maximum of 60 frames per second. */
PUFRL_60 = 60 UMETA(DisplayName="60 FPS"),
};
UENUM()
enum class EIOSVersion : uint8
{
IOS_Minimum = 15 UMETA(DisplayName = "Minimum, Currently 15.0"),
IOS_15 = 15 UMETA(DisplayName = "15.0"),
IOS_16 = 16 UMETA(DisplayName = "16.0"),
IOS_17 = 17 UMETA(DisplayName = "17.0"),
};
// https://support.apple.com/en-ca/HT205073
UENUM()
enum class EIOSMetalShaderStandard : uint8
{
/** Metal Shader 2.4 is the minimum as of UE5.3*/
IOSMetalSLStandard_Minimum = 0 UMETA(DisplayName="Minimum, Metal v2.4"),
/** Metal Shaders Compatible With iOS 16.0/tvOS 16.0 or later (std=metal2.4) */
IOSMetalSLStandard_2_4 = 7 UMETA(DisplayName="Metal v2.4 (iOS 15.0/tvOS 15.0 for older devices)"),
/** Metal Shaders Compatible With iOS 16.0/tvOS 16.0 or later (std=metal3.0) */
IOSMetalSLStandard_3_0 = 8 UMETA(DisplayName="Metal v3.0 (iOS 16.0/tvOS 16.0)"),
/** Metal Shaders Compatible With iOS 17.0/tvOS 17.0 or later (std=metal3.1) */
IOSMetalSLStandard_3_1 = 9 UMETA(DisplayName="Metal v3.1 (iOS 17.0/tvOS 17.0)"),
};
UENUM()
enum class EIOSLandscapeOrientation : uint8
{
/** Landscape Left */
LandscapeLeft = 0 UMETA(DisplayName = "Landscape (left home button)"),
/** Landscape Right */
LandscapeRight = 1 UMETA(DisplayName = "Landscape (right home button)"),
};
UENUM()
enum class EIOSCloudKitSyncStrategy : uint8
{
/** Only at game start */
None = 0 UMETA(DisplayName = "Never (do not use iCloud for Load/Save Game)"),
/** Only at game start */
OnlyAtGameStart = 1 UMETA(DisplayName = "At game start only (iOS)"),
/** Always */
Always = 2 UMETA(DisplayName = "Always (whenever LoadGame is called)"),
};
/**
* IOS Build resource file struct, used to serialize filepaths to the configs for use in the build system,
*/
USTRUCT()
struct FIOSBuildResourceFilePath
{
GENERATED_USTRUCT_BODY()
/**
* Custom export item used to serialize FIOSBuildResourceFilePath types as only a filename, no garland.
*/
bool ExportTextItem(FString& ValueStr, FIOSBuildResourceFilePath const& DefaultValue, UObject* Parent, int32 PortFlags, UObject* ExportRootScope) const
{
ValueStr += FilePath;
return true;
}
/**
* Custom import item used to parse ini entries straight into the filename.
*/
bool ImportTextItem(const TCHAR*& Buffer, int32 PortFlags, UObject* Parent, FOutputDevice* ErrorText)
{
FilePath = Buffer;
return true;
}
/**
* The path to the file.
*/
UPROPERTY(EditAnywhere, Category = FilePath)
FString FilePath;
};
/**
* Setup our resource filepath to make it easier to parse in UBT
*/
template<>
struct TStructOpsTypeTraits<FIOSBuildResourceFilePath> : public TStructOpsTypeTraitsBase2<FIOSBuildResourceFilePath>
{
enum
{
WithExportTextItem = true,
WithImportTextItem = true,
};
};
/**
* IOS Build resource file struct, used to serialize Directorys to the configs for use in the build system,
*/
USTRUCT()
struct FIOSBuildResourceDirectory
{
GENERATED_USTRUCT_BODY()
/**
* Custom export item used to serialize FIOSBuildResourceDirectory types as only a filename, no garland.
*/
bool ExportTextItem(FString& ValueStr, FIOSBuildResourceDirectory const& DefaultValue, UObject* Parent, int32 PortFlags, UObject* ExportRootScope) const
{
ValueStr += Path;
return true;
}
/**
* Custom import item used to parse ini entries straight into the filename.
*/
bool ImportTextItem(const TCHAR*& Buffer, int32 PortFlags, UObject* Parent, FOutputDevice* ErrorText)
{
Path = Buffer;
return true;
}
/**
* The path to the file.
*/
UPROPERTY(EditAnywhere, Category = Directory)
FString Path;
};
/**
* Setup our resource Directory to make it easier to parse in UBT
*/
template<>
struct TStructOpsTypeTraits<FIOSBuildResourceDirectory> : public TStructOpsTypeTraitsBase2<FIOSBuildResourceDirectory>
{
enum
{
WithExportTextItem = true,
WithImportTextItem = true,
};
};
/**
* Implements the settings for the iOS target platform.
*/
UCLASS(config=Engine, defaultconfig)
class IOSRUNTIMESETTINGS_API UIOSRuntimeSettings : public UObject
{
public:
GENERATED_UCLASS_BODY()
// Should StoreKit support be enabled?
UPROPERTY(GlobalConfig, EditAnywhere, Category = Online, meta = (ConfigHierarchyEditable))
bool bEnableStoreKitSupport;
// Should Game Center support (iOS Online Subsystem) be enabled?
UPROPERTY(GlobalConfig, EditAnywhere, Category = Online, meta = (ConfigHierarchyEditable))
bool bEnableGameCenterSupport;
// Should Cloud Kit support (iOS Online Subsystem) be enabled?
UPROPERTY(GlobalConfig, EditAnywhere, Category = Online)
bool bEnableCloudKitSupport;
// iCloud Read stategy
UPROPERTY(GlobalConfig, EditAnywhere, Category = Online, meta = (DisplayName = "iCloud save files sync strategy"), meta = (EditCondition = "bEnableCloudKitSupport"))
EIOSCloudKitSyncStrategy IOSCloudKitSyncStrategy;
// Should push/remote notifications support (iOS Online Subsystem) be enabled?
UPROPERTY(GlobalConfig, EditAnywhere, Category = Online)
bool bEnableRemoteNotificationsSupport;
// Should background fetch support be enabled?
UPROPERTY(GlobalConfig, EditAnywhere, Category = Online)
bool bEnableBackgroundFetch;
// Whether or not to compile iOS Metal shaders for the Mobile renderer (requires iOS 8+ and an A7 processor).
UPROPERTY(GlobalConfig, EditAnywhere, Category = Rendering, meta = (DisplayName = "Metal Mobile Renderer"))
bool bSupportsMetal;
// Whether or not to compile iOS Metal shaders for the desktop renderer (requires iOS 10+ and an A10 processor)
UPROPERTY(GlobalConfig, EditAnywhere, Category = Rendering, meta = (DisplayName = "Metal Desktop Renderer"))
bool bSupportsMetalMRT;
// Should the app be compatible for high refresh rate (iPhone only)
UPROPERTY(GlobalConfig, EditAnywhere, Category = Rendering, meta = (DisplayName = "Enable ProMotion 120Hz on supported iPhone devices"))
bool bSupportHighRefreshRates;
/** Whether to enable LOD streaming for landscape visual meshes. Requires Metal support. */
UPROPERTY(GlobalConfig, EditAnywhere, Category = Rendering, Meta = (DisplayName = "Stream landscape visual mesh LODs"))
bool bStreamLandscapeMeshLODs;
// Minimum iOS version this game supports
UPROPERTY(GlobalConfig, EditAnywhere, Category = Build, meta = (DisplayName = "Minimum iOS Version"))
EIOSVersion MinimumiOSVersion;
UPROPERTY(GlobalConfig, EditAnywhere, Category = Build, meta = (DisplayName = "Override location of Metal toolchain"))
FIOSBuildResourceDirectory WindowsMetalToolchainOverride;
// Enable generation of dSYM file
UPROPERTY(GlobalConfig, EditAnywhere, Category = Build, meta = (DisplayName = "Generate dSYMs for code debugging and profiling"))
bool bGeneratedSYMFile;
// Enable generation of dSYM bundle
UPROPERTY(GlobalConfig, EditAnywhere, Category = Build, meta = (DisplayName = "Generate dSYMs as a bundle for third party crash tools"), meta = (EditCondition = "bGeneratedSYMFile"))
bool bGeneratedSYMBundle;
// Enable generation of a .udebugsymbols file, which allows offline, platform-independent symbolication for the Malloc Profiler or external crash reporting tools. Requires a dSYM file or bundle.
UPROPERTY(GlobalConfig, EditAnywhere, Category = Build, meta = (DisplayName = "Generate .udebugsymbols file"))
bool bGenerateCrashReportSymbols;
// Enable generation of xcode archive package
UPROPERTY(GlobalConfig, EditAnywhere, Category = Build, meta = (DisplayName = "Generate xcode archive package"))
bool bGenerateXCArchive;
// Does the app require use of NON-standard encryption
UPROPERTY(GlobalConfig, EditAnywhere, Category = Build, meta = (DisplayName = "ITSAppUsesNonExemptEncryption plist value"))
bool bUsesNonExemptEncryption;
// If bUsesNonExemptEncryption, set the ITSEncryptionExportComplianceCode
UPROPERTY(GlobalConfig, EditAnywhere, Category = Build, meta = (EditCondition = "bUsesNonExemptEncryption", DisplayName = "Set ITSEncryptionExportComplianceCode"))
FString ITSEncryptionExportComplianceCode;
// Enable Advertising Identified
UPROPERTY(GlobalConfig, EditAnywhere, Category = Build, meta = (DisplayName = "Enable Advertising Identified (IDFA)"))
bool bEnableAdvertisingIdentifier;
// Any additional linker flags to pass to the linker in non-shipping builds
UPROPERTY(GlobalConfig, EditAnywhere, Category = Build, meta = (DisplayName = "Additional Non-Shipping Linker Flags", ConfigHierarchyEditable))
FString AdditionalLinkerFlags;
// Any additional linker flags to pass to the linker in shipping builds
UPROPERTY(GlobalConfig, EditAnywhere, Category = Build, meta = (DisplayName = "Additional Shipping Linker Flags", ConfigHierarchyEditable))
FString AdditionalShippingLinkerFlags;
// Any additional plist key/value data utilizing \n for a new line
UPROPERTY(GlobalConfig, EditAnywhere, Category = Build)
FString AdditionalPlistData;
// List of any entitlements we require. The app will not initialize if the specified entitlements are not available.
UPROPERTY(GlobalConfig, EditAnywhere, Category = Build)
TArray<FString> RequiredEntitlements;
// Whether or not to add support for iPad devices
UPROPERTY(GlobalConfig, EditAnywhere, Category = Build, meta = (DisplayName = "Supports iPad"))
bool bSupportsIPad;
// Whether or not to add support for iPhone devices
UPROPERTY(GlobalConfig, EditAnywhere, Category = Build, meta = (DisplayName = "Supports iPhone"))
bool bSupportsIPhone;
// Whether or not the iPad app supports Split View (also needed for StageManager support)
UPROPERTY(GlobalConfig, EditAnywhere, Category = Build, meta = (DisplayName = "Enable iPad Split View"))
bool bEnableSplitView;
// Whether or not iOS Simulator support should be enabled for this project (Experimental)
UPROPERTY(GlobalConfig, EditAnywhere, Category = Build, meta = (DisplayName = "Enable iOS Simulator Support (Experimental)", ConfigRestartRequired = true))
bool bEnableSimulatorSupport;
// Whether or not to enable iOS 16 dynamic linker bug workaround (bug fixed in iOS 17+, not necesssary if targetting 17.0 or higher Minimum iOS Version)
UPROPERTY(GlobalConfig, EditAnywhere, Category = Build, meta = (DisplayName = "Enable iOS 16 Dynamic Linker Bug Workaround (Experimental)"))
bool bEnableIOS16DynLinkerBugWAR;
/** Set the maximum frame rate to save on power consumption */
UPROPERTY(GlobalConfig, EditAnywhere, Category = PowerUsage, meta = (ConfigHierarchyEditable))
EPowerUsageFrameRateLock FrameRateLock;
//Whether or not to allow taking the MaxRefreshRate from the device instead of a constant (60fps) in IOSPlatformFramePacer
UPROPERTY(GlobalConfig, EditAnywhere, Category = PowerUsage, meta = (ConfigHierarchyEditable))
bool bEnableDynamicMaxFPS;
// Enable the use of RSync for remote builds on a mac
UPROPERTY(GlobalConfig, EditAnywhere, Category = "Remote Build", meta = (DisplayName = "Use RSync for building IOS", ConfigHierarchyEditable))
bool bUseRSync;
// The name or ip address of the remote mac which will be used to build IOS
UPROPERTY(GlobalConfig, EditAnywhere, Category = "Remote Build", meta = (ConfigHierarchyEditable))
FString RemoteServerName;
// The mac users name which matches the SSH Private Key, for remote builds using RSync.
UPROPERTY(GlobalConfig, EditAnywhere, Category = "Remote Build", meta = (EditCondition = "bUseRSync", DisplayName = "Username on Remote Server", ConfigHierarchyEditable))
FString RSyncUsername;
// Optional path on the remote mac where the build files will be copied. If blank, ~/UE5/Builds will be used.
UPROPERTY(GlobalConfig, EditAnywhere, Category = "Remote Build", meta = (ConfigHierarchyEditable))
FString RemoteServerOverrideBuildPath;
// The install directory of cwrsync.
UPROPERTY(GlobalConfig, EditAnywhere, Category = "Remote Build", meta = (EditCondition = "bUseRSync", ConfigHierarchyEditable))
FIOSBuildResourceDirectory CwRsyncInstallPath;
// The existing location of an SSH Key found by Unreal Engine.
UPROPERTY(VisibleAnywhere, Category = "Remote Build", meta = (DisplayName = "Found Existing SSH permissions file"))
FString SSHPrivateKeyLocation;
// The path of the ssh permissions key to be used when connecting to the remote server.
UPROPERTY(GlobalConfig, EditAnywhere, Category = "Remote Build", meta = (EditCondition = "bUseRSync", DisplayName = "Override existing SSH permissions file", ConfigHierarchyEditable))
FIOSBuildResourceFilePath SSHPrivateKeyOverridePath;
// Support a secondary remote Mac to support to facilitate iOS/tvOS debug ?
UPROPERTY(GlobalConfig, EditAnywhere, Category = "Remote Build", meta = (DisplayName = "Enable Secondary remote Mac"))
bool bSupportSecondaryMac;
// The name or ip address of the remote mac which will be used to build IOS
UPROPERTY(GlobalConfig, EditAnywhere, Category = "Remote Build", meta = (EditCondition = "bSupportSecondaryMac", ConfigHierarchyEditable))
FString SecondaryRemoteServerName;
// The secondary mac users name which matches the SSH Private Key, for remote builds using RSync.
UPROPERTY(GlobalConfig, EditAnywhere, Category = "Remote Build", meta = (EditCondition = "bSupportSecondaryMac", DisplayName = "Username on Secondary Remote Server", ConfigHierarchyEditable))
FString SecondaryRSyncUsername;
// Optional path on the secondary remote mac where the build files will be copied. If blank, ~/UE5/Builds will be used.
UPROPERTY(GlobalConfig, EditAnywhere, Category = "Remote Build", meta = (EditCondition = "bSupportSecondaryMac", ConfigHierarchyEditable))
FString SecondaryRemoteServerOverrideBuildPath;
// The install directory of cwrsync.
UPROPERTY(GlobalConfig, EditAnywhere, Category = "Remote Build", meta = (EditCondition = "bSupportSecondaryMac", ConfigHierarchyEditable))
FIOSBuildResourceDirectory SecondaryCwRsyncInstallPath;
// The existing location of an SSH Key found by Unreal Engine.
UPROPERTY(VisibleAnywhere, Category = "Remote Build", meta = (EditCondition = "bSupportSecondaryMac", DisplayName = "Found Existing SSH permissions file for Secondary Mac"))
FString SecondarySSHPrivateKeyLocation;
// The path of the ssh permissions key to be used when connecting to the remote server.
UPROPERTY(GlobalConfig, EditAnywhere, Category = "Remote Build", meta = (EditCondition = "bSupportSecondaryMac", DisplayName = "Override existing SSH permissions file for Secondary Mac", ConfigHierarchyEditable))
FIOSBuildResourceFilePath SecondarySSHPrivateKeyOverridePath;
// Should the app be multi-users compatible on tvOS ? Requires the com.apple.developer.user-management entitlement.
UPROPERTY(GlobalConfig, EditAnywhere, Category = "Build", meta = (DisplayName = "Support user switching on tvOS"))
bool bUserSwitching;
// If checked, the game will be able to handle multiple gamepads at the same time (the Siri Remote is a gamepad)
UPROPERTY(GlobalConfig, EditAnywhere, Category = Input, meta = (DisplayName = "Multiple gamepads support"))
bool bGameSupportsMultipleActiveControllers;
// If checked, the Siri Remote can be rotated to landscape view
UPROPERTY(GlobalConfig, EditAnywhere, Category = Input, meta = (DisplayName = "Allow AppleTV Remote landscape mode"))
bool bAllowRemoteRotation;
// If checked, Bluetooth connected controllers will send input
UPROPERTY(GlobalConfig, EditAnywhere, Category = Input, meta = (DisplayName = "Allow MFi (Bluetooth) controllers"))
bool bAllowControllers;
// Block force feedback on the device when controllers are attached.
UPROPERTY(GlobalConfig, EditAnywhere, Category = Input, meta = (DisplayName = "Block force feedback on the device when controllers are attached"))
bool bControllersBlockDeviceFeedback;
// Disables usage of device motion data. If application does not use motion data disabling it will improve battery life
UPROPERTY(GlobalConfig, EditAnywhere, Category = Input, meta = (DisplayName = "Disable Motion Controls"))
bool bDisableMotionData;
// Supports default portrait orientation. Landscape will not be supported.
UPROPERTY(GlobalConfig, EditAnywhere, Category = DeviceOrientations)
uint32 bSupportsPortraitOrientation : 1;
// Supports upside down portrait orientation. Landscape will not be supported.
UPROPERTY(GlobalConfig, EditAnywhere, Category = DeviceOrientations)
uint32 bSupportsUpsideDownOrientation : 1;
// Supports left landscape orientation. Portrait will not be supported.
UPROPERTY(GlobalConfig, EditAnywhere, Category = DeviceOrientations)
uint32 bSupportsLandscapeLeftOrientation : 1;
// Supports right landscape orientation. Portrait will not be supported.
UPROPERTY(GlobalConfig, EditAnywhere, Category = DeviceOrientations)
uint32 bSupportsLandscapeRightOrientation : 1;
// Whether files created by the app will be accessible from the iTunes File Sharing feature
UPROPERTY(GlobalConfig, EditAnywhere, Category = FileSystem, meta = (DisplayName = "Support iTunes File Sharing"))
uint32 bSupportsITunesFileSharing : 1;
// Whether files created by the app will be accessible from within the device's Files app (requires iTunes File Sharing)
UPROPERTY(GlobalConfig, EditAnywhere, Category = FileSystem, meta = (DisplayName = "Support Files App", EditCondition = "bSupportsITunesFileSharing"))
uint32 bSupportsFilesApp : 1;
// The Preferred Orientation will be used as the initial orientation at launch when both Landscape Left and Landscape Right orientations are to be supported.
UPROPERTY(GlobalConfig, EditAnywhere, Category = DeviceOrientations, meta = (DisplayName = "Preferred Landscape Orientation"))
EIOSLandscapeOrientation PreferredLandscapeOrientation;
// Specifies the the display name for the application. This will be displayed under the icon on the device.
UPROPERTY(GlobalConfig, EditAnywhere, Category = BundleInformation)
FString BundleDisplayName;
// Specifies the the name of the application bundle. This is the short name for the application bundle.
UPROPERTY(GlobalConfig, EditAnywhere, Category = BundleInformation)
FString BundleName;
// Specifies the bundle identifier for the application.
UPROPERTY(GlobalConfig, EditAnywhere, Category = BundleInformation)
FString BundleIdentifier;
// Specifies the version for the application.
UPROPERTY(GlobalConfig, EditAnywhere, Category = BundleInformation)
FString VersionInfo;
/**
* Choose whether to use a custom LaunchScreen.Storyboard as a Launchscreen. To use this option, create a storyboard in Xcode and
* copy it named LaunchScreen.storyboard in Build/IOS/Resources/Interface under your Project folder. This will be compiled and
* copied to the bundle app and the Launch screen image above will not be included in the app.
* When using assets in your custom LaunchScreen.storyboard, add them in Build/IOS/Resources/Interface/Assets and they will be included.
*/
UPROPERTY(GlobalConfig, EditAnywhere, Category = LaunchScreen, meta = (DisplayName = "Custom Launchscreen Storyboard (experimental)", EditCondition = "!MacTargetPlatform.XcodeProjectSettings.ShouldDisableIOSSettings"))
bool bCustomLaunchscreenStoryboard;
// Whether the app supports Facebook
UPROPERTY(GlobalConfig, EditAnywhere, Category = Online)
bool bEnableFacebookSupport;
// Facebook App ID obtained from Facebook's Developer Centre
UPROPERTY(GlobalConfig, EditAnywhere, Category = Online, meta = (EditCondition = "bEnableFacebookSupport"))
FString FacebookAppID;
// Mobile provision to utilize when signing.
// This value is stripped out when making builds.
UPROPERTY(GlobalConfig, EditAnywhere, Category = Build)
FString MobileProvision;
// Signing certificate to utilize when signing.
// This value is stripped out when making builds.
UPROPERTY(GlobalConfig, EditAnywhere, Category = Build)
FString SigningCertificate;
// Whether to use automatic signing through Xcode
UPROPERTY(GlobalConfig, EditAnywhere, Category = Build, meta = (EditCondition = "!MacTargetPlatform.XcodeProjectSettings.ShouldDisableIOSSettings"))
bool bAutomaticSigning;
// The team ID of the apple developer account to be used to autmatically sign IOS builds.
// This can be overridden in Turnkey with "RunUAT Turnkey -command=ManageSettings"
// This value is stripped out when making builds.
UPROPERTY(GlobalConfig, EditAnywhere, Category = Build, meta = (ConfigHierarchyEditable))
FString IOSTeamID;
// The username/email to use when logging in to DevCenter with Turnkey.
// This can be overridden in Turnkey with "RunUAT Turnkey -command=ManageSettings"
// This value is stripped out when making builds.
UPROPERTY(GlobalConfig, EditAnywhere, Category = Build, meta = (ConfigHierarchyEditable))
FString DevCenterUsername;
// The password to use when logging in to DevCenter with Turnkey. NOTE: This is saved in plaintext, and is meant for shared accounts!
// This value is stripped out when making builds.
UPROPERTY(GlobalConfig, EditAnywhere, Category = Build, meta = (ConfigHierarchyEditable))
FString DevCenterPassword;
// Whether the app supports HTTPS
UPROPERTY(GlobalConfig, EditAnywhere, Category = Online, meta = (DisplayName = "Allow web connections to non-HTTPS websites"))
bool bDisableHTTPS;
// The Metal shader language version which will be used when compiling the shaders.
UPROPERTY(EditAnywhere, config, Category=Rendering, meta = (DisplayName = "Metal Shader Standard To Target", ConfigRestartRequired = true))
uint8 MetalLanguageVersion;
/**
* Whether to use the Metal shading language's "fast" intrinsics.
* Fast intrinsics assume that no NaN or INF value will be provided as input,
* so are more efficient. However, they will produce undefined results if NaN/INF
* is present in the argument/s.
*/
UPROPERTY(EditAnywhere, config, Category=Rendering, meta = (DisplayName = "Use Fast-Math intrinsics", ConfigRestartRequired = true))
bool UseFastIntrinsics;
/**
* Whether to force Metal shaders to use 32bit floating point precision even when the shader uses half floats.
* Half floats are much more efficient when they are availble but have less accuracy over large ranges,
* as such some projects may need to use 32bit floats to ensure correct rendering.
*/
UPROPERTY(EditAnywhere, config, Category=Rendering, meta = (DisplayName = "Force 32bit Floating Point Precision", ConfigRestartRequired = true))
bool ForceFloats;
/**
* Whether to use of Metal shader-compiler's -ffast-math optimisations.
* Fast-Math performs algebraic-equivalent & reassociative optimisations not permitted by the floating point arithmetic standard (IEEE-754).
* These can improve shader performance at some cost to precision and can lead to NaN/INF propagation as they rely on
* shader inputs or variables not containing NaN/INF values. By default fast-math is enabled for performance.
*/
UPROPERTY(EditAnywhere, config, Category=Rendering, meta = (DisplayName = "Enable Fast-Math optimisations", ConfigRestartRequired = true))
bool EnableMathOptimisations;
/** Whether to compile shaders using a tier Indirect Argument Buffers. */
UPROPERTY(config, EditAnywhere, Category = Rendering, Meta = (DisplayName = "Tier of Indirect Argument Buffers to use when compiling shaders", ConfigRestartRequired = true))
int32 IndirectArgumentTier;
/** Supports Apple A8 devices.
* Disables 3d texture compression
* Virtual Textures are not supported on A8 devices due to missing hardware features
* This will disable also Base_Vertex semantics in the msl which may have negative consequences if shaders rely on it
*/
UPROPERTY(config, EditAnywhere, Category = Rendering, Meta = (DisplayName = "Support Apple A8", ConfigRestartRequired = true))
bool bSupportAppleA8;
// Whether or not the keyboard should be usable on it's own without a UITextField
UPROPERTY(GlobalConfig, EditAnywhere, Category = Input)
bool bUseIntegratedKeyboard;
// Whether or not we should receive the keyboard's visibility event (Shown/Hidden) regardless of the IntegratedKeyboard being activated or not.
UPROPERTY(GlobalConfig, EditAnywhere, Category = Input)
bool bEnableVirtualKeyboardVisibilityEvent;
// Whether or not the EditableText Widget is allowed to enable IntegratedKeyboard. bUseIntegratedKeyboard enabled will disregard this setting.
UPROPERTY(GlobalConfig, EditAnywhere, Meta=(EditCondition = "!bUseIntegratedKeyboard"), Category = Input)
bool bAllowWidgetEnablingIntegratedKeyboard;
/** Sample rate to run the audio mixer with. */
UPROPERTY(config, EditAnywhere, Category = "Audio", Meta = (DisplayName = "Audio Mixer Sample Rate"))
int32 AudioSampleRate;
/** The amount of audio to compute each callback block. Lower values decrease latency but may increase CPU cost. */
UPROPERTY(config, EditAnywhere, Category = "Audio", meta = (ClampMin = "512", ClampMax = "4096", DisplayName = "Callback Buffer Size"))
int32 AudioCallbackBufferFrameSize;
/** The number of buffers to keep enqueued. More buffers increases latency, but can compensate for variable compute availability in audio callbacks on some platforms. */
UPROPERTY(config, EditAnywhere, Category = "Audio", meta = (ClampMin = "1", UIMin = "1", DisplayName = "Number of Buffers To Enqueue"))
int32 AudioNumBuffersToEnqueue;
/** The max number of channels (voices) to limit for this platform. The max channels used will be the minimum of this value and the global audio quality settings. A value of 0 will not apply a platform channel count max. */
UPROPERTY(config, EditAnywhere, Category = "Audio", meta = (ClampMin = "0", UIMin = "0", DisplayName = "Max Channels"))
int32 AudioMaxChannels;
/** The number of workers to use to compute source audio. Will only use up to the max number of sources. Will evenly divide sources to each source worker. */
UPROPERTY(config, EditAnywhere, Category = "Audio", meta = (ClampMin = "0", UIMin = "0", DisplayName = "Number of Source Workers"))
int32 AudioNumSourceWorkers;
/** Which of the currently enabled spatialization plugins to use. */
UPROPERTY(config, EditAnywhere, Category = "Audio")
FString SpatializationPlugin;
/** Which of the currently enabled source data override plugins to use. */
UPROPERTY(config, EditAnywhere, Category = "Audio")
FString SourceDataOverridePlugin;
/** Which of the currently enabled reverb plugins to use. */
UPROPERTY(config, EditAnywhere, Category = "Audio")
FString ReverbPlugin;
/** Which of the currently enabled occlusion plugins to use. */
UPROPERTY(config, EditAnywhere, Category = "Audio")
FString OcclusionPlugin;
/** Various overrides for how this platform should handle compression and decompression */
UPROPERTY(config, EditAnywhere, Category = "Audio")
FPlatformRuntimeAudioCompressionOverrides CompressionOverrides;
/** Whether this app's audio can be played when using other apps or on the springboard */
UPROPERTY(config, EditAnywhere, Category = "Audio", meta = (DisplayName = "Enable Background Audio"))
bool bSupportsBackgroundAudio;
/** This determines the max amount of memory that should be used for the cache at any given time. If set low (<= 8 MB), it lowers the size of individual chunks of audio during cook. */
UPROPERTY(GlobalConfig, EditAnywhere, Category = "Audio|CookOverrides|Stream Caching", meta = (DisplayName = "Max Cache Size (KB)"))
int32 CacheSizeKB;
/** This overrides the default max chunk size used when chunking audio for stream caching (ignored if < 0) */
UPROPERTY(GlobalConfig, EditAnywhere, Category = "Audio|CookOverrides|Stream Caching", meta = (DisplayName = "Max Chunk Size Override (KB)"))
int32 MaxChunkSizeOverrideKB;
UPROPERTY(config, EditAnywhere, Category = "Audio|CookOverrides")
bool bResampleForDevice;
/** Quality Level to COOK SoundCues at (if set, all other levels will be stripped by the cooker). */
UPROPERTY(GlobalConfig, EditAnywhere, Category = "Audio|CookOverrides", meta = (DisplayName = "Sound Cue Cook Quality"))
int32 SoundCueCookQualityIndex = INDEX_NONE;
// Mapping of which sample rates are used for each sample rate quality for a specific platform.
UPROPERTY(config, EditAnywhere, Category = "Audio|CookOverrides|ResamplingQuality", meta = (DisplayName = "Max"))
float MaxSampleRate;
UPROPERTY(config, EditAnywhere, Category = "Audio|CookOverrides|ResamplingQuality", meta = (DisplayName = "High"))
float HighSampleRate;
UPROPERTY(config, EditAnywhere, Category = "Audio|CookOverrides|ResamplingQuality", meta = (DisplayName = "Medium"))
float MedSampleRate;
UPROPERTY(config, EditAnywhere, Category = "Audio|CookOverrides|ResamplingQuality", meta = (DisplayName = "Low"))
float LowSampleRate;
UPROPERTY(config, EditAnywhere, Category = "Audio|CookOverrides|ResamplingQuality", meta = (DisplayName = "Min"))
float MinSampleRate;
// Scales all compression qualities when cooking to this platform. For example, 0.5 will halve all compression qualities, and 1.0 will leave them unchanged.
UPROPERTY(config, EditAnywhere, Category = "Audio|CookOverrides")
float CompressionQualityModifier;
// When set to anything beyond 0, this will ensure any SoundWaves longer than this value, in seconds, to stream directly off of the disk.
UPROPERTY(GlobalConfig)
float AutoStreamingThreshold;
virtual void PostReloadConfig(class FProperty* PropertyThatWasLoaded) override;
#if WITH_EDITOR
// UObject interface
virtual void PostEditChangeProperty(struct FPropertyChangedEvent& PropertyChangedEvent) override;
virtual void PostInitProperties() override;
// End of UObject interface
#endif
};