The process of cooking would ensure that every BP derived from a C++ base using sparse class data would have its own sparse class data instance, as the serialization function would create an instance on save/load. This could potentially result in a lot of redundant instances that don't override any data from their archetype.
These changes allow the API for accessing sparse class data to optionally fallback to using the archetype data when possible (controlled via the EGetSparseClassDataMethod enum), though any existing code already using GetOrCreateSparseClassData (or the UHT wrapper) will continue to always create a new instance.
BPGC serialization has been updated to only save the sparse class data when it has overridden data from its archetype, and the loading code will now avoid creating the instance when no override data has been saved. This allows new code to take advantage of EGetSparseClassDataMethod by choosing to reference the archetype data instead, and the engine has also been updated to avoid calling GetOrCreateSparseClassData where possible.
Anything that requires a mutable sparse class data instance should still use GetOrCreateSparseClassData (or the UHT wrapper that doesn't take EGetSparseClassDataMethod), as otherwise you may edit data belonging to your archetype (which is why GetSparseClassData returns const data).
#preflight 61b28ecdc01c89f906c4d72f
#rb Fred.Kimberley, Thomas.Sarkanen
#ROBOMERGE-AUTHOR: jamie.dale
#ROBOMERGE-SOURCE: CL 18442650 via CL 18443219 via CL 18443223 via CL 18443224 via CL 18444418 via CL 18445355
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v897-18405271)
[CL 18445518 by jamie dale in ue5-release-engine-test branch]
Tim.Smith
[FYI] Tim.Smith
#preflight skip
#ROBOMERGE-AUTHOR: daniel.lamb
#ROBOMERGE-SOURCE: CL 18325461 via CL 18326818 via CL 18326973 via CL 18327001 via CL 18328442 via CL 18328531
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v895-18170469)
[CL 18328632 by daniel lamb in ue5-release-engine-test branch]
This represents UE4/Main @18073326, Release-5.0 @18081140 and Dev-PerfTest @18045971
[CL 18081471 by aurel cordonnier in ue5-release-engine-test branch]
This represents UE4/Main @17911760, Release-5.0 @17915875 and Dev-PerfTest @17914035
[CL 17918595 by aurel cordonnier in ue5-release-engine-test branch]
#rb trivial
#rnx
#ROBOMERGE-AUTHOR: tim.smith
#ROBOMERGE-SOURCE: CL 17491149 via CL 17491166 via CL 17491168 via CL 17491170
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v870-17433530)
#ROBOMERGE[STARSHIP]: UE5-Main
[CL 17491173 by tim smith in ue5-release-engine-test branch]
1) Functions added for LiveCoding have been removed and the data is now just a static.
2) Consolidated defered registration into a single routine. This includes CppStructOps registration where every routine was over 100 bytes in length.
3) Removed the extra argument in function registration to avoid 7 bytes on windows
4) Fixed a typo in a macro name.
#b none
#rnx
#ROBOMERGE-AUTHOR: tim.smith
#ROBOMERGE-SOURCE: CL 17490728 via CL 17490835 via CL 17490836 via CL 17490837
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v870-17433530)
#ROBOMERGE[STARSHIP]: UE5-Main
[CL 17490838 by tim smith in ue5-release-engine-test branch]
#rb trivial
#rnx
#ROBOMERGE-SOURCE: CL 17301841 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v861-17282326)
[CL 17301846 by tim smith in ue5-release-engine-test branch]
#rb none
#rnx
#ROBOMERGE-SOURCE: CL 17034854 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v846-17029325)
[CL 17035677 by tim smith in ue5-release-engine-test branch]
All code is still based on the UE_RIGVM_UCLASS_BASED_STORAGE_DISABLED define, which is turned on.
So the feature / changes don't affect anything just yet.
#rb na
[FYI] jack.cai halfdan.ingvarsson
#jira na
#ROBOMERGE-SOURCE: CL 16970759 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v838-16927207)
[CL 16970901 by helge mathee in ue5-release-engine-test branch]
This allows you to test whether a particular interface instance (implemented as a UInterface) has been implemented by a UObject, or whether it's been implemented by a standard C++ type. This is useful if you have an interface that _may_ be implemented by a UObject, but isn't required to be.
#rb Tim.Smith
#preflight 60fb64cd8fe7e0000143f3de
#ROBOMERGE-SOURCE: CL 16954784 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v838-16927207)
[CL 16954797 by jamie dale in ue5-release-engine-test branch]
#rb trivial
#rnx
#ROBOMERGE-SOURCE: CL 16949693 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v838-16927207)
#ROBOMERGE[bot1]: Dev-EngineMerge
[CL 16949696 by tim smith in ue5-release-engine-test branch]