UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
ABTestingConstraintContainerSolver.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2#pragma once
3
6#include <functional>
7
8#ifndef CHAOS_ABTEST_CONSTRAINTSOLVER_ENABLED
9#define CHAOS_ABTEST_CONSTRAINTSOLVER_ENABLED (!UE_BUILD_TEST && !UE_BUILD_SHIPPING)
10#endif
11
12
13namespace Chaos
14{
15 class FConstraintHandleHolder;
16 class FSolverBodyContainer;
17
18 namespace Private
19 {
20#if CHAOS_ABTEST_CONSTRAINTSOLVER_ENABLED
21
33 template<typename T1, typename T2>
35 {
36 public:
46
49 using FABTestFunctor = std::function<void(
50 const ESolverPhase Phase,
55
69
70 virtual void Reset(const int32 MaxConstraints) override final
71 {
74 SolverBodyContainerA = nullptr;
75 }
76
77 virtual int32 GetNumConstraints() const override final
78 {
79 return SolverA->GetNumConstraints();
80 }
81
82 virtual void AddConstraints() override final
83 {
84 SolverA->AddConstraints();
85 SolverB->AddConstraints();
86 }
87
89 {
90 SolverA->AddConstraints(Constraints);
91 SolverB->AddConstraints(Constraints);
92 }
93
94 virtual void AddBodies(FSolverBodyContainer& SolverBodyContainer) override final
95 {
96 SolverBodyContainerA = &SolverBodyContainer;
97
98 SolverA->AddBodies(*SolverBodyContainerA);
99 }
100
101 virtual void GatherInput(const FReal Dt) override final
102 {
103 SolverA->GatherInput(Dt);
104 // Solver B will ge gathered in PreApply
105 }
106
107 virtual void GatherInput(const FReal Dt, const int32 BeginIndex, const int32 EndIndex) override final
108 {
109 SolverA->GatherInput(Dt, BeginIndex, EndIndex);
110 // Solver B will ge gathered in PreApply
111 }
112
113 virtual void ScatterOutput(const FReal Dt) override final
114 {
115 SolverA->ScatterOutput(Dt);
116 SolverBodyContainerA = nullptr;
117 // Do not scatter output from B!
118 }
119
120 virtual void ScatterOutput(const FReal Dt, const int32 BeginIndex, const int32 EndIndex) override final
121 {
122 SolverA->ScatterOutput(Dt, BeginIndex, EndIndex);
123 SolverBodyContainerA = nullptr;
124 // Do not scatter output from B!
125 }
126
127 virtual void PreApplyPositionConstraints(const FReal Dt) override final
128 {
129 // Copy all the solver bodies for use by the second solver
131
132 // Bind SolverB to the copied bodies
133 SolverB->AddBodies(SolverBodyContainerB);
134
135 // Gather the second solver's constraints
136 SolverB->GatherInput(Dt);
137
138 SolverA->PreApplyPositionConstraints(Dt);
139 SolverB->PreApplyPositionConstraints(Dt);
140
142 }
143
144 virtual void ApplyPositionConstraints(const FReal Dt, const int32 It, const int32 NumIts) override final
145 {
146 SolverA->ApplyPositionConstraints(Dt, It, NumIts);
147 SolverB->ApplyPositionConstraints(Dt, It, NumIts);
148
150 }
151
152 virtual void PreApplyVelocityConstraints(const FReal Dt) override final
153 {
155
156 SolverA->PreApplyVelocityConstraints(Dt);
157 SolverB->PreApplyVelocityConstraints(Dt);
158
160 }
161
162 virtual void ApplyVelocityConstraints(const FReal Dt, const int32 It, const int32 NumIts) override final
163 {
164 SolverA->ApplyVelocityConstraints(Dt, It, NumIts);
165 SolverB->ApplyVelocityConstraints(Dt, It, NumIts);
166
168 }
169
170 virtual void PreApplyProjectionConstraints(const FReal Dt) override final
171 {
173
174 SolverA->PreApplyProjectionConstraints(Dt);
175 SolverB->PreApplyProjectionConstraints(Dt);
176
178 }
179
180 virtual void ApplyProjectionConstraints(const FReal Dt, const int32 It, const int32 NumIts) override final
181 {
182 SolverA->ApplyProjectionConstraints(Dt, It, NumIts);
183 SolverB->ApplyProjectionConstraints(Dt, It, NumIts);
184
186 }
187
188 protected:
190 {
191 if (ABTestFunctor != nullptr)
192 {
194 }
195 }
196
202 };
203
204#endif // CHAOS_ABTEST_CONSTRAINTSOLVER_ENABLED
205
206 } // namespace Private
207} // namespace Chaos
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
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
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
Definition SolverConstraintContainer.h:29
Definition SolverBodyContainer.h:37
void ApplyCorrections()
Definition SolverBodyContainer.cpp:183
void CopyTo(FSolverBodyContainer &Dest)
Definition SolverBodyContainer.h:121
void SetImplicitVelocities(FReal Dt)
Definition SolverBodyContainer.cpp:175
Definition ABTestingConstraintContainerSolver.h:35
virtual void ApplyPositionConstraints(const FReal Dt, const int32 It, const int32 NumIts) override final
Definition ABTestingConstraintContainerSolver.h:144
TUniquePtr< FContainerSolverTypeA > SolverA
Definition ABTestingConstraintContainerSolver.h:197
virtual void GatherInput(const FReal Dt) override final
Definition ABTestingConstraintContainerSolver.h:101
FSolverBodyContainer SolverBodyContainerB
Definition ABTestingConstraintContainerSolver.h:200
TUniquePtr< FContainerSolverTypeB > SolverB
Definition ABTestingConstraintContainerSolver.h:198
TABTestingConstraintContainerSolver(TUniquePtr< FContainerSolverTypeA > &&InSolverA, TUniquePtr< FContainerSolverTypeB > &&InSolverB, const int32 InPriority, const FABTestFunctor &InABTestFunctor)
Definition ABTestingConstraintContainerSolver.h:56
virtual void AddConstraints() override final
Definition ABTestingConstraintContainerSolver.h:82
T2 FContainerSolverTypeB
Definition ABTestingConstraintContainerSolver.h:48
virtual void ScatterOutput(const FReal Dt, const int32 BeginIndex, const int32 EndIndex) override final
Definition ABTestingConstraintContainerSolver.h:120
virtual void PreApplyPositionConstraints(const FReal Dt) override final
Definition ABTestingConstraintContainerSolver.h:127
FABTestFunctor ABTestFunctor
Definition ABTestingConstraintContainerSolver.h:201
T1 FContainerSolverTypeA
Definition ABTestingConstraintContainerSolver.h:47
virtual int32 GetNumConstraints() const override final
Definition ABTestingConstraintContainerSolver.h:77
virtual void AddConstraints(const TArrayView< Private::FPBDIslandConstraint * > &Constraints) override final
Definition ABTestingConstraintContainerSolver.h:88
virtual void ApplyVelocityConstraints(const FReal Dt, const int32 It, const int32 NumIts) override final
Definition ABTestingConstraintContainerSolver.h:162
virtual void ApplyProjectionConstraints(const FReal Dt, const int32 It, const int32 NumIts) override final
Definition ABTestingConstraintContainerSolver.h:180
ESolverPhase
Definition ABTestingConstraintContainerSolver.h:38
virtual void Reset(const int32 MaxConstraints) override final
Definition ABTestingConstraintContainerSolver.h:70
virtual void ScatterOutput(const FReal Dt) override final
Definition ABTestingConstraintContainerSolver.h:113
virtual void AddBodies(FSolverBodyContainer &SolverBodyContainer) override final
Definition ABTestingConstraintContainerSolver.h:94
virtual void PreApplyProjectionConstraints(const FReal Dt) override final
Definition ABTestingConstraintContainerSolver.h:170
virtual void PreApplyVelocityConstraints(const FReal Dt) override final
Definition ABTestingConstraintContainerSolver.h:152
std::function< void(const ESolverPhase Phase, const FContainerSolverTypeA &SolverA, const FContainerSolverTypeB &SolverB, const FSolverBodyContainer &SolverBodyContainerA, const FSolverBodyContainer &SolverBodyContainerB)> FABTestFunctor
Definition ABTestingConstraintContainerSolver.h:54
virtual void GatherInput(const FReal Dt, const int32 BeginIndex, const int32 EndIndex) override final
Definition ABTestingConstraintContainerSolver.h:107
void CallABTestFunctor(const ESolverPhase Phase)
Definition ABTestingConstraintContainerSolver.h:189
FSolverBodyContainer * SolverBodyContainerA
Definition ABTestingConstraintContainerSolver.h:199
Definition Constraints.Build.cs:6
Definition ArrayView.h:139
Definition UniquePtr.h:107
void Reset(T *InPtr=nullptr)
Definition UniquePtr.h:346
Definition SkeletalMeshComponent.h:307
FRealDouble FReal
Definition Real.h:22
Definition OverriddenPropertySet.cpp:45