UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
InstanceDataManager.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "SceneTypes.h"
8
10class HHitProxy;
14
37
39{
40public:
41
42 enum class FDirtyType
43 {
45 Full,
46 };
47
51 virtual void InstanceDataManagerMarkDirty(FDirtyType DirtyFlags) = 0;
52
57};
58
68{
69public:
70 //ENGINE_API FInstanceDataManager(IInstanceDataProvider* InInstanceDataProvider);
72
76 enum class ETrackingState : uint8
77 {
78 // In the initial state, there is no proxy and therefore changes do not need to be tracked, e.g., during initial setup of an ISM component.
79 Initial,
80 // Tracking changes to send on next flush
81 Tracked,
82 // Prevent any changes from being tracked (e.g., if we have no renderer)
84 // In the optimized state there's no need to track any delta changes, but if anything changes at all we must rebuild.
85 Optimized,
86 };
87
93 void RemoveAtSwap(int32 InstanceIndex);
94 void RemoveAt(int32 InstanceIndex);
95
96 void TransformChanged(int32 InstanceIndex);
99
100 void CustomDataChanged(int32 InstanceIndex);
101
102 void BakedLightingDataChanged(int32 InstanceIndex);
104
106
107#if WITH_EDITOR
109#endif
110
112
113 void ClearInstances();
114
116
122
128
132 void ClearChangeTracking();
133
135
137
140
141#if DO_GUARD_SLOW
142 void ValidateMapping() const;
143#else
144 inline void ValidateMapping() const {};
145#endif
146
147#if WITH_EDITOR
150#endif
152
155 void Serialize(FArchive& Ar, bool bCooked);
156
163
167
168protected:
169 static bool ShouldUsePrecomputed();
170
172
174
175 template<EChangeFlag Flag>
176 inline void MarkChangeHelper(int32 InstanceIndex);
177 template<EChangeFlag Flag>
178 inline void MarkChangeHelper(FPrimitiveInstanceId InstanceId);
179
181
182 bool HasIdentityMapping() const;
183
184 void FreeInstanceId(FPrimitiveInstanceId InstanceId);
185
188
193
195
196#if WITH_EDITOR
197 // TODO: implement
199
204
209
210#endif
212
213 // Change set.
215
216 // Id allocation tracking
219
226
229
231
232 // Must track this to detect changes
235 float AbsMaxDisplacement = 0.0f;
237};
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
FPlatformTypes::SIZE_T SIZE_T
An unsigned integer the same size as a pointer, the same as UPTRINT.
Definition Platform.h:1150
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
uint8_t uint8
Definition binka_ue_file_header.h:8
Definition Archive.h:1208
Definition InstanceAttributeTracker.h:67
EFlag
Definition InstanceAttributeTracker.h:79
Definition InstanceDataManager.h:68
void ValidateMapping() const
Definition InstanceDataManager.h:144
ETrackingState
Definition InstanceDataManager.h:77
int32 NumCustomDataFloats
Definition InstanceDataManager.h:234
void InitChangeSet(const struct FChangeDesc2 &ChangeDesc, const FInstanceDataManagerSourceDataDesc &ComponentData, FInstanceUpdateChangeSet &ChangeSet)
ENGINE_API SIZE_T GetAllocatedSize() const
Definition InstanceDataManager.cpp:927
void RemoveAtSwap(int32 InstanceIndex)
Definition InstanceDataManager.cpp:303
void FreeInstanceId(FPrimitiveInstanceId InstanceId)
Definition InstanceDataManager.cpp:863
FRenderBounds MeshBounds
Definition InstanceDataManager.h:236
void CustomDataChanged(int32 InstanceIndex)
Definition InstanceDataManager.cpp:425
void TransformChanged(int32 InstanceIndex)
Definition InstanceDataManager.cpp:401
static bool ShouldUsePrecomputed()
Definition InstanceDataManager.cpp:933
void BakedLightingDataChanged(int32 InstanceIndex)
Definition InstanceDataManager.cpp:431
FPrecomputedInstanceSpatialHashDataPtr PrecomputedOptimizationData
Definition InstanceDataManager.h:230
ETrackingState GetState() const
Definition InstanceDataManager.h:136
uint8 bNumCustomDataChanged
Definition InstanceDataManager.h:222
ENGINE_API TSharedPtr< FInstanceDataSceneProxy, ESPMode::ThreadSafe > GetProxy()
Definition InstanceDataManager.cpp:894
ENGINE_API TSharedPtr< FInstanceDataSceneProxy, ESPMode::ThreadSafe > GetOrCreateProxy()
Definition InstanceDataManager.cpp:889
bool HasIdentityMapping() const
Definition InstanceDataManager.cpp:858
float AbsMaxDisplacement
Definition InstanceDataManager.h:235
void RemoveAt(int32 InstanceIndex)
Definition InstanceDataManager.cpp:349
void ClearChangeTracking()
Definition InstanceDataManager.cpp:782
void ReadCookedRenderData(FArchive &Ar)
Definition InstanceDataManager.cpp:1105
uint8 bTransformChangedAllInstances
Definition InstanceDataManager.h:223
void BakedLightingDataChangedAll()
Definition InstanceDataManager.cpp:438
void NumCustomDataChanged()
Definition InstanceDataManager.cpp:450
uint8 bPrimitiveTransformChanged
Definition InstanceDataManager.h:224
void TransformsChangedAll()
Definition InstanceDataManager.cpp:413
TArray< int32 > Optimize(FInstanceDataManagerSourceDataDesc &&ComponentData, bool bShouldRetainIdMap)
Definition InstanceDataManager.cpp:1155
FInstanceDataFlags AllChangedFlags
Definition InstanceDataManager.h:221
FInstanceAttributeTracker InstanceUpdateTracker
Definition InstanceDataManager.h:214
FInstanceDataFlags Flags
Definition InstanceDataManager.h:233
void GatherDefaultData(const FInstanceDataManagerSourceDataDesc &ComponentData, FInstanceUpdateChangeSet &ChangeSet) const
Definition InstanceDataManager.cpp:549
void ClearInstances()
Definition InstanceDataManager.cpp:490
void MarkComponentRenderInstancesDirty()
Definition InstanceDataManager.cpp:850
void CreateExplicitIdentityMapping()
Definition InstanceDataManager.cpp:805
bool HasAnyChanges() const
Definition InstanceDataManager.h:121
ETrackingState TrackingState
Definition InstanceDataManager.h:220
int32 IdSearchStartIndex
Definition InstanceDataManager.h:218
void MarkChangeHelper(int32 InstanceIndex)
Definition InstanceDataManager.cpp:821
void InitChangeSet(const FInstanceDataManagerSourceDataDesc &ComponentData, FInstanceUpdateChangeSet &ChangeSet) const
Definition InstanceDataManager.cpp:579
int32 GetMaxAllocatedInstanceId() const
Definition InstanceDataManager.cpp:800
ENGINE_API bool HasAnyInstanceChanges() const
Definition InstanceDataManager.cpp:505
TBitArray ValidInstanceIdMask
Definition InstanceDataManager.h:217
ENGINE_API bool FlushChanges(FInstanceDataManagerSourceDataDesc &&ComponentData)
Definition InstanceDataManager.cpp:598
uint8 bAnyInstanceChange
Definition InstanceDataManager.h:225
TWeakObjectPtr< UPrimitiveComponent > PrimitiveComponent
Definition InstanceDataManager.h:228
TSharedPtr< class FUpdatableInstanceDataSceneProxy, ESPMode::ThreadSafe > GetOrCreateProxyInternal()
Definition InstanceDataManager.cpp:878
TSharedPtr< class FUpdatableInstanceDataSceneProxy, ESPMode::ThreadSafe > InstanceDataProxy
Definition InstanceDataManager.h:227
void PrimitiveTransformChanged()
Definition InstanceDataManager.cpp:478
Definition InstanceDataSceneProxy.h:15
Definition InstanceUpdateChangeSet.h:298
Definition InstanceUpdateChangeSet.h:284
Definition PrimitiveSceneProxy.h:296
Definition HitProxies.h:135
Definition InstanceDataManager.h:39
virtual FInstanceDataManagerSourceDataDesc GetInstanceDataSourceDesc()=0
FDirtyType
Definition InstanceDataManager.h:43
virtual void InstanceDataManagerMarkDirty(FDirtyType DirtyFlags)=0
Definition Array.h:670
Definition AndroidPlatformMisc.h:14
Type
Definition EngineTypes.h:3789
@ Movable
Definition EngineTypes.h:3812
Definition InstanceDataManager.cpp:515
Definition InstanceDataManager.h:20
FRenderBounds MeshBounds
Definition InstanceDataManager.h:23
FInstanceDataFlags Flags
Definition InstanceDataManager.h:24
FMatrix PrimitiveLocalToWorld
Definition InstanceDataManager.h:21
int32 NumCustomDataFloats
Definition InstanceDataManager.h:32
EComponentMobility::Type ComponentMobility
Definition InstanceDataManager.h:22
FPrimitiveMaterialPropertyDescriptor PrimitiveMaterialDesc
Definition InstanceDataManager.h:26
TFunction< void(FInstanceUpdateChangeSet &ChangeSet)> BuildChangeSet
Definition InstanceDataManager.h:35
int32 NumInstances
Definition InstanceDataManager.h:29
Definition InstanceDataTypes.h:19
Definition SceneTypes.h:237
Definition RenderTransform.h:272
Definition WeakObjectPtrTemplates.h:25
Definition InstanceDataTypes.h:36