2022-05-23 18:41:30 +00:00
// Copyright Epic Games, Inc. All Rights Reserved.
# pragma once
2022-09-13 07:18:28 +00:00
# include "Containers/Array.h"
# include "Containers/Set.h"
# include "Containers/UnrealString.h"
2022-05-23 18:41:30 +00:00
# include "Engine/DeveloperSettingsBackedByCVars.h"
2022-09-13 07:18:28 +00:00
# include "Engine/PlatformSettings.h"
2022-05-23 18:41:30 +00:00
# include "GameplayTagContainer.h"
2022-09-13 07:18:28 +00:00
# include "HAL/Platform.h"
# include "Internationalization/Text.h"
# include "Performance/LyraPerformanceStatTypes.h"
# include "UObject/UObjectGlobals.h"
2022-05-23 18:41:30 +00:00
# include "LyraPerformanceSettings.generated.h"
2022-09-13 07:18:28 +00:00
class UObject ;
2022-05-23 18:41:30 +00:00
// Describes one platform-specific device profile variant that the user can choose from in the UI
USTRUCT ( )
struct FLyraQualityDeviceProfileVariant
{
GENERATED_BODY ( )
// The display name for this device profile variant (visible in the options screen)
UPROPERTY ( EditAnywhere )
FText DisplayName ;
// The suffix to append to the base device profile name for the current platform
UPROPERTY ( EditAnywhere )
FString DeviceProfileSuffix ;
// The minimum required refresh rate to enable this mode
// (e.g., if this is set to 120 Hz and the device is connected
// to a 60 Hz display, it won't be available)
UPROPERTY ( EditAnywhere )
int32 MinRefreshRate = 0 ;
} ;
// Describes a set of performance stats that the user can enable in settings,
// predicated on passing a visibility query on platform traits
USTRUCT ( )
struct FLyraPerformanceStatGroup
{
GENERATED_BODY ( )
// A query on platform traits to determine whether or not it will be possible
// to show a set of stats
UPROPERTY ( EditAnywhere , meta = ( Categories = " Input,Platform.Trait " ) )
FGameplayTagQuery VisibilityQuery ;
// The set of stats to allow if the query passes
UPROPERTY ( EditAnywhere )
TSet < ELyraDisplayablePerformanceStat > AllowedStats ;
} ;
// How hare frame pacing and overall graphics settings controlled/exposed for the platform?
UENUM ( )
enum class ELyraFramePacingMode : uint8
{
// Manual frame rate limits, user is allowed to choose whether or not to lock to vsync
DesktopStyle ,
// Limits handled by choosing present intervals driven by device profiles
ConsoleStyle ,
// Limits handled by a user-facing choice of frame rate from among ones allowed by device profiles for the specific device
MobileStyle
} ;
UCLASS ( config = Game , defaultconfig )
class ULyraPlatformSpecificRenderingSettings : public UPlatformSettings
{
GENERATED_BODY ( )
public :
ULyraPlatformSpecificRenderingSettings ( ) ;
// Helper method to get the performance settings object, directed via platform settings
static const ULyraPlatformSpecificRenderingSettings * Get ( ) ;
public :
// The default variant suffix to append, should typically be a member of
// UserFacingDeviceProfileOptions unless there is only one for the current platform
//
// Note that this will usually be set from platform-specific ini files, not via the UI
UPROPERTY ( EditAnywhere , Config , Category = DeviceProfiles )
FString DefaultDeviceProfileSuffix ;
// The list of device profile variations to allow users to choose from in settings
//
// These should be sorted from slowest to fastest by target frame rate:
// If the current display doesn't support a user chosen refresh rate, we'll try
// previous entries until we find one that works
//
// Note that this will usually be set from platform-specific ini files, not via the UI
UPROPERTY ( EditAnywhere , Config , Category = DeviceProfiles )
TArray < FLyraQualityDeviceProfileVariant > UserFacingDeviceProfileOptions ;
// Does the platform support granular video quality settings?
UPROPERTY ( EditAnywhere , Config , Category = VideoSettings )
bool bSupportsGranularVideoQualitySettings = true ;
// Does the platform support running the automatic quality benchmark (typically this should only be true if bSupportsGranularVideoQualitySettings is also true)
UPROPERTY ( EditAnywhere , Config , Category = VideoSettings )
bool bSupportsAutomaticVideoQualityBenchmark = true ;
// How is frame pacing controlled
UPROPERTY ( EditAnywhere , Config , Category = VideoSettings )
ELyraFramePacingMode FramePacingMode = ELyraFramePacingMode : : DesktopStyle ;
// Potential frame rates to display for mobile
// Note: This is further limited by Lyra.DeviceProfile.Mobile.MaxFrameRate from the
// platform-specific device profile and what the platform frame pacer reports as supported
UPROPERTY ( EditAnywhere , Config , Category = VideoSettings , meta = ( EditCondition = " FramePacingMode==ELyraFramePacingMode::MobileStyle " , ForceUnits = Hz ) )
TArray < int32 > MobileFrameRateLimits ;
} ;
//////////////////////////////////////////////////////////////////////
/**
* Project - specific performance profile settings .
*/
UCLASS ( config = Game , defaultconfig , meta = ( DisplayName = " Lyra Performance Settings " ) )
class ULyraPerformanceSettings : public UDeveloperSettingsBackedByCVars
{
GENERATED_BODY ( )
public :
ULyraPerformanceSettings ( ) ;
private :
// This is a special helper to expose the per-platform settings so they can be edited in the project settings
// It never needs to be directly accessed
UPROPERTY ( EditAnywhere , Category = " PlatformSpecific " )
FPerPlatformSettings PerPlatformSettings ;
public :
// The list of frame rates to allow users to choose from in the various
// "frame rate limit" video settings on desktop platforms
UPROPERTY ( EditAnywhere , Config , Category = Performance , meta = ( ForceUnits = Hz ) )
TArray < int32 > DesktopFrameRateLimits ;
// The list of performance stats that can be enabled in Options by the user
UPROPERTY ( EditAnywhere , Config , Category = Stats )
TArray < FLyraPerformanceStatGroup > UserFacingPerformanceStats ;
} ;