2019-12-26 15:32:37 -05:00
// Copyright Epic Games, Inc. All Rights Reserved.
2014-03-14 14:13:41 -04:00
Copying //UE4/Dev-Build to //UE4/Dev-Main (Source: //UE4/Dev-Build @ 3209340)
#lockdown Nick.Penwarden
#rb none
==========================
MAJOR FEATURES + CHANGES
==========================
Change 3209340 on 2016/11/23 by Ben.Marsh
Convert UE4 codebase to an "include what you use" model - where every header just includes the dependencies it needs, rather than every source file including large monolithic headers like Engine.h and UnrealEd.h.
Measured full rebuild times around 2x faster using XGE on Windows, and improvements of 25% or more for incremental builds and full rebuilds on most other platforms.
* Every header now includes everything it needs to compile.
* There's a CoreMinimal.h header that gets you a set of ubiquitous types from Core (eg. FString, FName, TArray, FVector, etc...). Most headers now include this first.
* There's a CoreTypes.h header that sets up primitive UE4 types and build macros (int32, PLATFORM_WIN64, etc...). All headers in Core include this first, as does CoreMinimal.h.
* Every .cpp file includes its matching .h file first.
* This helps validate that each header is including everything it needs to compile.
* No engine code includes a monolithic header such as Engine.h or UnrealEd.h any more.
* You will get a warning if you try to include one of these from the engine. They still exist for compatibility with game projects and do not produce warnings when included there.
* There have only been minor changes to our internal games down to accommodate these changes. The intent is for this to be as seamless as possible.
* No engine code explicitly includes a precompiled header any more.
* We still use PCHs, but they're force-included on the compiler command line by UnrealBuildTool instead. This lets us tune what they contain without breaking any existing include dependencies.
* PCHs are generated by a tool to get a statistical amount of coverage for the source files using it, and I've seeded the new shared PCHs to contain any header included by > 15% of source files.
Tool used to generate this transform is at Engine\Source\Programs\IncludeTool.
[CL 3209342 by Ben Marsh in Main branch]
2016-11-23 15:48:37 -05:00
# include "Profiles/LauncherProfileManager.h"
# include "HAL/FileManager.h"
# include "Misc/FileHelper.h"
# include "Misc/ConfigCacheIni.h"
# include "Serialization/JsonReader.h"
# include "Serialization/JsonSerializer.h"
# include "Launcher/LauncherProjectPath.h"
# include "Profiles/LauncherDeviceGroup.h"
# include "Profiles/LauncherProfile.h"
2014-03-14 14:13:41 -04:00
2020-04-16 03:34:22 -04:00
LAUNCHERSERVICES_API bool HasPromotedTarget ( const TCHAR * BaseDir , const TCHAR * TargetName , const TCHAR * Platform , EBuildConfiguration Configuration , const TCHAR * Architecture )
{
// Get the path to the receipt, and check it exists
2021-07-22 11:10:51 -04:00
const FString ReceiptPath = FTargetReceipt : : GetDefaultPath ( BaseDir , TargetName , Platform , Configuration , Architecture ) ;
if ( ! FPaths : : FileExists ( ReceiptPath ) )
2020-04-16 03:34:22 -04:00
{
UE_LOG ( LogLauncherProfile , Log , TEXT ( " Unable to use promoted target - %s does not exist. " ) , * ReceiptPath ) ;
return false ;
}
// Read the receipt for this target
FTargetReceipt Receipt ;
if ( ! Receipt . Read ( ReceiptPath ) )
{
UE_LOG ( LogLauncherProfile , Log , TEXT ( " Unable to use promoted target - cannot read %s " ) , * ReceiptPath ) ;
return false ;
}
// Check the receipt is for a promoted build
if ( ! Receipt . Version . IsPromotedBuild )
{
UE_LOG ( LogLauncherProfile , Log , TEXT ( " Unable to use promoted target - receipt %s is not for a promoted target " ) , * ReceiptPath ) ;
return false ;
}
// Make sure it matches the current build info
FEngineVersion ReceiptVersion = Receipt . Version . GetEngineVersion ( ) ;
FEngineVersion CurrentVersion = FEngineVersion : : Current ( ) ;
if ( ! ReceiptVersion . ExactMatch ( CurrentVersion ) )
{
UE_LOG ( LogLauncherProfile , Log , TEXT ( " Unable to use promoted target - receipt version (%s) is not exact match with current engine version (%s) " ) , * ReceiptVersion . ToString ( ) , * CurrentVersion . ToString ( ) ) ;
return false ;
}
// Print the matching target info
UE_LOG ( LogLauncherProfile , Log , TEXT ( " Found promoted target with matching version at %s " ) , * ReceiptPath ) ;
return true ;
}
2014-03-14 14:13:41 -04:00
/* ILauncherProfileManager structors
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2014-09-09 12:20:43 -04:00
FLauncherProfileManager : : FLauncherProfileManager ( )
{
}
/* ILauncherProfileManager interface
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void FLauncherProfileManager : : Load ( )
2014-03-14 14:13:41 -04:00
{
LoadDeviceGroups ( ) ;
LoadProfiles ( ) ;
}
void FLauncherProfileManager : : AddDeviceGroup ( const ILauncherDeviceGroupRef & DeviceGroup )
{
if ( ! DeviceGroups . Contains ( DeviceGroup ) )
{
// replace the existing device group
ILauncherDeviceGroupPtr ExistingGroup = GetDeviceGroup ( DeviceGroup - > GetId ( ) ) ;
if ( ExistingGroup . IsValid ( ) )
{
RemoveDeviceGroup ( ExistingGroup . ToSharedRef ( ) ) ;
}
// add the new device group
DeviceGroups . Add ( DeviceGroup ) ;
SaveDeviceGroups ( ) ;
DeviceGroupAddedDelegate . Broadcast ( DeviceGroup ) ;
}
}
ILauncherDeviceGroupRef FLauncherProfileManager : : AddNewDeviceGroup ( )
{
ILauncherDeviceGroupRef NewGroup = MakeShareable ( new FLauncherDeviceGroup ( FGuid : : NewGuid ( ) , FString : : Printf ( TEXT ( " New Group %d " ) , DeviceGroups . Num ( ) ) ) ) ;
AddDeviceGroup ( NewGroup ) ;
return NewGroup ;
}
2014-09-09 12:20:43 -04:00
ILauncherDeviceGroupRef FLauncherProfileManager : : CreateUnmanagedDeviceGroup ( )
{
ILauncherDeviceGroupRef NewGroup = MakeShareable ( new FLauncherDeviceGroup ( FGuid : : NewGuid ( ) , TEXT ( " Simple Group " ) ) ) ;
return NewGroup ;
}
ILauncherSimpleProfilePtr FLauncherProfileManager : : FindOrAddSimpleProfile ( const FString & DeviceName )
{
// replace the existing profile
ILauncherSimpleProfilePtr SimpleProfile = FindSimpleProfile ( DeviceName ) ;
if ( ! SimpleProfile . IsValid ( ) )
{
SimpleProfile = MakeShareable ( new FLauncherSimpleProfile ( DeviceName ) ) ;
SimpleProfiles . Add ( SimpleProfile ) ;
}
return SimpleProfile ;
}
ILauncherSimpleProfilePtr FLauncherProfileManager : : FindSimpleProfile ( const FString & DeviceName )
{
for ( int32 ProfileIndex = 0 ; ProfileIndex < SimpleProfiles . Num ( ) ; + + ProfileIndex )
{
ILauncherSimpleProfilePtr SimpleProfile = SimpleProfiles [ ProfileIndex ] ;
if ( SimpleProfile - > GetDeviceName ( ) = = DeviceName )
{
return SimpleProfile ;
}
}
return nullptr ;
}
ILauncherProfileRef FLauncherProfileManager : : AddNewProfile ( )
2014-03-14 14:13:41 -04:00
{
// find a unique name for the profile.
2014-09-09 12:20:43 -04:00
int32 ProfileIndex = SavedProfiles . Num ( ) ;
2014-03-14 14:13:41 -04:00
FString ProfileName = FString : : Printf ( TEXT ( " New Profile %d " ) , ProfileIndex ) ;
2014-09-09 12:20:43 -04:00
for ( int32 Index = 0 ; Index < SavedProfiles . Num ( ) ; + + Index )
2014-03-14 14:13:41 -04:00
{
2014-09-09 12:20:43 -04:00
if ( SavedProfiles [ Index ] - > GetName ( ) = = ProfileName )
2014-03-14 14:13:41 -04:00
{
ProfileName = FString : : Printf ( TEXT ( " New Profile %d " ) , + + ProfileIndex ) ;
Index = - 1 ;
continue ;
}
}
// create and add the profile
2014-09-09 12:20:43 -04:00
ILauncherProfileRef NewProfile = MakeShareable ( new FLauncherProfile ( AsShared ( ) , FGuid : : NewGuid ( ) , ProfileName ) ) ;
2014-03-14 14:13:41 -04:00
AddProfile ( NewProfile ) ;
2015-10-28 08:58:16 -04:00
SaveJSONProfile ( NewProfile ) ;
2014-09-09 12:20:43 -04:00
return NewProfile ;
}
ILauncherProfileRef FLauncherProfileManager : : CreateUnsavedProfile ( FString ProfileName )
{
// create and return the profile
ILauncherProfileRef NewProfile = MakeShareable ( new FLauncherProfile ( AsShared ( ) , FGuid ( ) , ProfileName ) ) ;
AllProfiles . Add ( NewProfile ) ;
2014-03-14 14:13:41 -04:00
return NewProfile ;
}
void FLauncherProfileManager : : AddProfile ( const ILauncherProfileRef & Profile )
{
2014-09-09 12:20:43 -04:00
if ( ! SavedProfiles . Contains ( Profile ) )
2014-03-14 14:13:41 -04:00
{
// replace the existing profile
ILauncherProfilePtr ExistingProfile = GetProfile ( Profile - > GetId ( ) ) ;
if ( ExistingProfile . IsValid ( ) )
{
RemoveProfile ( ExistingProfile . ToSharedRef ( ) ) ;
}
2014-09-09 12:20:43 -04:00
if ( ! Profile - > GetDeployedDeviceGroup ( ) . IsValid ( ) )
{
Profile - > SetDeployedDeviceGroup ( AddNewDeviceGroup ( ) ) ;
}
2014-03-14 14:13:41 -04:00
// add the new profile
2014-09-09 12:20:43 -04:00
SavedProfiles . Add ( Profile ) ;
AllProfiles . Add ( Profile ) ;
2014-03-14 14:13:41 -04:00
ProfileAddedDelegate . Broadcast ( Profile ) ;
}
}
ILauncherProfilePtr FLauncherProfileManager : : FindProfile ( const FString & ProfileName )
{
2014-09-09 12:20:43 -04:00
for ( int32 ProfileIndex = 0 ; ProfileIndex < SavedProfiles . Num ( ) ; + + ProfileIndex )
2014-03-14 14:13:41 -04:00
{
2014-09-09 12:20:43 -04:00
ILauncherProfilePtr Profile = SavedProfiles [ ProfileIndex ] ;
2014-03-14 14:13:41 -04:00
if ( Profile - > GetName ( ) = = ProfileName )
{
return Profile ;
}
}
2014-06-12 23:22:18 -04:00
return nullptr ;
2014-03-14 14:13:41 -04:00
}
const TArray < ILauncherDeviceGroupPtr > & FLauncherProfileManager : : GetAllDeviceGroups ( ) const
{
return DeviceGroups ;
}
const TArray < ILauncherProfilePtr > & FLauncherProfileManager : : GetAllProfiles ( ) const
{
2014-09-09 12:20:43 -04:00
return SavedProfiles ;
2014-03-14 14:13:41 -04:00
}
ILauncherDeviceGroupPtr FLauncherProfileManager : : GetDeviceGroup ( const FGuid & GroupId ) const
{
for ( int32 GroupIndex = 0 ; GroupIndex < DeviceGroups . Num ( ) ; + + GroupIndex )
{
const ILauncherDeviceGroupPtr & Group = DeviceGroups [ GroupIndex ] ;
if ( Group - > GetId ( ) = = GroupId )
{
return Group ;
}
}
2014-06-12 23:22:18 -04:00
return nullptr ;
2014-03-14 14:13:41 -04:00
}
ILauncherProfilePtr FLauncherProfileManager : : GetProfile ( const FGuid & ProfileId ) const
{
2014-09-09 12:20:43 -04:00
for ( int32 ProfileIndex = 0 ; ProfileIndex < SavedProfiles . Num ( ) ; + + ProfileIndex )
2014-03-14 14:13:41 -04:00
{
2014-09-09 12:20:43 -04:00
ILauncherProfilePtr Profile = SavedProfiles [ ProfileIndex ] ;
2014-03-14 14:13:41 -04:00
if ( Profile - > GetId ( ) = = ProfileId )
{
return Profile ;
}
}
2014-06-12 23:22:18 -04:00
return nullptr ;
2014-03-14 14:13:41 -04:00
}
ILauncherProfilePtr FLauncherProfileManager : : LoadProfile ( FArchive & Archive )
{
2014-09-09 12:20:43 -04:00
FLauncherProfile * Profile = new FLauncherProfile ( AsShared ( ) ) ;
2014-03-14 14:13:41 -04:00
if ( Profile - > Serialize ( Archive ) )
{
2014-09-09 12:20:43 -04:00
ILauncherDeviceGroupPtr DeviceGroup = GetDeviceGroup ( Profile - > GetDeployedDeviceGroupId ( ) ) ;
if ( ! DeviceGroup . IsValid ( ) )
{
DeviceGroup = AddNewDeviceGroup ( ) ;
}
Profile - > SetDeployedDeviceGroup ( DeviceGroup ) ;
2014-03-14 14:13:41 -04:00
return MakeShareable ( Profile ) ;
}
2014-06-12 23:22:18 -04:00
return nullptr ;
2014-03-14 14:13:41 -04:00
}
2015-10-28 08:58:16 -04:00
ILauncherProfilePtr FLauncherProfileManager : : LoadJSONProfile ( FString ProfileFile )
{
FString FileContents ;
if ( ! FFileHelper : : LoadFileToString ( FileContents , * ProfileFile ) )
{
return nullptr ;
}
TSharedPtr < FJsonObject > Object ;
TSharedRef < TJsonReader < > > Reader = TJsonReaderFactory < > : : Create ( FileContents ) ;
if ( ! FJsonSerializer : : Deserialize ( Reader , Object ) | | ! Object . IsValid ( ) )
{
return nullptr ;
}
Copying //UE4/Dev-Core to //UE4/Dev-Main (Source: //UE4/Dev-Core @ 3420477)
#lockdown Nick.Penwarden
#rb none
==========================
MAJOR FEATURES + CHANGES
==========================
Change 3386262 on 2017/04/10 by Ben.Marsh
Add app-local deployment of DirectX components that are no longer included with newer versions of Windows by default (XAudio 2.7, XInput 1.3). Also add a one-click button to the packaging settings to include the default app-local dependencies, rather than having to specify the path.
Change 3386999 on 2017/04/10 by Ben.Marsh
Plugins: Add support for explicit dependencies from one plugin onto another. Required plugins can be configured in an identical manner to project files, by adding a "Plugins" key to the .uplugin file. Dependencies are automatically built and loaded, and the plugin browser will warn if you try to disable a plugin that something else has a dependency on.
Change 3387073 on 2017/04/10 by Ben.Marsh
Move FLightPropagationRuntimeSettings into the Renderer module, to remove engine dependency on a plugin.
Change 3387988 on 2017/04/11 by Steve.Robb
Comments added to clarify the role of DestructItem and DestructItems.
Change 3388085 on 2017/04/11 by Ben.Marsh
UBT: Fix bEnabled flag on plugin references being ignored. Now collect up all the plugin references in order of priority before creating plugin instances for them. Fixes CIS fail for UT.
Change 3390048 on 2017/04/12 by Richard.Hinckley
#jira UE-43876
Fixed description of Streaming settings (within Project Settings).
Change 3390697 on 2017/04/12 by Steve.Robb
CLASS_PointersDefaultToAutoWeak and CLASS_PointersDefaultToWeak removed.
Change 3390711 on 2017/04/12 by Steve.Robb
AGRESSIVE_ARRAY_FORCEINLINE removed.
Change 3392167 on 2017/04/13 by Robert.Manuszewski
UObject can be added to GC cluster only if all of its Outers can also be added to it.
Fixing asserts caused by components that are added to GC clusters even if their owner actors that can't be in GC clusters.
#jira UE-42948
Change 3392309 on 2017/04/13 by Robert.Manuszewski
When adding objects to clusters after these clusters have been created it's possible to come across objects that are already in the cluster we're adding the object to so instead of crashing, allow it.
Change 3392620 on 2017/04/13 by Ben.Marsh
UGS: Only check for updates every 5 minutes.
Change 3392623 on 2017/04/13 by Ben.Marsh
UGS: Only poll for new changes every 60 seconds.
Change 3392744 on 2017/04/13 by Ben.Marsh
UGS: Query changelist descriptions individually to determine whether changes affect code or content, to hopefully reduce Perforce server load.
Change 3392874 on 2017/04/13 by Ben.Marsh
UGS: Allow specifying regexes in the project config file which filters which changes to be displayed. Useful for changes submitted by build machines, updates to collections, etc...
Change 3392878 on 2017/04/13 by Ben.Marsh
Update UGS to version 1.96
Change 3395635 on 2017/04/17 by Ben.Marsh
UAT: Prefix log output from executing UAT commands through BuildGraph with the name of that command.
Change 3395655 on 2017/04/17 by Ben.Marsh
UAT: Add a command for syncing a DDC over the network (SyncDDC). Allows specifying a maximum size to copy, number of days worth of modified files to copy, and time limit not to be exceeded.
Change 3396989 on 2017/04/17 by Wes.Hunt
CrashReporter configurable tweaks.
* Added QueueWaitingTimeAlertThreshold (used to be hardcoded to 1 min).
- When the queue waiting time gets beyond this many seconds, trigger a slack alert message. Default is 10 min.
- Zero means never alert.
* Added DiskSpaceAvailableAlertInterval (used to be hardcoded to 1 day).
- Interval by which to report disk space availability.
- Default is never (Zero)
* Updated config file to match production config.
#codereview:jin.zhang
Change 3397656 on 2017/04/18 by Ben.Marsh
UBT: Allow modules to opt-out of getting the default include paths from being added, by setting bAddDefaultIncludePaths = false from their build.cs file.
Change 3397677 on 2017/04/18 by Robert.Manuszewski
PR #3167 : Adding more descriptive error text to DetatchLinker error check (by rooneym)
Change 3397722 on 2017/04/18 by Robert.Manuszewski
PR #2252: Increase linker reporting for failed imports (Contributed by FineRedMist)
Change 3397739 on 2017/04/18 by Richard.Hinckley
#jira UE-44100
Fixed SanitizePackageName() to remove double-slash, triple-slash, etc. from package names. Also updated CreatePackage() to call SanitizePackageName() before creating.
Change 3398023 on 2017/04/18 by Ben.Marsh
PR #3105: Cook/package with editor and debugger attached (Contributed by projectgheist)
Change 3398095 on 2017/04/18 by Ben.Marsh
PR #3051: Generate map file from UAT (Contributed by projectgheist)
Change 3398212 on 2017/04/18 by Ben.Marsh
PR #2915: UE-38232: Removed duplicate stats (Contributed by projectgheist)
Change 3399304 on 2017/04/19 by Ben.Marsh
UGS: Prevent editor target files being removed when running custom tools.
Change 3399306 on 2017/04/19 by Robert.Manuszewski
Moved InitPropertiesFromCustomList to UbLueprintGeneratedClass and made it thread safe
Change 3399729 on 2017/04/19 by Steve.Robb
Simple optimization to TBitArray::RemoveAt() when all removed bits are at the end of the array.
RemoveAtSwap() now simply decrements the count instead of calling RemoveAt().
Checks for a positive count added to RemoveAt() and RemoveAtSwap().
Change 3399750 on 2017/04/19 by Jin.Zhang
Order branch alphabetically #RB
Change 3400186 on 2017/04/19 by Steve.Robb
Per-header generated code.
Change 3401458 on 2017/04/20 by Steve.Robb
Static log categories moved out of headers to prevent duplicates when the header is included multiple times.
#jira UE-37507
Change 3401657 on 2017/04/20 by Gil.Gribb
UE4 - Simplified and reworked lock free lists and the task graph bringing all platforms under the same scheme.
Change 3401735 on 2017/04/20 by Gil.Gribb
UE4 - Updated apple platform atomics with a new clang version which is intended to be shared among all clang platforms.
Change 3403362 on 2017/04/21 by Steve.Robb
Algo::Sort() fixed to support C arrays.
Size+count versions of Also::IsSorted() deprecated.
Algo::IsSortedBy() added.
Algo::FindBy() added to allow an element to be found by projection.
Simplifications and generalizations.
Change 3404017 on 2017/04/21 by Ben.Marsh
Fix issue where referenced plugin descriptors were missing from console builds, and prevent monolithic builds from offering to disable missing plugins.
Change 3405299 on 2017/04/24 by Steve.Robb
Clarified the class of the incompatible function in the error message about incompatible BP event specifiers.
#jira UE-35106
Change 3405302 on 2017/04/24 by Ben.Marsh
UBT: Allow excluding documentation from generated project files, by setting <ProjectFileGenerator><bIncludeDocumentation>false</bIncludeDocumentation></ProjectFileGenerator> in the XML configuration file.
Change 3405629 on 2017/04/24 by Ben.Marsh
Rename CPPEnvironment to CppCompileEnvironment, to reflect the class name.
Change 3406431 on 2017/04/24 by Ben.Marsh
UAT: Fix incorrect handling of P4SubmitOptions when multiple values are present.
Change 3406670 on 2017/04/24 by Ben.Marsh
UBT: Enable warnings for classes with virtual functions and no virtual destructor (C4265 on Windows, -fdelete-non-virtual-dtor on Clang).
Change 3407080 on 2017/04/25 by Gil.Gribb
UE4 - Critical fix: Propoerly disambiguate imports with the same name and the same outer name. This fixes an assert: LocalExportIndex.IsNull.
Change 3407486 on 2017/04/25 by Gil.Gribb
UE4 - Made changes so that servers, programs and non-engine executables do not create background or high priority threads.
Change 3407495 on 2017/04/25 by Gil.Gribb
UE4 - Tweaked out XBox and Windows low level file IO.
Change 3407497 on 2017/04/25 by Gil.Gribb
UE4 - Fixed bug in the pak precacher that would result in blocks being discarded too soon, which, in turn, resulted in redudnant reads.
Change 3407705 on 2017/04/25 by Ben.Marsh
Removing most of the junk in DotNETUtilities.
Change 3409701 on 2017/04/26 by Ben.Marsh
Disable another static analyzer warning for third party libraries.
Change 3410074 on 2017/04/26 by Daniel.Lamb
Network platform file runs heart beats and responds to modified file changes.
Cook on the fly server in the editor (COTS) now detects changes to content and notifies client.
Fixed issue with network platform file not using correct sandbox.
#test cook on the side shootergame
Change 3411131 on 2017/04/27 by Steve.Robb
TIsTriviallyDestructible now supports forward-declared enums.
Change 3411186 on 2017/04/27 by Steve.Robb
Fix for #includes in generated code for Within classes which are in a different module from the generated class.
Change 3411917 on 2017/04/27 by Steve.Robb
Fixes to pushing/popping the CPP macro.
Change 3411966 on 2017/04/27 by Steve.Robb
Include spam reduced in generated code.
Change 3412155 on 2017/04/27 by Ben.Marsh
Fix for PVS Studio warning: VFOVInRadians used instead of HFOVInRadians.
Change 3412223 on 2017/04/27 by Ben.Marsh
Fix for PVS-Studio warning: Calling SetHelperA.Num() twice.
Change 3412273 on 2017/04/27 by Ben.Marsh
Fix for PVS-Studio warning: Duplicated variable name.
Change 3412511 on 2017/04/27 by Ben.Marsh
PR #3462: Fixed PVS-Studio issues (Part 1) (Contributed by PaulEremeeff)
Change 3412582 on 2017/04/27 by Ben.Marsh
Fix for PVS-Studio warning: Incorrect variable name in copy/pasted code
Change 3413136 on 2017/04/28 by Robert.Manuszewski
Helper functions for dissolving specific GC clusters
Change 3413310 on 2017/04/28 by Ben.Marsh
Fix for PVS-Studio warning: Incorrect variable name in copy/pasted code.
Change 3413341 on 2017/04/28 by Gil.Gribb
UE4 - Add prestream capability to allow us to preload always loaded sublevels. Only turned on for Shootergame.
Change 3413351 on 2017/04/28 by Ben.Marsh
Include code analysis macros directly from Platform.h, so that macros are available to everything.
Change 3413352 on 2017/04/28 by Ben.Marsh
Fixing a few more PVS studio warnings.
Change 3413437 on 2017/04/28 by Ben.Marsh
Fix for PVS-Studio warning: Comparison is always true.
Change 3413759 on 2017/04/28 by Ben.Marsh
Suppressing warnings for PVS-Studio.
Change 3413784 on 2017/04/28 by Ben.Marsh
Fix PVS-Studio warning.
Change 3413898 on 2017/04/28 by Ben.Marsh
Fix PVS-Studio warning: Same conditional is checked twice.
Change 3413915 on 2017/04/28 by Ben.Marsh
Fix PVS-Studio warning: LHS of expression is identical to RHS.
Change 3413989 on 2017/04/28 by Ben.Marsh
Fix for PVS-Studio warning: If CurrentGraph->SubGraphs.Num() == 1, it will always enter the first conditional block.
Change 3414053 on 2017/04/28 by Ben.Marsh
More PVS-Studio fixes.
Change 3414062 on 2017/04/28 by Ben.Marsh
Fix for PVS-Studio warning: Pointer to object goes out of scope without being freed.
Change 3414070 on 2017/04/28 by Ben.Marsh
Fix for PVS-Studio warning: Fix incorrect condition.
Change 3414071 on 2017/04/28 by Ben.Marsh
Fix for PVS-Studio warning: Array index is always zero.
Change 3414116 on 2017/04/28 by Ben.Marsh
BuildGraph: Allow marking compile tasks as unsuitable for use with the parallel executor, via an AllowParallelExecutor="false" attribute.
Change 3414160 on 2017/04/28 by Ben.Marsh
Add support for running PVS-Studio through UnrealBuildTool. To use, pass -StaticAnalyzer=PVSStudio to the build command line (similarly, the Visual C++ analyzer can now be invoked using -StaticAnalyzer=VisualCpp). A log file will be written to the Engine/Saved/PVS-Studio or <Project>/Saved/PVS-Studio directory containing diagnostics, which can be opened using the "unparsed output" filter in the PVS-Studio standalone application. High priority warnings are printed to stdout.
Change 3414237 on 2017/04/28 by Ben.Marsh
EC: Allow disabling and enabling the log preprocessor via special markers in the log.
To disable: <-- Suspend Log Parsing -->
To enable: <-- Resume Log Parsing -->
Change 3414343 on 2017/04/28 by Ben.Marsh
UBT: Exclude ThirdParty folders from PVS output.
Change 3414392 on 2017/04/28 by Ben.Marsh
Fix regular strings being casted to BSTRs; BSTRs have a hidden length prefix in the two bytes before the first character, so passing a regular TCHAR* is reading random memory.
Change 3414459 on 2017/04/28 by Ben.Marsh
Fix for PVS-Studio warning: Object goes out of scope without being freed.
Change 3414495 on 2017/04/28 by Ben.Marsh
Suppress some more PVS-Studio warnings.
Change 3414514 on 2017/04/28 by Ben.Marsh
Fix for PVS-Studio warning: Testing WorldType being equal to EditorPreview and not equal to Inactive is redundant; changing to match description in comment instead.
Change 3414526 on 2017/04/28 by Ben.Marsh
Fix for PVS-Studio warning: Variable assigned to itself has no effect.
Change 3415183 on 2017/04/29 by Ben.Marsh
Fix conflict in macro definitions for ENABLE_HTTP_FOR_NFS - rename the macro defined by NetworkFile to ENABLE_HTTP_FOR_NF. Hopefully fix CIS.
Change 3415765 on 2017/05/01 by Ben.Marsh
Suppressing PVS-Studio warning to get things building cleanly. Not sure if FContentHelper is being leaked or not.
Change 3415853 on 2017/05/01 by Ben.Marsh
EC: Fix jobs never completing if a "Sync & Build" step fails. Dependent jobs should evaluate their run conditions as soon as the parent step finishes, rather than waiting for child job steps to be created.
Change 3416138 on 2017/05/01 by Ben.Marsh
Fix Fortnite cook failures. Not sure what the exact problem is here, but my hunch is that discarded "const" causes blueprint compile failures due to not being able to connect output pins between nodes for overloaded functions, or something like that.
Change 3416309 on 2017/05/01 by Ben.Marsh
Build: Fix node names for static analysis.
Change 3416360 on 2017/05/01 by Ben.Marsh
UBT: Remove unused arguments to PrepForUATPackageOrDeploy for Windows.
Change 3416398 on 2017/05/01 by Daniel.Lamb
Cook on the fly NetworkFileServerConnection Remove FileModifiedCallback delegate when the connection is closed.
#test Cook on the side shootergame.
Change 3416826 on 2017/05/01 by Daniel.Lamb
Added callback to game when files are requested reload from networkfileserver.
Game will need to unload / reload effected objects.
Working on simple reload capability in shootergame.
#test Cook on the side shootergame with reloading
Change 3417983 on 2017/05/02 by Ben.Marsh
EC: Remove warning for lines not matching p4 tag syntax when running preflights; multi-line descriptions in shelved changelists break this pattern.
Change 3418747 on 2017/05/02 by Steve.Robb
Fix for const pointer properties.
Fix for UHT debugging manifest.
Test added for pointer properties.
Change 3420477 on 2017/05/03 by Gil.Gribb
UE4 - Removed check from windows async IO layer.
[CL 3421020 by Ben Marsh in Main branch]
2017-05-03 14:18:32 -04:00
FLauncherProfile * Profile = new FLauncherProfile ( AsShared ( ) ) ;
2015-10-28 08:58:16 -04:00
if ( Profile - > Load ( * ( Object . Get ( ) ) ) )
{
ILauncherDeviceGroupPtr DeviceGroup = GetDeviceGroup ( Profile - > GetDeployedDeviceGroupId ( ) ) ;
if ( ! DeviceGroup . IsValid ( ) )
{
DeviceGroup = AddNewDeviceGroup ( ) ;
}
Profile - > SetDeployedDeviceGroup ( DeviceGroup ) ;
return MakeShareable ( Profile ) ;
}
return nullptr ;
}
2014-03-14 14:13:41 -04:00
void FLauncherProfileManager : : LoadSettings ( )
{
LoadDeviceGroups ( ) ;
LoadProfiles ( ) ;
}
void FLauncherProfileManager : : RemoveDeviceGroup ( const ILauncherDeviceGroupRef & DeviceGroup )
{
if ( DeviceGroups . Remove ( DeviceGroup ) > 0 )
{
SaveDeviceGroups ( ) ;
DeviceGroupRemovedDelegate . Broadcast ( DeviceGroup ) ;
}
}
2014-09-09 12:20:43 -04:00
void FLauncherProfileManager : : RemoveSimpleProfile ( const ILauncherSimpleProfileRef & SimpleProfile )
2014-03-14 14:13:41 -04:00
{
2014-09-09 12:20:43 -04:00
if ( SimpleProfiles . Remove ( SimpleProfile ) > 0 )
2014-03-14 14:13:41 -04:00
{
2014-09-09 12:20:43 -04:00
// delete the persisted simple profile on disk
2020-04-09 19:58:35 -04:00
FString SimpleProfileFileName = FLauncherProfile : : GetProfileFolder ( false ) / SimpleProfile - > GetDeviceName ( ) + TEXT ( " .uslp " ) ;
2014-09-09 12:20:43 -04:00
IFileManager : : Get ( ) . Delete ( * SimpleProfileFileName ) ;
2014-03-14 14:13:41 -04:00
}
}
2014-09-09 12:20:43 -04:00
void FLauncherProfileManager : : RemoveProfile ( const ILauncherProfileRef & Profile )
2014-03-14 14:13:41 -04:00
{
2014-09-09 12:20:43 -04:00
AllProfiles . Remove ( Profile ) ;
if ( SavedProfiles . Remove ( Profile ) > 0 )
{
if ( Profile - > GetId ( ) . IsValid ( ) )
{
// delete the persisted profile on disk
2015-07-17 18:40:42 -04:00
FString ProfileFileName = Profile - > GetFilePath ( ) ;
2014-09-09 12:20:43 -04:00
// delete the profile
IFileManager : : Get ( ) . Delete ( * ProfileFileName ) ;
ProfileRemovedDelegate . Broadcast ( Profile ) ;
}
}
}
2015-07-17 16:12:42 -04:00
bool FLauncherProfileManager : : SaveProfile ( const ILauncherProfileRef & Profile )
2014-09-09 12:20:43 -04:00
{
if ( Profile - > GetId ( ) . IsValid ( ) )
{
2015-07-17 18:40:42 -04:00
FString ProfileFileName = Profile - > GetFilePath ( ) ;
2014-09-09 12:20:43 -04:00
FArchive * ProfileFileWriter = IFileManager : : Get ( ) . CreateFileWriter ( * ProfileFileName ) ;
if ( ProfileFileWriter ! = nullptr )
{
Profile - > Serialize ( * ProfileFileWriter ) ;
delete ProfileFileWriter ;
2015-07-17 16:12:42 -04:00
return true ;
2014-09-09 12:20:43 -04:00
}
}
2015-07-17 16:12:42 -04:00
return false ;
2014-03-14 14:13:41 -04:00
}
2015-10-28 08:58:16 -04:00
bool FLauncherProfileManager : : SaveJSONProfile ( const ILauncherProfileRef & Profile )
{
if ( Profile - > GetId ( ) . IsValid ( ) )
{
FString Text ;
TSharedRef < TJsonWriter < > > Writer = TJsonWriterFactory < > : : Create ( & Text ) ;
Profile - > Save ( Writer . Get ( ) ) ;
Writer - > Close ( ) ;
return FFileHelper : : SaveStringToFile ( Text , * Profile - > GetFilePath ( ) ) ;
}
return false ;
}
2015-07-17 16:12:42 -04:00
void FLauncherProfileManager : : ChangeProfileName ( const ILauncherProfileRef & Profile , FString Name )
{
FString OldName = Profile - > GetName ( ) ;
2015-07-17 18:40:42 -04:00
FString OldProfileFileName = Profile - > GetFilePath ( ) ;
2015-07-17 16:12:42 -04:00
//change name and save to new location
Profile - > SetName ( Name ) ;
2015-10-28 08:58:16 -04:00
if ( SaveJSONProfile ( Profile ) )
2015-07-17 16:12:42 -04:00
{
2015-07-17 18:40:42 -04:00
//delete the old profile if the location moved. File names should be uppercase so this compare works on case sensitive and insensitive platforms
if ( OldProfileFileName . Compare ( Profile - > GetFilePath ( ) ) ! = 0 )
{
IFileManager : : Get ( ) . Delete ( * OldProfileFileName ) ;
}
2015-07-17 16:12:42 -04:00
}
else
{
//if we couldn't save successfully, change the name back to keep files/profiles matching.
2015-07-17 18:40:42 -04:00
Profile - > SetName ( OldName ) ;
2015-07-17 16:12:42 -04:00
}
}
Copying //UE4/Dev-Mobile to //UE4/Dev-Main (Source: //UE4/Dev-Mobile @ 3056055)
#lockdown Nick.Penwarden
#rb None
==========================
MAJOR FEATURES + CHANGES
==========================
Change 3011102 on 2016/06/13 by Steve.Cano
After taking a screenshot using glReadPixels, transfer the data to the target buffer from bottom row up to fix the "upside-down" render that OpenGL does. Confirmed with QA (owen.stupka_volt) that this does not appear to be happening on iOS (non-metal devices, inclusion of iOS in write-up was a mistake), verified on an ipod touch 5. Also confirmed that this does not happen on html5, and that Mobile HDR flag does not make a difference in function.
#jira UE-26421
#ue4
#android
Change 3015801 on 2016/06/16 by Dmitriy.Dyomin
Probbably fix for UE-30878, was not able to repro an actual crash(FFoliageInstanceBaseCache::AddInstanceBaseId). Added even more logging in case fix does not work.
#jira UE-30878
Change 3015903 on 2016/06/16 by Dmitriy.Dyomin
Fixed: Levels window has Refresh/UI issues when World Composition is active
#jira UE-26160
Change 3018352 on 2016/06/17 by Chris.Babcock
Handle Android media prepare failure (URL without internet for example)
#jira UE-32029
#ue4
#android
Change 3026387 on 2016/06/24 by Jack.Porter
Remove FFuncTestManager warning about PIE when running on a standalone game binary
Change 3026398 on 2016/06/24 by Jack.Porter
Prevent FSocketBSD::Recv returning false on SE_EWOULDBLOCK
Change 3027553 on 2016/06/25 by Niklas.Smedberg
OpenGL: Made some block size calculation work for arbitrary block sizes (e.g. not pow-of-two).
Change 3027554 on 2016/06/25 by Niklas.Smedberg
Metal: copyFromTexture now gets block-aligned size parameter (e.g. used for texture streaming)
Change 3028061 on 2016/06/26 by Jack.Porter
Fixed a problem where newly discovered instances were not added to an existing session in the Session Browser.
Fixed a problem where selecting an instance in a session with multiple instances didn't deselect the previously selected instance correctly.
Change 3029220 on 2016/06/27 by Steve.Cano
Change Android Tilt values to use GetRotationMatrix/GetOrientation logic, same as java-side android would use, and adjust slightly to match as closely as possible to iOS values for tilt. There is drift and some differences in the "Y" value but the same sort of inconsistencies are also seen on iOS.
#jira UE-6135
#ue4
#android
Change 3030420 on 2016/06/28 by Jack.Porter
Fix crash with RenderOutputValidation when running with cooked content
Change 3030426 on 2016/06/28 by Jack.Porter
Fix to CL 3026398 - make FSocketBSD(IPv6)::Recv(From) return false when recv returns 0.
A return value of 0 indicates the connection was shutdown in an orderly manner.
Change 3030973 on 2016/06/28 by Steve.Cano
Added a landscape downloader background along with the options to change it from within Android settings
#ue4
#android
#jira UE-32318
Change 3031757 on 2016/06/28 by Chris.Babcock
Remove unused methods from AndroidJNI header
#ue4
#android
Change 3032387 on 2016/06/29 by Allan.Bentham
Rename android es31+aep -> glesdeferred.
Change 3032711 on 2016/06/29 by Allan.Bentham
Rename GLSL_310_ES_EXT shader define:
ES31_AEP_PROFILE -> ESDEFERRED_PROFILE
bumped UE_SHADER_GLSL_310_ES_EXT_VER version number.
Change 3033698 on 2016/06/29 by Jack.Porter
Merging //UE4/Dev-Main to Dev-Mobile (//UE4/Dev-Mobile)
Change 3034210 on 2016/06/30 by Steve.Cano
Added a new AndroidRuntimeSettings variable that allows creation of installers for both Windows and Mac/Linux if set to true.
#jira UE-32302
#ue4
#android
Change 3034530 on 2016/06/30 by Chris.Babcock
Rename FManifestReader to FAndroidFileManifestReader in AndroidFile
#jira UE-32679
#ue4
#android
Change 3034612 on 2016/06/30 by Steve.Cano
Change Alpha from being set to a range of 0-255 to being in a range of 0-1 (which is the correct range of values)
#jira UE-25325
#ue4
#android
Change 3034679 on 2016/06/30 by Chris.Babcock
Fix tooltip (.command for mac, not .sh)
#jira UE-32302
#ue4
#android
Change 3038881 on 2016/07/05 by Jack.Porter
Package and launch on multiple Android devices simultaneously using the -Device=xxxxxxx+yyyyyyyy+zzzzzzzz format generated by a Project Launcher profile when you select multiple devices
#jira UEMOB-115
Change 3039240 on 2016/07/06 by Jack.Porter
TcpMessageTransport - connection-based message bus transport.
#jira UEMOB-112
#jira UEMOB-113
Change 3039252 on 2016/07/06 by Jack.Porter
Enable messaging and session services and functional testing on Android when launched with -messaging
Android device detection module support for adding port forwarding and connection announcement for TcpMessageTransport
#jira UEMOB-112
#jira UEMOB-113
Change 3039264 on 2016/07/06 by Jack.Porter
Merging //UE4/Dev-Main to Dev-Mobile (//UE4/Dev-Mobile)
Change 3040041 on 2016/07/06 by Chris.Babcock
Pass proper value to script generator functions
#jira UE-32861
#ue4
#android
Change 3040890 on 2016/07/07 by Allan.Bentham
Fix shadow crash
#jira UE-32884
Change 3041458 on 2016/07/07 by Peter.Sauerbrei
fix for IOS launch on failures
Change 3041542 on 2016/07/07 by Peter.Sauerbrei
better fix for the multi-device deployment issue
Change 3041774 on 2016/07/07 by Steve.Cano
Fixing crash that occurs when a games app id for Google Play is set before configuring the apk packaging. Also validating the value that is inserted and using it to override any values that have been hand-inserted into the GooglePlayAppID.xml
#jira UE-16992
#android
#ue4
Change 3042222 on 2016/07/08 by Dmitriy.Dyomin
Mobile packaging scenarious
Added a wizard for creating launcher profiles (Android & IOS) for scenario: Minimal App + Downloadable content
Added Archive step to launcher profiles to be able to store build product into specified directory
Changes to a cooker to be able to pack DLC based with a different flavor to a release App
Changes to DLC packaging to be able to build streaming data without chunking pak files
#jira UEMOB-119
Change 3042244 on 2016/07/08 by Dmitriy.Dyomin
Fixed crash in FTcpMessageTransportConnection::Stop
Change 3042270 on 2016/07/08 by Dmitriy.Dyomin
GitHub #2320 : [ULevelStreamingKismet] Load Level Instance, Enables UE4 Users to create multiple transformed instances of a .umap without having to include in persistent level's list ? Rama
contributed by: EverNewJoy
#jira UE-29867
Change 3042449 on 2016/07/08 by Dmitriy.Dyomin
Fixing Mac Editor build erros from CL# 3042222
Change 3042480 on 2016/07/08 by Allan.Bentham
Add ES3.1 profile & compiler_glsl_es3_1 to shaders.
Change 3042481 on 2016/07/08 by Allan.Bentham
hlslcc - ES3.1 changes.
set ES3.1 version number to 310
Do not use ES2 keywords for ES3.1.
Generate Layout Locations for ES3.1
bump version.
Change 3042483 on 2016/07/08 by Allan.Bentham
Add mobile ES3.1 support.
Recreates EGL and ES3.1 context during PlatformInitOpenGL if ES3.1 is required.
Change 3042485 on 2016/07/08 by Allan.Bentham
Undo android XGE change.
Change 3042506 on 2016/07/08 by Dmitriy.Dyomin
One more compile fix from CL# 3042222
Change 3044173 on 2016/07/10 by Dmitriy.Dyomin
UAT: Added support for building target platforms with multiple cook flavors
ex: -targetplatform=Android -cookflavor=ETC1+ETC2
Change 3044213 on 2016/07/11 by Dmitriy.Dyomin
Fixed: Can't stream in a level whose name is a substring of another streaming level
#jira UE-32999
Change 3044221 on 2016/07/11 by Jack.Porter
Merging //UE4/Dev-Main to Dev-Mobile (//UE4/Dev-Mobile)
Change 3044815 on 2016/07/11 by Allan.Bentham
Corrected NAME_GLSL_ES3_1_ANDROID format string.
Change 3046911 on 2016/07/12 by Chris.Babcock
Add handling of OnTextChanged for virtual keyboard input on Android
#jira UE-32348
#ue4
#android
Change 3046958 on 2016/07/12 by Chris.Babcock
Rename some functions with Error in the name to prevent false coloring in the logs
#jira UE-30541
#ue4
#android
Change 3047169 on 2016/07/12 by Chris.Babcock
Return player ID and handle auth token for Google Play Games on Android (contributed by gameDNAstudio)
#jira UE-30610
#pr #2372
#ue4
#android
Change 3047406 on 2016/07/12 by Jack.Porter
Add missing import to GameActivity.java
Change 3047442 on 2016/07/13 by Dmitriy.Dyomin
Added: Mobile custom post-process
Limitations: can fetch only from PostProcessInput0 (SceneColor) other scene textures are not supported. Does not support "Replacing the Tonemapper" blendable location.
#jira UEMOB-147
Change 3047466 on 2016/07/13 by Dmitriy.Dyomin
Disabled engine crash handler on Android, system crash handler works more reliably across different os versions/devices
Change 3047746 on 2016/07/13 by Jack.Porter
Rename FBasePassFowardDynamicPointLightInfo
Change 3047778 on 2016/07/13 by Jack.Porter
Missing file for rename FBasePassFowardDynamicPointLightInfo
Change 3047788 on 2016/07/13 by Allan.Bentham
Fix incorrect TargetPlatformDescriptor string generation.
Change 3047790 on 2016/07/13 by Allan.Bentham
Fixed half3x3 matrix use with ES3.1 glsl
Fixed couple of interpolator precision mismatch.
Fixed ES3.1 support detection issues
Change 3047816 on 2016/07/13 by Allan.Bentham
Remove AndroidGL4 remnants.
Change 3048926 on 2016/07/13 by Chris.Babcock
Added detection of Amazon Fire TV to disable requiring virtual joysticks
#ue4
#android
Change 3049335 on 2016/07/14 by Dmitriy.Dyomin
Fixing UAT crash when packaging project for iOS
Change 3049390 on 2016/07/14 by Jack.Porter
Disabled error for warning 4819 "The file contains a character that cannot be represented in the current code page (xxx). Save the file in Unicode format to prevent data loss"
This is triggered by European characters and copyright symbols in source saved as latin-1 when compiling on non-US windows. Seen often in 3rd party headers, eg nvapi.
#code_review: Ben.Marsh
Change 3049391 on 2016/07/14 by Jack.Porter
Fixed incorrect comment order in CL 3049390
Change 3049545 on 2016/07/14 by Dmitriy.Dyomin
Reworking some code from CL#3047442 to make static analizer happy
Change 3049626 on 2016/07/14 by Allan.Bentham
Automatic CSM shader toggling
#jira UE-27429
Change 3051574 on 2016/07/15 by Jack.Porter
Support for lighting channels on Mobile
- Multiple directional lights are supported in different channels but primitives are only affected by the directional light in the first channel they have set
- CSM shadows from stationary or movable directional lights correctly follow their lighting channels
- No channel limitations for dynamic point lights
Notes:
Removed mobile-specific directional light shadowing fields from View uniform buffer and mobile no longers uses SimpleDirectionalLight.
Separate uniform buffers for mobile directional light are generated for each lighting channel.
CSM culling information is now stored in FViewInfo and not per FVisibleLightViewInfo as the visibility bits are per view.
#code_review Daniel.Wright
#jira UEMOB-110
Change 3051699 on 2016/07/15 by Steve.Cano
Preserve the original, pre-transformed input vertices for Slate shaders, which is required to properly do anti-aliasing (the ViewProjection-transformed values were causing the lines to not be drawn).
#jira UE-20320
#ue4
#android
Change 3051744 on 2016/07/15 by Chris.Babcock
Fix Android Vulkan include path checks (contributed by kodomastro)
#jira UE-33311
#PR #2602
#ue4
#android
Change 3052023 on 2016/07/15 by Chris.Babcock
Fix shadowed variables
Change 3052110 on 2016/07/15 by Chris.Babcock
Compile fixes for light channel support on mobile
- missing template
- accessor function for MobileDirectionalLights from scene
Change 3052242 on 2016/07/15 by Chris.Babcock
Compile fixes for light channel support on mobile
- removed dependency on C++14 feature
Change 3052730 on 2016/07/16 by Dmitriy.Dyomin
Win32 build fix
Change 3053041 on 2016/07/17 by Jack.Porter
Merging //UE4/Dev-Main to Dev-Mobile (//UE4/Dev-Mobile)
Change 3053054 on 2016/07/17 by Jack.Porter
Changed use of old function ShouldUseDeferredRenderer() to new GetShadingPath()
Change 3053055 on 2016/07/17 by Jack.Porter
Fixed local variable aliasing in unity build
Change 3053206 on 2016/07/18 by Jack.Porter
Support ExecuteJavascript on iOS and Android
Expose ExecuteJavascript to widget blueprint
Fix ExecuteJavascript unicode string support on desktop platforms
#jira UEMOB-152
Change 3053323 on 2016/07/18 by Dmitriy.Dyomin
Added: Ability to set thread affinity for a device in Device Profiles (ex: +CVars=android.SetThreadAffinity=RT 0x02 GT 0x01)
#jira UEMOB-107
Change 3053723 on 2016/07/18 by Jack.Porter
Fix for UnrealTournamentProto.Automation.cs build errors
Change 3055090 on 2016/07/19 by Dmitriy.Dyomin
Junk OnlineBlueprintSupport module binaries
[CL 3056789 by Jack Porter in Main branch]
2016-07-19 19:13:01 -04:00
void FLauncherProfileManager : : RegisterProfileWizard ( const ILauncherProfileWizardPtr & InProfileWizard )
{
ProfileWizards . Add ( InProfileWizard ) ;
}
2015-07-17 16:12:42 -04:00
Copying //UE4/Dev-Mobile to //UE4/Dev-Main (Source: //UE4/Dev-Mobile @ 3056055)
#lockdown Nick.Penwarden
#rb None
==========================
MAJOR FEATURES + CHANGES
==========================
Change 3011102 on 2016/06/13 by Steve.Cano
After taking a screenshot using glReadPixels, transfer the data to the target buffer from bottom row up to fix the "upside-down" render that OpenGL does. Confirmed with QA (owen.stupka_volt) that this does not appear to be happening on iOS (non-metal devices, inclusion of iOS in write-up was a mistake), verified on an ipod touch 5. Also confirmed that this does not happen on html5, and that Mobile HDR flag does not make a difference in function.
#jira UE-26421
#ue4
#android
Change 3015801 on 2016/06/16 by Dmitriy.Dyomin
Probbably fix for UE-30878, was not able to repro an actual crash(FFoliageInstanceBaseCache::AddInstanceBaseId). Added even more logging in case fix does not work.
#jira UE-30878
Change 3015903 on 2016/06/16 by Dmitriy.Dyomin
Fixed: Levels window has Refresh/UI issues when World Composition is active
#jira UE-26160
Change 3018352 on 2016/06/17 by Chris.Babcock
Handle Android media prepare failure (URL without internet for example)
#jira UE-32029
#ue4
#android
Change 3026387 on 2016/06/24 by Jack.Porter
Remove FFuncTestManager warning about PIE when running on a standalone game binary
Change 3026398 on 2016/06/24 by Jack.Porter
Prevent FSocketBSD::Recv returning false on SE_EWOULDBLOCK
Change 3027553 on 2016/06/25 by Niklas.Smedberg
OpenGL: Made some block size calculation work for arbitrary block sizes (e.g. not pow-of-two).
Change 3027554 on 2016/06/25 by Niklas.Smedberg
Metal: copyFromTexture now gets block-aligned size parameter (e.g. used for texture streaming)
Change 3028061 on 2016/06/26 by Jack.Porter
Fixed a problem where newly discovered instances were not added to an existing session in the Session Browser.
Fixed a problem where selecting an instance in a session with multiple instances didn't deselect the previously selected instance correctly.
Change 3029220 on 2016/06/27 by Steve.Cano
Change Android Tilt values to use GetRotationMatrix/GetOrientation logic, same as java-side android would use, and adjust slightly to match as closely as possible to iOS values for tilt. There is drift and some differences in the "Y" value but the same sort of inconsistencies are also seen on iOS.
#jira UE-6135
#ue4
#android
Change 3030420 on 2016/06/28 by Jack.Porter
Fix crash with RenderOutputValidation when running with cooked content
Change 3030426 on 2016/06/28 by Jack.Porter
Fix to CL 3026398 - make FSocketBSD(IPv6)::Recv(From) return false when recv returns 0.
A return value of 0 indicates the connection was shutdown in an orderly manner.
Change 3030973 on 2016/06/28 by Steve.Cano
Added a landscape downloader background along with the options to change it from within Android settings
#ue4
#android
#jira UE-32318
Change 3031757 on 2016/06/28 by Chris.Babcock
Remove unused methods from AndroidJNI header
#ue4
#android
Change 3032387 on 2016/06/29 by Allan.Bentham
Rename android es31+aep -> glesdeferred.
Change 3032711 on 2016/06/29 by Allan.Bentham
Rename GLSL_310_ES_EXT shader define:
ES31_AEP_PROFILE -> ESDEFERRED_PROFILE
bumped UE_SHADER_GLSL_310_ES_EXT_VER version number.
Change 3033698 on 2016/06/29 by Jack.Porter
Merging //UE4/Dev-Main to Dev-Mobile (//UE4/Dev-Mobile)
Change 3034210 on 2016/06/30 by Steve.Cano
Added a new AndroidRuntimeSettings variable that allows creation of installers for both Windows and Mac/Linux if set to true.
#jira UE-32302
#ue4
#android
Change 3034530 on 2016/06/30 by Chris.Babcock
Rename FManifestReader to FAndroidFileManifestReader in AndroidFile
#jira UE-32679
#ue4
#android
Change 3034612 on 2016/06/30 by Steve.Cano
Change Alpha from being set to a range of 0-255 to being in a range of 0-1 (which is the correct range of values)
#jira UE-25325
#ue4
#android
Change 3034679 on 2016/06/30 by Chris.Babcock
Fix tooltip (.command for mac, not .sh)
#jira UE-32302
#ue4
#android
Change 3038881 on 2016/07/05 by Jack.Porter
Package and launch on multiple Android devices simultaneously using the -Device=xxxxxxx+yyyyyyyy+zzzzzzzz format generated by a Project Launcher profile when you select multiple devices
#jira UEMOB-115
Change 3039240 on 2016/07/06 by Jack.Porter
TcpMessageTransport - connection-based message bus transport.
#jira UEMOB-112
#jira UEMOB-113
Change 3039252 on 2016/07/06 by Jack.Porter
Enable messaging and session services and functional testing on Android when launched with -messaging
Android device detection module support for adding port forwarding and connection announcement for TcpMessageTransport
#jira UEMOB-112
#jira UEMOB-113
Change 3039264 on 2016/07/06 by Jack.Porter
Merging //UE4/Dev-Main to Dev-Mobile (//UE4/Dev-Mobile)
Change 3040041 on 2016/07/06 by Chris.Babcock
Pass proper value to script generator functions
#jira UE-32861
#ue4
#android
Change 3040890 on 2016/07/07 by Allan.Bentham
Fix shadow crash
#jira UE-32884
Change 3041458 on 2016/07/07 by Peter.Sauerbrei
fix for IOS launch on failures
Change 3041542 on 2016/07/07 by Peter.Sauerbrei
better fix for the multi-device deployment issue
Change 3041774 on 2016/07/07 by Steve.Cano
Fixing crash that occurs when a games app id for Google Play is set before configuring the apk packaging. Also validating the value that is inserted and using it to override any values that have been hand-inserted into the GooglePlayAppID.xml
#jira UE-16992
#android
#ue4
Change 3042222 on 2016/07/08 by Dmitriy.Dyomin
Mobile packaging scenarious
Added a wizard for creating launcher profiles (Android & IOS) for scenario: Minimal App + Downloadable content
Added Archive step to launcher profiles to be able to store build product into specified directory
Changes to a cooker to be able to pack DLC based with a different flavor to a release App
Changes to DLC packaging to be able to build streaming data without chunking pak files
#jira UEMOB-119
Change 3042244 on 2016/07/08 by Dmitriy.Dyomin
Fixed crash in FTcpMessageTransportConnection::Stop
Change 3042270 on 2016/07/08 by Dmitriy.Dyomin
GitHub #2320 : [ULevelStreamingKismet] Load Level Instance, Enables UE4 Users to create multiple transformed instances of a .umap without having to include in persistent level's list ? Rama
contributed by: EverNewJoy
#jira UE-29867
Change 3042449 on 2016/07/08 by Dmitriy.Dyomin
Fixing Mac Editor build erros from CL# 3042222
Change 3042480 on 2016/07/08 by Allan.Bentham
Add ES3.1 profile & compiler_glsl_es3_1 to shaders.
Change 3042481 on 2016/07/08 by Allan.Bentham
hlslcc - ES3.1 changes.
set ES3.1 version number to 310
Do not use ES2 keywords for ES3.1.
Generate Layout Locations for ES3.1
bump version.
Change 3042483 on 2016/07/08 by Allan.Bentham
Add mobile ES3.1 support.
Recreates EGL and ES3.1 context during PlatformInitOpenGL if ES3.1 is required.
Change 3042485 on 2016/07/08 by Allan.Bentham
Undo android XGE change.
Change 3042506 on 2016/07/08 by Dmitriy.Dyomin
One more compile fix from CL# 3042222
Change 3044173 on 2016/07/10 by Dmitriy.Dyomin
UAT: Added support for building target platforms with multiple cook flavors
ex: -targetplatform=Android -cookflavor=ETC1+ETC2
Change 3044213 on 2016/07/11 by Dmitriy.Dyomin
Fixed: Can't stream in a level whose name is a substring of another streaming level
#jira UE-32999
Change 3044221 on 2016/07/11 by Jack.Porter
Merging //UE4/Dev-Main to Dev-Mobile (//UE4/Dev-Mobile)
Change 3044815 on 2016/07/11 by Allan.Bentham
Corrected NAME_GLSL_ES3_1_ANDROID format string.
Change 3046911 on 2016/07/12 by Chris.Babcock
Add handling of OnTextChanged for virtual keyboard input on Android
#jira UE-32348
#ue4
#android
Change 3046958 on 2016/07/12 by Chris.Babcock
Rename some functions with Error in the name to prevent false coloring in the logs
#jira UE-30541
#ue4
#android
Change 3047169 on 2016/07/12 by Chris.Babcock
Return player ID and handle auth token for Google Play Games on Android (contributed by gameDNAstudio)
#jira UE-30610
#pr #2372
#ue4
#android
Change 3047406 on 2016/07/12 by Jack.Porter
Add missing import to GameActivity.java
Change 3047442 on 2016/07/13 by Dmitriy.Dyomin
Added: Mobile custom post-process
Limitations: can fetch only from PostProcessInput0 (SceneColor) other scene textures are not supported. Does not support "Replacing the Tonemapper" blendable location.
#jira UEMOB-147
Change 3047466 on 2016/07/13 by Dmitriy.Dyomin
Disabled engine crash handler on Android, system crash handler works more reliably across different os versions/devices
Change 3047746 on 2016/07/13 by Jack.Porter
Rename FBasePassFowardDynamicPointLightInfo
Change 3047778 on 2016/07/13 by Jack.Porter
Missing file for rename FBasePassFowardDynamicPointLightInfo
Change 3047788 on 2016/07/13 by Allan.Bentham
Fix incorrect TargetPlatformDescriptor string generation.
Change 3047790 on 2016/07/13 by Allan.Bentham
Fixed half3x3 matrix use with ES3.1 glsl
Fixed couple of interpolator precision mismatch.
Fixed ES3.1 support detection issues
Change 3047816 on 2016/07/13 by Allan.Bentham
Remove AndroidGL4 remnants.
Change 3048926 on 2016/07/13 by Chris.Babcock
Added detection of Amazon Fire TV to disable requiring virtual joysticks
#ue4
#android
Change 3049335 on 2016/07/14 by Dmitriy.Dyomin
Fixing UAT crash when packaging project for iOS
Change 3049390 on 2016/07/14 by Jack.Porter
Disabled error for warning 4819 "The file contains a character that cannot be represented in the current code page (xxx). Save the file in Unicode format to prevent data loss"
This is triggered by European characters and copyright symbols in source saved as latin-1 when compiling on non-US windows. Seen often in 3rd party headers, eg nvapi.
#code_review: Ben.Marsh
Change 3049391 on 2016/07/14 by Jack.Porter
Fixed incorrect comment order in CL 3049390
Change 3049545 on 2016/07/14 by Dmitriy.Dyomin
Reworking some code from CL#3047442 to make static analizer happy
Change 3049626 on 2016/07/14 by Allan.Bentham
Automatic CSM shader toggling
#jira UE-27429
Change 3051574 on 2016/07/15 by Jack.Porter
Support for lighting channels on Mobile
- Multiple directional lights are supported in different channels but primitives are only affected by the directional light in the first channel they have set
- CSM shadows from stationary or movable directional lights correctly follow their lighting channels
- No channel limitations for dynamic point lights
Notes:
Removed mobile-specific directional light shadowing fields from View uniform buffer and mobile no longers uses SimpleDirectionalLight.
Separate uniform buffers for mobile directional light are generated for each lighting channel.
CSM culling information is now stored in FViewInfo and not per FVisibleLightViewInfo as the visibility bits are per view.
#code_review Daniel.Wright
#jira UEMOB-110
Change 3051699 on 2016/07/15 by Steve.Cano
Preserve the original, pre-transformed input vertices for Slate shaders, which is required to properly do anti-aliasing (the ViewProjection-transformed values were causing the lines to not be drawn).
#jira UE-20320
#ue4
#android
Change 3051744 on 2016/07/15 by Chris.Babcock
Fix Android Vulkan include path checks (contributed by kodomastro)
#jira UE-33311
#PR #2602
#ue4
#android
Change 3052023 on 2016/07/15 by Chris.Babcock
Fix shadowed variables
Change 3052110 on 2016/07/15 by Chris.Babcock
Compile fixes for light channel support on mobile
- missing template
- accessor function for MobileDirectionalLights from scene
Change 3052242 on 2016/07/15 by Chris.Babcock
Compile fixes for light channel support on mobile
- removed dependency on C++14 feature
Change 3052730 on 2016/07/16 by Dmitriy.Dyomin
Win32 build fix
Change 3053041 on 2016/07/17 by Jack.Porter
Merging //UE4/Dev-Main to Dev-Mobile (//UE4/Dev-Mobile)
Change 3053054 on 2016/07/17 by Jack.Porter
Changed use of old function ShouldUseDeferredRenderer() to new GetShadingPath()
Change 3053055 on 2016/07/17 by Jack.Porter
Fixed local variable aliasing in unity build
Change 3053206 on 2016/07/18 by Jack.Porter
Support ExecuteJavascript on iOS and Android
Expose ExecuteJavascript to widget blueprint
Fix ExecuteJavascript unicode string support on desktop platforms
#jira UEMOB-152
Change 3053323 on 2016/07/18 by Dmitriy.Dyomin
Added: Ability to set thread affinity for a device in Device Profiles (ex: +CVars=android.SetThreadAffinity=RT 0x02 GT 0x01)
#jira UEMOB-107
Change 3053723 on 2016/07/18 by Jack.Porter
Fix for UnrealTournamentProto.Automation.cs build errors
Change 3055090 on 2016/07/19 by Dmitriy.Dyomin
Junk OnlineBlueprintSupport module binaries
[CL 3056789 by Jack Porter in Main branch]
2016-07-19 19:13:01 -04:00
void FLauncherProfileManager : : UnregisterProfileWizard ( const ILauncherProfileWizardPtr & InProfileWizard )
{
ProfileWizards . Remove ( InProfileWizard ) ;
}
const TArray < ILauncherProfileWizardPtr > & FLauncherProfileManager : : GetProfileWizards ( ) const
{
return ProfileWizards ;
}
2014-03-14 14:13:41 -04:00
void FLauncherProfileManager : : SaveSettings ( )
{
SaveDeviceGroups ( ) ;
2014-09-09 12:20:43 -04:00
SaveSimpleProfiles ( ) ;
2014-03-14 14:13:41 -04:00
SaveProfiles ( ) ;
}
2014-09-09 12:20:43 -04:00
FString FLauncherProfileManager : : GetProjectName ( ) const
{
return FLauncherProjectPath : : GetProjectName ( ProjectPath ) ;
}
2014-03-14 14:13:41 -04:00
2014-09-09 12:20:43 -04:00
FString FLauncherProfileManager : : GetProjectBasePath ( ) const
{
return FLauncherProjectPath : : GetProjectBasePath ( ProjectPath ) ;
}
FString FLauncherProfileManager : : GetProjectPath ( ) const
{
return ProjectPath ;
}
void FLauncherProfileManager : : SetProjectPath ( const FString & InProjectPath )
{
if ( ProjectPath ! = InProjectPath )
{
ProjectPath = InProjectPath ;
for ( ILauncherProfilePtr Profile : AllProfiles )
{
if ( Profile . IsValid ( ) )
{
Profile - > FallbackProjectUpdated ( ) ;
}
}
}
}
2014-03-14 14:13:41 -04:00
void FLauncherProfileManager : : LoadDeviceGroups ( )
{
2014-06-12 23:22:18 -04:00
if ( GConfig ! = nullptr )
2014-03-14 14:13:41 -04:00
{
FConfigSection * LoadedDeviceGroups = GConfig - > GetSectionPrivate ( TEXT ( " Launcher.DeviceGroups " ) , false , true , GEngineIni ) ;
2014-06-12 23:22:18 -04:00
if ( LoadedDeviceGroups ! = nullptr )
2014-03-14 14:13:41 -04:00
{
// parse the configuration file entries into device groups
for ( FConfigSection : : TIterator It ( * LoadedDeviceGroups ) ; It ; + + It )
{
if ( It . Key ( ) = = TEXT ( " DeviceGroup " ) )
{
2016-03-29 16:33:59 -04:00
DeviceGroups . Add ( ParseDeviceGroup ( It . Value ( ) . GetValue ( ) ) ) ;
2014-03-14 14:13:41 -04:00
}
}
}
}
}
void FLauncherProfileManager : : LoadProfiles ( )
{
TArray < FString > ProfileFileNames ;
2015-07-17 16:12:42 -04:00
//load and move legacy profiles
{
2015-10-28 08:58:16 -04:00
IFileManager : : Get ( ) . FindFilesRecursive ( ProfileFileNames , * GetLegacyProfileFolder ( ) , TEXT ( " *.ulp " ) , true , false ) ;
2015-07-17 16:12:42 -04:00
for ( TArray < FString > : : TConstIterator It ( ProfileFileNames ) ; It ; + + It )
{
2015-10-28 08:58:16 -04:00
FString ProfileFilePath = * It ;
2015-07-17 16:12:42 -04:00
FArchive * ProfileFileReader = IFileManager : : Get ( ) . CreateFileReader ( * ProfileFilePath ) ;
if ( ProfileFileReader ! = nullptr )
{
ILauncherProfilePtr LoadedProfile = LoadProfile ( * ProfileFileReader ) ;
delete ProfileFileReader ;
2015-10-28 08:58:16 -04:00
//re-save profile to new location
2015-07-17 16:12:42 -04:00
if ( LoadedProfile . IsValid ( ) )
{
SaveProfile ( LoadedProfile . ToSharedRef ( ) ) ;
}
//delete legacy profile.
IFileManager : : Get ( ) . Delete ( * ProfileFilePath ) ;
}
}
}
2020-04-09 19:58:35 -04:00
// 0 = normal, 1 = NotForLicensees
for ( int32 Pass = 0 ; Pass < 2 ; Pass + + )
2015-10-28 08:58:16 -04:00
{
2020-04-09 19:58:35 -04:00
//load and re-save legacy profiles
IFileManager : : Get ( ) . FindFilesRecursive ( ProfileFileNames , * FLauncherProfile : : GetProfileFolder ( Pass = = 1 ) , TEXT ( " *.ulp " ) , true , false ) ;
2015-10-28 08:58:16 -04:00
for ( TArray < FString > : : TConstIterator It ( ProfileFileNames ) ; It ; + + It )
{
FString ProfileFilePath = * It ;
FArchive * ProfileFileReader = IFileManager : : Get ( ) . CreateFileReader ( * ProfileFilePath ) ;
if ( ProfileFileReader ! = nullptr )
{
ILauncherProfilePtr LoadedProfile = LoadProfile ( * ProfileFileReader ) ;
delete ProfileFileReader ;
//re-save profile to the new format
if ( LoadedProfile . IsValid ( ) )
{
2020-04-09 19:58:35 -04:00
if ( Pass = = 1 )
2015-10-28 08:58:16 -04:00
{
LoadedProfile - > SetNotForLicensees ( ) ;
}
SaveJSONProfile ( LoadedProfile . ToSharedRef ( ) ) ;
}
//delete legacy profile.
IFileManager : : Get ( ) . Delete ( * ProfileFilePath ) ;
}
}
}
2020-04-09 19:58:35 -04:00
// 0 = normal, 1 = NotForLicensees
for ( int32 Pass = 0 ; Pass < 2 ; Pass + + )
2014-03-14 14:13:41 -04:00
{
2020-04-09 19:58:35 -04:00
ProfileFileNames . Reset ( ) ;
IFileManager : : Get ( ) . FindFilesRecursive ( ProfileFileNames , * FLauncherProfile : : GetProfileFolder ( Pass = = 1 ) , TEXT ( " *.ulp2 " ) , true , false ) ;
2014-03-14 14:13:41 -04:00
2020-04-09 19:58:35 -04:00
for ( TArray < FString > : : TConstIterator It ( ProfileFileNames ) ; It ; + + It )
2014-03-14 14:13:41 -04:00
{
2020-04-09 19:58:35 -04:00
FString ProfileFilePath = * It ;
ILauncherProfilePtr LoadedProfile = LoadJSONProfile ( * ProfileFilePath ) ;
if ( LoadedProfile . IsValid ( ) )
2014-03-14 14:13:41 -04:00
{
2020-04-09 19:58:35 -04:00
if ( Pass = = 1 )
{
LoadedProfile - > SetNotForLicensees ( ) ;
}
AddProfile ( LoadedProfile . ToSharedRef ( ) ) ;
}
else
{
IFileManager : : Get ( ) . Delete ( * ProfileFilePath ) ;
2014-03-14 14:13:41 -04:00
}
}
}
}
ILauncherDeviceGroupPtr FLauncherProfileManager : : ParseDeviceGroup ( const FString & GroupString )
{
TSharedPtr < FLauncherDeviceGroup > Result ;
FString GroupIdString ;
if ( FParse : : Value ( * GroupString , TEXT ( " Id= " ) , GroupIdString ) )
{
FGuid GroupId ;
if ( ! FGuid : : Parse ( GroupIdString , GroupId ) )
{
GroupId = FGuid : : NewGuid ( ) ;
}
FString GroupName ;
FParse : : Value ( * GroupString , TEXT ( " Name= " ) , GroupName ) ;
FString DevicesString ;
FParse : : Value ( * GroupString , TEXT ( " Devices= " ) , DevicesString ) ;
Result = MakeShareable ( new FLauncherDeviceGroup ( GroupId , GroupName ) ) ;
TArray < FString > DeviceList ;
2015-03-02 15:51:37 -05:00
DevicesString . ParseIntoArray ( DeviceList , TEXT ( " , " ) , false ) ;
2014-03-14 14:13:41 -04:00
for ( int32 Index = 0 ; Index < DeviceList . Num ( ) ; + + Index )
{
Result - > AddDevice ( DeviceList [ Index ] ) ;
}
}
return Result ;
}
void FLauncherProfileManager : : SaveDeviceGroups ( )
{
2014-06-12 23:22:18 -04:00
if ( GConfig ! = nullptr )
2014-03-14 14:13:41 -04:00
{
GConfig - > EmptySection ( TEXT ( " Launcher.DeviceGroups " ) , GEngineIni ) ;
TArray < FString > DeviceGroupStrings ;
// create a string representation of all groups and their devices
for ( int32 GroupIndex = 0 ; GroupIndex < DeviceGroups . Num ( ) ; + + GroupIndex )
{
const ILauncherDeviceGroupPtr & Group = DeviceGroups [ GroupIndex ] ;
2014-09-09 12:20:43 -04:00
const TArray < FString > & Devices = Group - > GetDeviceIDs ( ) ;
2014-03-14 14:13:41 -04:00
FString DeviceListString ;
for ( int32 DeviceIndex = 0 ; DeviceIndex < Devices . Num ( ) ; + + DeviceIndex )
{
if ( DeviceIndex > 0 )
{
DeviceListString + = " , " ;
}
DeviceListString + = Devices [ DeviceIndex ] ;
}
FString DeviceGroupString = FString : : Printf ( TEXT ( " (Id= \" %s \" , Name= \" %s \" , Devices= \" %s \" ) " ) , * Group - > GetId ( ) . ToString ( ) , * Group - > GetName ( ) , * DeviceListString ) ;
DeviceGroupStrings . Add ( DeviceGroupString ) ;
}
// save configuration
GConfig - > SetArray ( TEXT ( " Launcher.DeviceGroups " ) , TEXT ( " DeviceGroup " ) , DeviceGroupStrings , GEngineIni ) ;
GConfig - > Flush ( false , GEngineIni ) ;
}
}
2014-09-09 12:20:43 -04:00
void FLauncherProfileManager : : SaveSimpleProfiles ( )
2014-03-14 14:13:41 -04:00
{
2014-09-09 12:20:43 -04:00
for ( TArray < ILauncherSimpleProfilePtr > : : TIterator It ( SimpleProfiles ) ; It ; + + It )
2014-03-14 14:13:41 -04:00
{
2020-04-09 19:58:35 -04:00
FString SimpleProfileFileName = FLauncherProfile : : GetProfileFolder ( false ) / ( * It ) - > GetDeviceName ( ) + TEXT ( " .uslp " ) ;
2015-10-28 08:58:16 -04:00
FString Text ;
TSharedRef < TJsonWriter < > > Writer = TJsonWriterFactory < > : : Create ( & Text ) ;
( * It ) - > Save ( Writer . Get ( ) ) ;
Writer - > Close ( ) ;
FFileHelper : : SaveStringToFile ( Text , * SimpleProfileFileName ) ;
2014-03-14 14:13:41 -04:00
}
}
2014-09-09 12:20:43 -04:00
void FLauncherProfileManager : : SaveProfiles ( )
{
for ( TArray < ILauncherProfilePtr > : : TIterator It ( SavedProfiles ) ; It ; + + It )
{
2015-10-28 08:58:16 -04:00
SaveJSONProfile ( ( * It ) . ToSharedRef ( ) ) ;
2014-09-09 12:20:43 -04:00
}
}