UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
ChaosMarshallingManager.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2#pragma once
3
5#include "Chaos/Defines.h"
8#include "Chaos/ParallelFor.h"
12
14
15namespace Chaos
16{
17class FDirtyPropertiesManager;
18class FPullPhysicsData;
19
55
60
62{
63public:
65 {
66 if(Base->GetDirtyIdx() == INDEX_NONE)
67 {
68 FDirtyProxiesBucket& Bucket = DirtyProxyBuckets[(uint32)Base->GetType()];
69 ++DirtyProxyBucketInfo.Num[(uint32)Base->GetType()];
70 ++DirtyProxyBucketInfo.TotalNum;
71
72 const int32 Idx = Bucket.ProxiesData.Num();
73 Base->SetDirtyIdx(Idx);
74 Bucket.ProxiesData.Add(Base);
75 }
76 }
77
78 // Batch proxy insertion, does not check DirtyIdx.
79 // Assumes proxies are the same type
80 template< typename TProxiesArray>
82 {
83 if(ProxiesArray.Num())
84 {
85 FDirtyProxiesBucket& Bucket = DirtyProxyBuckets[(uint32)ProxiesArray[0]->GetType()];
86 int32 Idx = Bucket.ProxiesData.Num();
87 Bucket.ProxiesData.Append(ProxiesArray);
88
89 for (IPhysicsProxyBase* Proxy : ProxiesArray)
90 {
91 Proxy->SetDirtyIdx(Idx++);
92 ensure(ProxiesArray[0]->GetType() == Proxy->GetType());
93 }
94
95 DirtyProxyBucketInfo.Num[(uint32)ProxiesArray[0]->GetType()] += ProxiesArray.Num();
96 DirtyProxyBucketInfo.TotalNum += ProxiesArray.Num();
97 }
98
99 }
100
101 // Forcefully removes the proxy from being dirty.
103 {
104 const int32 Idx = Base->GetDirtyIdx();
105 if(Idx != INDEX_NONE)
106 {
107 FDirtyProxiesBucket& Bucket = DirtyProxyBuckets[(uint32)Base->GetType()];
108 if(Idx == Bucket.ProxiesData.Num() - 1)
109 {
110 //last element so just pop
112 --DirtyProxyBucketInfo.Num[(uint32)Base->GetType()];
113 --DirtyProxyBucketInfo.TotalNum;
114 }
115 else if(Bucket.ProxiesData.IsValidIndex(Idx))
116 {
117 //update other proxy's idx
118 Bucket.ProxiesData.RemoveAtSwap(Idx);
119 Bucket.ProxiesData[Idx].SetDirtyIdx(Idx);
120 --DirtyProxyBucketInfo.Num[(uint32)Base->GetType()];
121 --DirtyProxyBucketInfo.TotalNum;
122 }
123
124 Base->ResetDirtyIdx();
125 }
126 }
127
131 {
132 FDirtyProxiesBucket& Bucket = DirtyProxyBuckets[(uint32)Base->GetType()];
133 for (int32 Idx = Bucket.ProxiesData.Num() - 1; Idx >= 0; Idx--)
134 {
135 if (Bucket.ProxiesData[Idx].Proxy == Base)
136 {
137 const int32 LastIdx = Bucket.ProxiesData.Num() - 1;
138
139 // Clear data from manager
140 Bucket.ProxiesData[Idx].Clear(Manager, Idx, GetShapesDirtyData());
141
142 if (Idx == LastIdx)
143 {
144 // Last element, pop to remove it
146 }
147 else
148 {
149 // Remove and swap with last element, update moved proxy's idx
150 Bucket.ProxiesData.RemoveAtSwap(Idx);
151
152 // Move data in manager for the swapped element
153 Bucket.ProxiesData[Idx].MoveData(Manager, /*FromIdx*/LastIdx, /*ToIdx*/Idx);
154 }
155
156 --DirtyProxyBucketInfo.Num[(uint32)Base->GetType()];
157 --DirtyProxyBucketInfo.TotalNum;
158
159 // There is only one entry per proxy
160 break;
161 }
162 }
163 }
164
165 // Only does the removal if no shapes are dirty.
167 {
168 const int32 Idx = Base->GetDirtyIdx();
169 if (Idx != INDEX_NONE)
170 {
171 FDirtyProxiesBucket& Bucket = DirtyProxyBuckets[(uint32)Base->GetType()];
172 if (Bucket.ProxiesData.IsValidIndex(Idx))
173 {
174 FDirtyProxy& ProxyData = Bucket.ProxiesData[Idx];
175 if (ProxyData.ShapeDataIndices.IsEmpty())
176 {
177 Remove(Base);
178 }
179 }
180 }
181 }
182
183 void Reset()
184 {
185 for(FDirtyProxiesBucket& Bucket : DirtyProxyBuckets)
186 {
187 Bucket.ProxiesData.Reset();
188 }
189
190 DirtyProxyBucketInfo.Reset();
191 ShapesData.Reset();
192 }
193
194 const FDirtyProxiesBucketInfo& GetDirtyProxyBucketInfo() const { return DirtyProxyBucketInfo; }
195 int32 NumDirtyShapes() const { return ShapesData.Num(); }
196
197 FShapeDirtyData* GetShapesDirtyData(){ return ShapesData.GetData(); }
198 FDirtyProxy& GetDirtyProxyAt(EPhysicsProxyType ProxyType, int32 Idx) { return DirtyProxyBuckets[(uint32)ProxyType].ProxiesData[Idx]; }
199
200 template <typename Lambda>
201 void ParallelForEachProxy(const Lambda& Func)
202 {
203 ::ParallelFor( TEXT("Chaos.PF"),DirtyProxyBucketInfo.TotalNum,1, [this,&Func](int32 Idx)
204 {
205 int32 BucketIdx, InnerIdx;
206 DirtyProxyBucketInfo.GetBucketIdx(Idx, BucketIdx, InnerIdx);
207 Func(InnerIdx, DirtyProxyBuckets[BucketIdx].ProxiesData[InnerIdx]);
208 });
209 }
210
211 template <typename Lambda>
212 void ParallelForEachProxy(const Lambda& Func) const
213 {
214 ::ParallelFor(DirtyProxyBucketInfo.TotalNum,[this,&Func](int32 Idx)
215 {
216 int32 BucketIdx, InnerIdx;
217 DirtyProxyBucketInfo.GetBucketIdx(Idx, BucketIdx, InnerIdx);
218 Func(InnerIdx, DirtyProxyBuckets[BucketIdx].ProxiesData[InnerIdx]);
219 });
220 }
221
222 template <typename Lambda>
223 void ForEachProxy(const Lambda& Func)
224 {
226 {
227 int32 Idx = 0;
228 for (FDirtyProxy& Dirty : DirtyProxyBuckets[BucketIdx].ProxiesData)
229 {
230 Func(Idx++, Dirty);
231 }
232 }
233 }
234
235 template <typename Lambda>
236 void ForEachProxy(const Lambda& Func) const
237 {
239 {
240 int32 Idx = 0;
241 for (const FDirtyProxy& Dirty : DirtyProxyBuckets[BucketIdx].ProxiesData)
242 {
243 Func(Idx++, Dirty);
244 }
245 }
246 }
247
248 void AddShape(IPhysicsProxyBase* Proxy,int32 ShapeIdx)
249 {
250 Add(Proxy);
251 FDirtyProxy& Dirty = DirtyProxyBuckets[(uint32)Proxy->GetType()].ProxiesData[(uint32)Proxy->GetDirtyIdx()];
252 for(int32 NewShapeIdx = Dirty.ShapeDataIndices.Num(); NewShapeIdx <= ShapeIdx; ++NewShapeIdx)
253 {
254 const int32 ShapeDataIdx = ShapesData.Add(FShapeDirtyData(NewShapeIdx));
255 Dirty.AddShape(ShapeDataIdx);
256 }
257 }
258
260 {
261 Add(Proxy);
262 FDirtyProxy& Dirty = DirtyProxyBuckets[(uint32)Proxy->GetType()].ProxiesData[Proxy->GetDirtyIdx()];
263
264 if(NumShapes < Dirty.ShapeDataIndices.Num())
265 {
266 Dirty.ShapeDataIndices.SetNum(NumShapes);
267 } else
268 {
269 for(int32 NewShapeIdx = Dirty.ShapeDataIndices.Num(); NewShapeIdx < NumShapes; ++NewShapeIdx)
270 {
271 const int32 ShapeDataIdx = ShapesData.Add(FShapeDirtyData(NewShapeIdx));
272 Dirty.AddShape(ShapeDataIdx);
273 }
274 }
275 }
276
277private:
278 FDirtyProxiesBucketInfo DirtyProxyBucketInfo;
280 TArray<FShapeDirtyData> ShapesData;
281};
282
283class FChaosMarshallingManager;
284
286{
292 int32 InternalStep; //The solver step this data will be associated with
293 int32 IntervalStep; //The step we are currently at for this simulation interval. If not sub-stepping both step and num steps are 1: step is [0, IntervalNumSteps-1]
294 int32 IntervalNumSteps; //The total number of steps associated with this simulation interval
296
297 TArray<ISimCallbackObject*> SimCallbackObjectsToAdd; //callback object registered at this specific time
298 TArray<ISimCallbackObject*> SimCallbackObjectsToRemove; //callback object removed at this specific time
299 TArray<FSimCallbackInputAndObject> SimCallbackInputs; //set of callback inputs pushed at this specific time
300 TArray<FSimCallbackCommandObject*> SimCommands; //commands to run (this is a one off command)
301
302 void Reset();
303 void ResetForHistory();
305 void ClearAsyncInputs();
306 void ClearSimCommands();
309};
310
314{
315public:
318
321 {
322 return ProducerData;
323 }
324
327 {
328 return ConsumerData;
329 }
330
333 {
334 ConsumerData = InPushData;
335 }
336
342
348
350 {
351 // Clear any dirty data from push data in history since we can't recreate a deleted physics proxy or particle during resimulation
352 if (HistoryQueue_Internal.Num() > 0)
353 {
354 if (ConsumerData)
355 {
356 // Remove from current PushData not yet put into history
358 }
359
360 // Remove from history PusData
361 for (FPushPhysicsData* PushDataHistoryEntry : HistoryQueue_Internal)
362 {
363 PushDataHistoryEntry->DirtyProxiesDataBuffer.RemoveWithoutDirtyIdx(ProxyBaseIn, PushDataHistoryEntry->DirtyPropertiesManager);
364 }
365 }
366 }
367
373
375 {
376 ensureAlwaysMsgf(!Chaos::CVars::bEnableAsyncInitBody, TEXT("This method is not safe when p.Chaos.EnableAsyncInitBody is true"));
377 return ProducerData->DirtyProxiesDataBuffer.GetDirtyProxyBucketInfo();
378 }
379
385
386 // Batch dirty proxies without checking DirtyIdx.
387 template <typename TProxiesArray>
393
395 {
396 UE_CHAOS_ASYNC_INITBODY_WRITESCOPELOCK(MarshallingManagerLock);
397 ProducerData->DirtyProxiesDataBuffer.AddShape(ProxyBaseIn, ShapeIdx);
398 }
399
405
407 {
408 UE_CHAOS_ASYNC_INITBODY_WRITESCOPELOCK(MarshallingManagerLock);
409 ProducerData->SimCallbackObjectsToAdd.Add(SimCallbackObject);
410 }
411
417
419 {
420 SimCommandsScheduled_Internal.Add(SimCommand);
421 }
422
424 {
425 return SimCommandsScheduled_Internal;
426 }
427
429 {
430 UE_CHAOS_ASYNC_INITBODY_WRITESCOPELOCK(MarshallingManagerLock);
431 SimCallbackObject->bPendingDelete_External = true;
432 ProducerData->SimCallbackObjectsToRemove.Add(SimCallbackObject);
433 }
434
436 {
437 ProducerData->SimCallbackInputs.Add(FSimCallbackInputAndObject{ SimCallbackObject, InputData });
438 }
440 CHAOS_API void Step_External(FReal ExternalDT, const int32 NumSteps = 1, bool bSolverSubstepped = false);
441
444
447
450
453
455 int32 GetExternalTimestamp_External() const { return ExternalTimestamp_External; }
456
458 FReal GetExternalTime_External() const { return ExternalTime_External; }
459
461 int32 GetInternalStep_External() const { return InternalStep_External; }
462
465
468
471
474 {
475 FPullPhysicsData* Result = nullptr;
476 PullDataQueue.Dequeue(Result);
477 return Result;
478 }
479
481
484
486 int32 GetNumHistory_Internal() const {return HistoryQueue_Internal.Num();}
487
489 FRWLock& GetMarshallingManagerLock() { return MarshallingManagerLock; }
490
491private:
492 std::atomic<FReal> ExternalTime_External; //the global time external thread is currently at
493 std::atomic<int32> ExternalTimestamp_External; //the global timestamp external thread is currently at (1 per frame)
494 std::atomic<FReal> SimTime_External; //the global time the sim is at (once Step_External is called this time advances, even though the actual sim work has yet to be done)
495 std::atomic<int32> InternalStep_External; //the current internal step we are pushing work into. This is not synced with external timestamp as we may sub-step. This should match the solver step
496
497 //push
498 FPushPhysicsData* ConsumerData; // The current internal PushData
499 FPushPhysicsData* ProducerData; // The external PushData before it's handed over to ExternalQueue
500 TArray<FPushPhysicsData*> ExternalQueue; //the data pushed from external thread with a time stamp
501 TSpscQueue<FPushPhysicsData*> PushDataPool; //pool to grab more push data from to avoid expensive reallocs
502 TArray<TUniquePtr<FPushPhysicsData>> BackingBuffer; //all push data is cleaned up by this
503 TArray<FPushPhysicsData*> HistoryQueue_Internal; //all push data still needed for potential rewinds. Latest data comes first
504 TArray<FSimCallbackCommandObject*> SimCommandsScheduled_Internal; // SimCommands scheduled for a future frame, will be inserted into PushData on the correct frame
505
506 //pull
507 FPullPhysicsData* CurPullData; //the current pull data sim is writing to
508 TSpscQueue<FPullPhysicsData*> PullDataQueue; //the results the simulation has written to. Consumed by external thread
509 TSpscQueue<FPullPhysicsData*> PullDataPool; //the pull data pool to avoid reallocs. Pushed by external thread, popped by internal
510 TArray<TUniquePtr<FPullPhysicsData>> BackingPullBuffer; //all pull data is cleaned up by this
511
512 std::atomic<int32> Delay;
513
514 int32 HistoryLength; //how long to keep push data for
515
516 CHAOS_API void PrepareExternalQueue_External();
517 CHAOS_API void PreparePullData();
518
520 FRWLock MarshallingManagerLock;
521};
522}; // namespace Chaos
#define ensureAlwaysMsgf(InExpression, InFormat,...)
Definition AssertionMacros.h:467
#define ensure( InExpression)
Definition AssertionMacros.h:464
#define UE_CHAOS_ASYNC_INITBODY_READSCOPELOCK(x)
Definition AsyncInitBodyHelper.h:66
#define UE_CHAOS_ASYNC_INITBODY_WRITESCOPELOCK(x)
Definition AsyncInitBodyHelper.h:65
@ INDEX_NONE
Definition CoreMiscDefines.h:150
void ParallelFor(int32 Num, TFunctionRef< void(int32)> Body, bool bForceSingleThread, bool bPumpRenderingThread=false)
Definition ParallelFor.h:481
#define TEXT(x)
Definition Platform.h:1272
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
EPhysicsProxyType
Definition PhysicsProxyBase.h:11
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition ChaosMarshallingManager.h:314
void EnqueueCommandScheduled_Internal(FSimCallbackCommandObject *SimCommand)
Definition ChaosMarshallingManager.h:418
FPullPhysicsData * GetCurrentPullData_Internal()
Definition ChaosMarshallingManager.h:467
CHAOS_API void Step_External(FReal ExternalDT, const int32 NumSteps=1, bool bSolverSubstepped=false)
Definition ChaosMarshallingManager.cpp:72
void RegisterSimCallbackObject_External(ISimCallbackObject *SimCallbackObject)
Definition ChaosMarshallingManager.h:406
FRWLock & GetMarshallingManagerLock()
Definition ChaosMarshallingManager.h:489
const FDirtyProxiesBucketInfo & GetDirtyProxyBucketInfo_External()
Definition ChaosMarshallingManager.h:374
TArray< FSimCallbackCommandObject * > & GetSimCommandsScheduled_Internal()
Definition ChaosMarshallingManager.h:423
void SetNumDirtyShapes(IPhysicsProxyBase *Proxy, int32 NumShapes)
Definition ChaosMarshallingManager.h:400
void AddDirtyProxy(IPhysicsProxyBase *ProxyBaseIn)
Definition ChaosMarshallingManager.h:337
CHAOS_API ~FChaosMarshallingManager()
Definition ChaosMarshallingManager.cpp:37
int32 GetInternalStep_External() const
Definition ChaosMarshallingManager.h:461
int32 GetDirtyProxyBucketInfoNum_External(EPhysicsProxyType Type)
Definition ChaosMarshallingManager.h:380
FPullPhysicsData * PopPullData_External()
Definition ChaosMarshallingManager.h:473
CHAOS_API void SetHistoryLength_Internal(int32 InHistoryLength)
Definition ChaosMarshallingManager.cpp:280
void RemoveDirtyProxy(IPhysicsProxyBase *ProxyBaseIn)
Definition ChaosMarshallingManager.h:343
void SetConsumerData_Internal(FPushPhysicsData *InPushData)
Definition ChaosMarshallingManager.h:332
int32 GetExternalTimestamp_External() const
Definition ChaosMarshallingManager.h:455
void SetTickDelay_External(int32 InDelay)
Definition ChaosMarshallingManager.h:464
CHAOS_API void FreeData_Internal(FPushPhysicsData *PushData)
Definition ChaosMarshallingManager.cpp:138
int32 GetNumHistory_Internal() const
Definition ChaosMarshallingManager.h:486
void RemoveDirtyProxyFromHistory_Internal(IPhysicsProxyBase *ProxyBaseIn)
Definition ChaosMarshallingManager.h:349
void AddDirtyProxyShape(IPhysicsProxyBase *ProxyBaseIn, int32 ShapeIdx)
Definition ChaosMarshallingManager.h:394
CHAOS_API void FreeDataToHistory_Internal(FPushPhysicsData *PushData)
Definition ChaosMarshallingManager.cpp:246
CHAOS_API void FreePullData_External(FPullPhysicsData *PullData)
Definition ChaosMarshallingManager.cpp:150
CHAOS_API void FinalizePullData_Internal(int32 LatestExternalTimestampConsumed, FReal SimStartTime, FReal DeltaTime)
Definition ChaosMarshallingManager.cpp:42
FReal GetExternalTime_External() const
Definition ChaosMarshallingManager.h:458
CHAOS_API TArray< FPushPhysicsData * > StealHistory_Internal(int32 NumFrames)
Definition ChaosMarshallingManager.cpp:300
FPushPhysicsData * GetProducerData_External()
Definition ChaosMarshallingManager.h:320
CHAOS_API FChaosMarshallingManager()
Definition ChaosMarshallingManager.cpp:22
void AddSimCallbackInputData_External(ISimCallbackObject *SimCallbackObject, FSimCallbackInput *InputData)
Definition ChaosMarshallingManager.h:435
void RegisterSimCommand_External(FSimCallbackCommandObject *SimCommand)
Definition ChaosMarshallingManager.h:412
void UnregisterSimCallbackObject_External(ISimCallbackObject *SimCallbackObject)
Definition ChaosMarshallingManager.h:428
void RemoveDirtyProxyIfNoShapesAreDirty(IPhysicsProxyBase *ProxyBaseIn)
Definition ChaosMarshallingManager.h:368
void AddDirtyProxiesUnsafe(TProxiesArray &ProxiesArray)
Definition ChaosMarshallingManager.h:388
CHAOS_API FPushPhysicsData * StepInternalTime_External()
Definition ChaosMarshallingManager.cpp:120
FPushPhysicsData * GetConsumerData_Internal()
Definition ChaosMarshallingManager.h:326
Definition ParticleDirtyFlags.h:1129
void Clear(FDirtyPropertiesManager &Manager, int32 Idx)
Definition ParticleDirtyFlags.h:1168
void MoveData(FDirtyPropertiesManager &Manager, int32 FromIdx, int32 ToIdx)
Definition ParticleDirtyFlags.h:1181
Definition ParticleDirtyFlags.h:1039
Definition ChaosMarshallingManager.h:62
void RemoveWithoutDirtyIdx(IPhysicsProxyBase *Base, FDirtyPropertiesManager &Manager)
Definition ChaosMarshallingManager.h:130
void AddMultipleUnsafe(TProxiesArray &ProxiesArray)
Definition ChaosMarshallingManager.h:81
FShapeDirtyData * GetShapesDirtyData()
Definition ChaosMarshallingManager.h:197
const FDirtyProxiesBucketInfo & GetDirtyProxyBucketInfo() const
Definition ChaosMarshallingManager.h:194
FDirtyProxy & GetDirtyProxyAt(EPhysicsProxyType ProxyType, int32 Idx)
Definition ChaosMarshallingManager.h:198
void Reset()
Definition ChaosMarshallingManager.h:183
void ForEachProxy(const Lambda &Func) const
Definition ChaosMarshallingManager.h:236
void ParallelForEachProxy(const Lambda &Func) const
Definition ChaosMarshallingManager.h:212
void SetNumDirtyShapes(IPhysicsProxyBase *Proxy, int32 NumShapes)
Definition ChaosMarshallingManager.h:259
void RemoveIfNoShapesAreDirty(IPhysicsProxyBase *Base)
Definition ChaosMarshallingManager.h:166
void ParallelForEachProxy(const Lambda &Func)
Definition ChaosMarshallingManager.h:201
void ForEachProxy(const Lambda &Func)
Definition ChaosMarshallingManager.h:223
void Add(IPhysicsProxyBase *Base)
Definition ChaosMarshallingManager.h:64
void Remove(IPhysicsProxyBase *Base)
Definition ChaosMarshallingManager.h:102
int32 NumDirtyShapes() const
Definition ChaosMarshallingManager.h:195
void AddShape(IPhysicsProxyBase *Proxy, int32 ShapeIdx)
Definition ChaosMarshallingManager.h:248
Definition PullPhysicsDataImp.h:166
Definition ParticleDirtyFlags.h:1228
void Clear(FDirtyPropertiesManager &Manager, int32 Idx)
Definition ParticleDirtyFlags.h:1259
Definition SimCallbackObject.h:427
Definition SimCallbackObject.h:68
Definition GeometryCollectionProxyData.h:237
Definition PhysicsProxyBase.h:97
void SetDirtyIdx(const int32 Idx)
Definition PhysicsProxyBase.h:124
EPhysicsProxyType GetType() const
Definition PhysicsProxyBase.h:118
int32 GetDirtyIdx() const
Definition PhysicsProxyBase.h:123
Definition Array.h:670
UE_REWRITE bool IsEmpty() const
Definition Array.h:1133
UE_NODEBUG UE_FORCEINLINE_HINT SizeType Add(ElementType &&Item)
Definition Array.h:2696
Definition SpscQueue.h:18
Definition CriticalSection.h:14
CHAOS_API bool bEnableAsyncInitBody
Definition AsyncInitBodyHelper.cpp:10
Definition SkeletalMeshComponent.h:307
FRealDouble FReal
Definition Real.h:22
@ Add
Definition PendingSpatialData.h:18
Definition ParticleDirtyFlags.h:1006
void Reset()
Definition ParticleDirtyFlags.h:1010
int32 TotalNum
Definition ParticleDirtyFlags.h:1008
int32 Num[(uint32)(EPhysicsProxyType::Count)]
Definition ParticleDirtyFlags.h:1007
Definition ChaosMarshallingManager.h:57
TArray< FDirtyProxy > ProxiesData
Definition ChaosMarshallingManager.h:58
Definition ChaosMarshallingManager.h:21
void Clear(FDirtyPropertiesManager &Manager, int32 DataIdx, FShapeDirtyData *ShapesData)
Definition ChaosMarshallingManager.h:41
void AddShape(int32 ShapeDataIdx)
Definition ChaosMarshallingManager.h:36
IPhysicsProxyBase * Proxy
Definition ChaosMarshallingManager.h:22
void SetDirtyIdx(int32 Idx)
Definition ChaosMarshallingManager.h:31
void MoveData(FDirtyPropertiesManager &Manager, int32 FromIdx, int32 ToIdx)
Definition ChaosMarshallingManager.h:50
FDirtyChaosProperties PropertyData
Definition ChaosMarshallingManager.h:23
FDirtyProxy(IPhysicsProxyBase *InProxy)
Definition ChaosMarshallingManager.h:26
TArray< int32 > ShapeDataIndices
Definition ChaosMarshallingManager.h:24
Definition ChaosMarshallingManager.h:286
FReal ExternalDt
Definition ChaosMarshallingManager.h:290
void Reset()
Definition ChaosMarshallingManager.cpp:156
void ClearAsyncInputs()
Definition ChaosMarshallingManager.cpp:209
void ClearAsyncInputForCallback(ISimCallbackObject *Callback)
Definition ChaosMarshallingManager.cpp:233
FDirtyPropertiesManager DirtyPropertiesManager
Definition ChaosMarshallingManager.h:287
int32 ExternalTimestamp
Definition ChaosMarshallingManager.h:291
FDirtySet DirtyProxiesDataBuffer
Definition ChaosMarshallingManager.h:288
TArray< FSimCallbackInputAndObject > SimCallbackInputs
Definition ChaosMarshallingManager.h:299
void ClearSimCommands()
Definition ChaosMarshallingManager.cpp:221
int32 IntervalNumSteps
Definition ChaosMarshallingManager.h:294
void ResetDirtyProxiesBuffer()
Definition ChaosMarshallingManager.cpp:196
int32 InternalStep
Definition ChaosMarshallingManager.h:292
void ResetForHistory()
Definition ChaosMarshallingManager.cpp:172
TArray< ISimCallbackObject * > SimCallbackObjectsToAdd
Definition ChaosMarshallingManager.h:297
TArray< ISimCallbackObject * > SimCallbackObjectsToRemove
Definition ChaosMarshallingManager.h:298
bool bSolverSubstepped
Definition ChaosMarshallingManager.h:295
TArray< FSimCallbackCommandObject * > SimCommands
Definition ChaosMarshallingManager.h:300
void CopySubstepData(const FPushPhysicsData &FirstStepData)
Definition ChaosMarshallingManager.cpp:316
int32 IntervalStep
Definition ChaosMarshallingManager.h:293
FReal StartTime
Definition ChaosMarshallingManager.h:289
Definition SimCallbackObject.h:681
Definition SimCallbackInput.h:34