UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
ISMInstanceDataManager.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;
11
17{
23
24 // The number of instances that will be allocated in the proxy
26 // Number of instances in the source (e.g., the component)
28 //
30
31 // Callback to fill in the required change set use with delta-update capable onwing components.
32 // TODO: move elsewhere?
34};
35
45{
46public:
48
52 enum class ETrackingState : uint8
53 {
54 Initial, // 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.
55 Tracked,
57 Optimized, // In the optimized state there's no need to track any delta changes, but if anything changes at all we must rebuild.
58 };
59
60 enum class EMode : uint8
61 {
62 Default,
63 Legacy, // In this mode, we create a legacy supporting proxy.
64 ExternalLegacyData // In this mode, it is illegal to call the incremental state tracking methods & updates can only be sent to the proxy if there has been and extranal one queued.
65 };
66
70
73 EMode GetMode() const { return Mode; }
74
76
77 void RemoveAtSwap(int32 InstanceIndex);
78
79 void RemoveAt(int32 InstanceIndex);
80
81 void TransformChanged(int32 InstanceIndex);
83
85
86 void CustomDataChanged(int32 InstanceIndex);
87
88 void BakedLightingDataChanged(int32 InstanceIndex);
89
91
93
94#if WITH_EDITOR
96#endif
97
99
101
102
103#if USE_NULL_RHI
108 inline bool HasAnyChanges() const { return false;}
109#else
115#endif
117
118 //
120
126
130 void ClearChangeTracking();
131
132 int32 GetMaxInstanceId() const;
133
135
137
138 ETrackingState GetState() const { return TrackingState; }
139
143
144#if DO_GUARD_SLOW
145 void ValidateMapping() const;
146#else
147 inline void ValidateMapping() const {};
148#endif
149
154
158
159
160 inline void ResetComponentDirtyTracking() { bComponentMarkedDirty = false; }
161
168
169#if WITH_EDITOR
170 // Early out test to save performance if no features are enabled that require BeginCacheForCookedPlatformData to be called
172
173 void BeginCacheForCookedPlatformData(const ITargetPlatform* TargetPlatform, FInstanceUpdateComponentDesc &&ComponentData, TStridedView<FMatrix> InstanceTransforms);
174
175 void WriteCookedRenderData(FArchive& Ar, FInstanceUpdateComponentDesc &&ComponentData, TStridedView<FMatrix> InstanceTransforms);
176#endif
178
179private:
180 static bool ShouldUsePrecomputed();
181
182 using EChangeFlag = FInstanceAttributeTracker::EFlag;
183
184 template<EChangeFlag Flag>
185 inline void MarkChangeHelper(int32 InstanceIndex);
186 template<EChangeFlag Flag>
187 inline void MarkChangeHelper(FPrimitiveInstanceId InstanceId);
188
189 void MarkComponentRenderInstancesDirty();
190
191 bool HasIdentityMapping() const;
192
193 void FreeInstanceId(FPrimitiveInstanceId InstanceId);
194
195 void InitChangeSet(const union FChangeDesc &ChangeDesc, const FInstanceUpdateComponentDesc &ComponentData, FISMInstanceUpdateChangeSet &ChangeSet);
196
197#if WITH_EDITOR
202#endif
203
204 // Change set.
205 FInstanceAttributeTracker InstanceUpdateTracker;
206
207 // Id allocation tracking
208 TBitArray<> ValidInstanceIdMask;
209 int32 IdSearchStartIndex = 0;
210
211 EMode Mode = EMode::Default;
213
214 uint8 bNumCustomDataChanged : 1;
215 uint8 bBakedLightingDataChanged : 1;
216 uint8 bTransformChangedAllInstances : 1;
217#if WITH_EDITOR
219#endif
220 uint8 bPrimitiveTransformChanged : 1;
221 uint8 bAnyInstanceChange : 1;
222
223 uint8 bComponentMarkedDirty : 1;
224 uint8 bEnableTracking : 1;
225 uint8 bFirstFlush : 1;
226
228 TWeakObjectPtr<UPrimitiveComponent> PrimitiveComponent = nullptr;
229
231
232 using PrecomputedOptimizationDataPtr = FISMCInstanceDataSceneProxy::FISMPrecomputedSpatialHashDataPtr;
233
234 PrecomputedOptimizationDataPtr PrecomputedOptimizationData;
235
236 // Must track this to detect changes
237 // TODO: make event driven and save the storage?
238 FMatrix PrimitiveLocalToWorld;
239 FInstanceDataFlags Flags;
240 int32 NumCustomDataFloats = 0;
241 float AbsMaxDisplacement = 0.0f;
242 FRenderBounds StaticMeshBounds;
243};
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
TSharedPtr< const FISMPrecomputedSpatialHashData, ESPMode::ThreadSafe > FISMPrecomputedSpatialHashDataPtr
Definition ISMInstanceDataSceneProxy.h:71
Definition ISMInstanceUpdateChangeSet.h:13
Definition InstanceAttributeTracker.h:67
EFlag
Definition InstanceAttributeTracker.h:79
Definition InstanceDataSceneProxy.h:15
Definition ISMInstanceDataManager.h:45
bool FlushChanges(FInstanceUpdateComponentDesc &&ComponentData, bool bNewPrimitiveProxy)
Definition ISMInstanceDataManager.cpp:437
void ClearChangeTracking()
Definition ISMInstanceDataManager.cpp:742
void BakedLightingDataChanged(int32 InstanceIndex)
Definition ISMInstanceDataManager.cpp:285
void RemoveAtSwap(int32 InstanceIndex)
Definition ISMInstanceDataManager.cpp:153
ENGINE_API bool HasAnyInstanceChanges() const
Definition ISMInstanceDataManager.cpp:344
EMode GetMode() const
Definition ISMInstanceDataManager.h:73
const TSharedPtr< FISMCInstanceDataSceneProxy, ESPMode::ThreadSafe > & GetProxy() const
Definition ISMInstanceDataManager.h:141
void ValidateMapping() const
Definition ISMInstanceDataManager.h:147
void TransformChanged(int32 InstanceIndex)
Definition ISMInstanceDataManager.cpp:255
int32 GetMaxInstanceIndex() const
Definition ISMInstanceDataManager.cpp:769
ENGINE_API void MarkForRebuildFromLegacy(TUniquePtr< FStaticMeshInstanceData > &&LegacyInstanceData, const TArray< int32 > &InstanceReorderTable, const TArray< TRefCountPtr< HHitProxy > > &HitProxies)
Definition ISMInstanceDataManager.cpp:927
ENGINE_API SIZE_T GetAllocatedSize() const
Definition ISMInstanceDataManager.cpp:966
void BakedLightingDataChangedAll()
Definition ISMInstanceDataManager.cpp:292
void TransformsChangedAll()
Definition ISMInstanceDataManager.cpp:267
void CreateExplicitIdentityMapping()
Definition ISMInstanceDataManager.cpp:774
int32 GetMaxInstanceId() const
Definition ISMInstanceDataManager.cpp:764
ENGINE_API TSharedPtr< FISMCInstanceDataSceneProxy, ESPMode::ThreadSafe > GetOrCreateProxy(ERHIFeatureLevel::Type InFeatureLevel)
Definition ISMInstanceDataManager.cpp:855
ETrackingState
Definition ISMInstanceDataManager.h:53
ETrackingState GetState() const
Definition ISMInstanceDataManager.h:138
void ResetComponentDirtyTracking()
Definition ISMInstanceDataManager.h:160
void RemoveAt(int32 InstanceIndex)
Definition ISMInstanceDataManager.cpp:202
void CustomDataChanged(int32 InstanceIndex)
Definition ISMInstanceDataManager.cpp:279
EMode
Definition ISMInstanceDataManager.h:61
void NumCustomDataChanged()
Definition ISMInstanceDataManager.cpp:304
void PrimitiveTransformChanged()
Definition ISMInstanceDataManager.cpp:332
bool HasAnyChanges() const
Definition ISMInstanceDataManager.h:114
void ReadCookedRenderData(FArchive &Ar)
Definition ISMInstanceDataManager.cpp:1151
ENGINE_API void SetMode(EMode InMode)
Definition ISMInstanceDataManager.cpp:66
void ClearIdTracking(int32 InNumInstances)
Definition ISMInstanceDataManager.cpp:724
void OnRegister(int32 InNumInstances)
Definition ISMInstanceDataManager.cpp:972
Definition PrimitiveSceneProxy.h:296
Definition HitProxies.h:135
Definition Array.h:670
Definition AndroidPlatformMisc.h:14
Definition RefCounting.h:454
Definition SharedPointer.h:692
Definition StridedView.h:44
Definition UniquePtr.h:107
Type
Definition EngineTypes.h:3789
@ Movable
Definition EngineTypes.h:3812
Type
Definition RHIFeatureLevel.h:20
Definition ISMInstanceDataSceneProxy.h:22
Definition ISMInstanceDataManager.h:17
FInstanceDataFlags Flags
Definition ISMInstanceDataManager.h:21
int32 NumSourceInstances
Definition ISMInstanceDataManager.h:27
FMatrix PrimitiveLocalToWorld
Definition ISMInstanceDataManager.h:18
TFunction< void(FISMInstanceUpdateChangeSet &ChangeSet)> BuildChangeSet
Definition ISMInstanceDataManager.h:33
FRenderBounds StaticMeshBounds
Definition ISMInstanceDataManager.h:20
int32 NumCustomDataFloats
Definition ISMInstanceDataManager.h:29
FPrimitiveMaterialPropertyDescriptor PrimitiveMaterialDesc
Definition ISMInstanceDataManager.h:22
int32 NumProxyInstances
Definition ISMInstanceDataManager.h:25
EComponentMobility::Type ComponentMobility
Definition ISMInstanceDataManager.h:19
Definition InstanceDataTypes.h:19
Definition SceneTypes.h:237
Definition RenderTransform.h:272
Definition PimplPtr.h:50
Definition WeakObjectPtrTemplates.h:25
Definition ISMInstanceDataManager.cpp:357
Definition InstanceDataTypes.h:36