- The mirage specific code is disabled behind the define UE_USE_VIRTUALBULKDATA, this means that some code paths in Texture/Mesh are much more complex than they need to be as we support both old and new paths. Once the system has been turned on and confirmed to cause no issues then this will be stripped out.
- SavePackageUtilities.cpp, SavePackage.cpp and SavePackage2.cpp are editgrates rather than integrations as those files have changes in DevCooker that we don't want to bring over immediately.
- Also includes a prototype system for storing bulkdata in a sidecar file in the workspace domain rather than in the .uasset/.umap file which although has been discontinued as part of mirage, will have applications for future work for non-virtualized projects and/or text based assets.
#rb Patrick.Finegan (all changes have been reviewed when submitted to Dev-Cooker)
#tests Cooking and running ShooterGame/Frosty and other sample programs using megascan assets
#rnx
#preflight 608be50d870cf400013ff99d
[CL 16167285 by paul chipchase in ue5-main branch]
Saves 100ms in Engine::Init() w/o UAssetManager::Push/PopBulkScanning optimization and 35ms with it, measured on Gen5 for an internal project.
#rb matt.peters
[CL 16142419 by Johan Torp in ue5-main branch]
Error out when there is an error on the linker save during export serialization
LinkerSave will now set an error on the archive when a name is unable to be mapped and during serialization
Still run save cleanup for a package if errors are encountered
#rb Matt.Peters
#jira FROST-2374
#preflight 608882a038dfe40001edf3dd
[CL 16133989 by Francis Hurteau in ue5-main branch]
The following code would call the int overload rather than the name overload when passed an EName constant, which could easily lead to confusion and bugs:
using FMyId = uint8;
void DoThing(FName);
void DoThing(FMyId);
DoThing(NAME_Actor);
The change to use enum class requires that any code that actually deals with EName as an int (mostly internal name code and serialisation) be updated to explicitly cast, but prevents the implicit conversion that causes the issue above.
In order to preserve the NAME_X aliases that the old-style enum added to the global scope, new aliases have been added that point to the EName scoped versions. Unfortunately these can cause shadowing warnings if NAME_X is defined in the local scope, as the old-style enum used to allow that without shadowing, however there is no way to prevent this so we'll just need to fix any warnings that occur.
#rb Johan.Torp
#preflight 6087e06349a9840001414708
[CL 16126708 by Jamie Dale in ue5-main branch]
1) Changed the pre/post compile notifications from module notifications to process commands.
2) Added server command to notify that we want re-instance patching (two phase)
3) Added support for two phase patching to enable re-instancing without all the limitations.
4) Added a null CDO check for old blueprint classes (approved by Phillip)
#rb ben.marsh
#rnx
#preflight 6086e3481046fb000183c2d4
[CL 16115620 by Tim Smith in ue5-main branch]
These existed as an optimization for USelection to quickly know if an object was selected, without having to test its array. UTypedElementList has that optimization embedded, so at this point the selection annotations are just extra state to keep in-sync, and failure to do so has already lead to bugs.
This change removes them in the simplest way possible, by using a function pointer to callback into editor code from core/engine code (as core/engine cannot directly access the global selection state), though longer-term we probably want to remove IsSelected/IsSelectedInEditor from UObject and let specific systems provide that functionality if they need it (eg, AActor/UActorComponent could provide it by getting the selection set from the owner world, rather than the global state).
#rb Brooke.Hubert
#preflight 607de942e7a5ac0001a6b7d6
[CL 16075785 by Jamie Dale in ue5-main branch]
- Added a way for UEdGraphNode_Comment to override its global editor selection state.
- Updated UControlRigGraph to use that method, rather than directly adjust GSelectedObjectAnnotation.
#rb Brooke.Hubert
[CL 16052224 by Jamie Dale in ue5-main branch]
Allocations came from ULevelStreamingDynamic::PostLoad() -> IsValidStreamingLevel() -> FPackageName::DoesPackageExist() -> TryConvertToMountedPathComponents()
#rb matt.peters
[CL 16050266 by Johan Torp in ue5-main branch]
Interleave polling of packages in external read queue with processing of normal work queue nodes.
#rb per.larsson, carlmagnus.nordin
#rnx
[CL 16049103 by PJ Kack in ue5-main branch]
Changes to serialization to add a serialized reference to the struct and properly specify dependencies.
Use TPropertyValueIterator to recover nested UObject* for GC.
Make sure to use struct wrappers rather than CppStructOps for init and destruction.
Fix cleanup call from SetSparseClassDataStruct to only set the new struct AFTER destrUctors etc. have been called.
#rb Fred.Kimberley,Jurre.deBaare
[CL 16048941 by Thomas Sarkanen in ue5-main branch]