- Also icon changes/tooltip text updates/small layout tweaks
- Remove bShowDefaultValuePropertyEditor config variable since default values tab can now be removed from the UI
- Cleanup: remove unused EMemberFieldPosition enum and PositionFlags member for FUserDefinedStructureFieldLayout
#jira UETOOL-2776
#rb louise.rasmussen
#preflight 6137db6a2d09b900013dc49b
[CL 17458173 by Steven Dao in ue5-main branch]
Add the concept of pre-exploration of dependencies - searching assetregistry or target domain dependencies of the set of requested packages up front, to find all packages that will be cooked and allow us to do asynchronous and batch operations on them.
Convert FRequestCluster into an FPackageData container, holding packages in a substate of EPackageState::Request. This allows us to create a new RequestClusters when we encounter a package that was not found in the initial discovery.
Add hybriditerative mode for iterative cooks; this uses targetdomain keys to check for packages that exist from the previous cook, rather tracing the dependency graph to find all packages that transitively reference packages with modified guids.
Modify AssetRegistryGenerator to use a TMap of iteratively loaded packages that can be edied as packages cook, rather than using a const previous state; this supports hybrid iterative where we do not calculate the list of iterative packages until we encounter them in a request cluster.
#rb Zousar.Shaker
#rnx
[CL 17373295 by Matt Peters in ue5-main branch]
Updating FVirtualizedUntypedBulkData and textures to use the BulkDataRegistry.
BulkDataRegistry: Add get/put accessors for the cached BulkDataList of packages.
EditorDomain: Move ClassDigests into a global variable that can be shared with BulkDataRegistry.
EditorDomain: Improve performance of GetFileSize by fetching metadata only.
Tickable Cook Objects, for systems used by the cooker that need to be ticked.
Implementation of the the BulkDataRegistry that uses the DDC cache for persistent storage of the BulkDataList.
#rb Devin.Doucette, Paul.Chipchase, Zousar.Shaker
[CL 16768772 by Matt Peters in ue5-main branch]
This saves a considerable amount of time when UContentBrowserAssetDataSource::CreateAssetFilter builds a compiled filter.
#rb francis.hurteau
[CL 16222546 by Richard Malo in ue5-main branch]
* Texture Work
- When importing a jpeg we will now check the config file to see if we should try and keep the data in compressed JPEG format and decompress it as it is requested rather than returning the data in raw uncompressed format.
- If the data is kept in jpeg compressed format we can initialize the texture via the new method InitWithCompressedSourceData instead. (note that we can probably merge ::InitWithCompressedSourceData and ::Init but that introduces further risk, this way we know that ONLY textures that were originally jpeg can be going through ::InitWithCompressedSourceData for now)
- We now record the compression format of the bulkdata in FTextureSource via 'CompressionFormat' an enum rather than a single bool 'bPNGCompressed' which only wqorked for png format.
- We should deprecate bPNGCompressed at some point and loading existing textures off disk will not have 'bPNGCompressed' and 'CompressionFormat' in sync, fixing this is out of scope for EA work.
- Note that when PNG compression is used we can decompress the data, use that, then recompress it without loss in quality, the same is not to be said for JPEG so if the data is modified by a call to ::LockMip/::Unlock mip the data will end up falling back to being stored as a compressed PNG or raw data. If this occurs we will log a warning.
- To reduce the number of places where this happens a new ::LockMipReadOnly method has been added, locking the texture source as read only will not replace the stored data when unlocked (as read only means no changes)
- Attempting to lock a texture for a different mode than it is currently locked for is considered a programming error and will raise an assert.
- Updated the 'SourceCompression' asset registry tag. This can be seen when hovering the mouse over the asset in the content browser and will show which compression is being used on the source data, png, jpeg or none.
* NormalMapIdentification/PaperAtlasTextureHelpers
- Switched to use LockMipReadOnly as we never modify the locked mip data.
- Every other remaining place in code that I could find that used LockMip() is actually calling that to edit the data.
* JPEG Decompression
- Worth noting that in early access the jpeg compression is slower than decompressing the same data if it was stored in compressed png format.
- On main the jpeg decompressor has been upgraded and the data ends up being smaller AND faster to decode, so wins all around.
- For early access we are willing to take the increase decoding cost to reduce the risk of the submit.
#rb Mark.Lintott, PJ.Kack, Danny.Couture
#[fyi] Jonathan.Bard
#lockdown Nick.Whiting
#jira UE-113796
#ushell-cherrypick of 16051246 by paul.chipchase
#preflight 607dcf0de7a5ac0001985d44
[CL 16054157 by paul chipchase in ue5-main branch]