RavEngine
Loading...
Searching...
No Matches
ScSimulationController.h
1// Redistribution and use in source and binary forms, with or without
2// modification, are permitted provided that the following conditions
3// are met:
4// * Redistributions of source code must retain the above copyright
5// notice, this list of conditions and the following disclaimer.
6// * Redistributions in binary form must reproduce the above copyright
7// notice, this list of conditions and the following disclaimer in the
8// documentation and/or other materials provided with the distribution.
9// * Neither the name of NVIDIA CORPORATION nor the names of its
10// contributors may be used to endorse or promote products derived
11// from this software without specific prior written permission.
12//
13// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
14// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
17// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24//
25// Copyright (c) 2008-2022 NVIDIA Corporation. All rights reserved.
26// Copyright (c) 2004-2008 AGEIA Technologies, Inc. All rights reserved.
27// Copyright (c) 2001-2004 NovodeX AG. All rights reserved.
28
29#ifndef SC_SIMULATION_CONTROLLER_H
30#define SC_SIMULATION_CONTROLLER_H
31
32#include "PxsSimulationController.h"
33
34namespace physx
35{
36
37class PxsHeapMemoryAllocator;
38
39namespace Dy
40{
41 class FeatherstoneArticulation;
42 struct ArticulationJointCore;
43 class ParticleSystem;
44 class FEMCloth;
45 class HairSystem;
46}
47
48namespace Sc
49{
50
52 {
53 PX_NOCOPY(SimulationController)
54 public:
56 {
57 }
58
59 virtual ~SimulationController() {}
60 virtual void addJoint(const PxU32 /*edgeIndex*/, Dy::Constraint* /*constraint*/, IG::IslandSim& /*islandSim*/, PxArray<PxU32>& /*jointIndices*/,
61 PxPinnedArray<PxgSolverConstraintManagerConstants>& /*managerIter*/, PxU32 /*uniqueId*/){}
62 virtual void removeJoint(const PxU32 /*edgeIndex*/, Dy::Constraint* /*constraint*/, PxArray<PxU32>& /*jointIndices*/, IG::IslandSim& /*islandSim*/){}
63 virtual void addShape(PxsShapeSim* /*shapeSim*/, const PxU32 /*index*/){}
64 virtual void reinsertShape(PxsShapeSim* /*shapeSim*/, const PxU32 /*index*/) {}
65 virtual void removeShape(const PxU32 /*index*/){}
66 virtual void addDynamic(PxsRigidBody* /*rigidBody*/, const PxNodeIndex& /*nodeIndex*/){}
67 virtual void addDynamics(PxsRigidBody** /*rigidBody*/, const PxU32* /*nodeIndex*/, PxU32 /*nbBodies*/) {}
68 virtual void addArticulation(Dy::FeatherstoneArticulation* /*articulation*/, const PxNodeIndex& /*nodeIndex*/) {}
69 virtual void releaseArticulation(Dy::FeatherstoneArticulation* /*articulation*/, const PxNodeIndex& /*nodeIndex*/) {}
70 virtual void releaseDeferredArticulationIds() {}
71
72#if PX_SUPPORT_GPU_PHYSX
73 virtual void addSoftBody(Dy::SoftBody*, const PxNodeIndex&) {}
74 virtual void releaseSoftBody(Dy::SoftBody*) {}
75 virtual void releaseDeferredSoftBodyIds() {}
76 virtual void activateSoftbody(Dy::SoftBody*) {}
77 virtual void deactivateSoftbody(Dy::SoftBody*) {}
78 virtual void activateSoftbodySelfCollision(Dy::SoftBody*) {}
79 virtual void deactivateSoftbodySelfCollision(Dy::SoftBody*) {}
80 virtual void setSoftBodyWakeCounter(Dy::SoftBody*) {}
81
82
83 virtual void addParticleFilter(Dy::SoftBody*, Dy::ParticleSystem* ,
84 PxU32, PxU32, PxU32){}
85 virtual void removeParticleFilter(Dy::SoftBody*,
86 const Dy::ParticleSystem*, PxU32, PxU32, PxU32){}
87
88 virtual PxU32 addParticleAttachment(Dy::SoftBody*, const Dy::ParticleSystem*,
89 PxU32, PxU32, PxU32, const PxVec4&, const bool) { return 0xFFFFFFFF; }
90 virtual void removeParticleAttachment(Dy::SoftBody*, PxU32){}
91
92 virtual void addRigidFilter(Dy::SoftBody*, const PxNodeIndex&, const PxNodeIndex&, PxU32) {}
93 virtual void removeRigidFilter(Dy::SoftBody*, const PxNodeIndex&, PxU32){}
94
95
96 virtual PxU32 addRigidAttachment(Dy::SoftBody*, const PxNodeIndex&,
97 PxsRigidBody*, const PxNodeIndex&, PxU32, const PxVec3&, PxConeLimitedConstraint*, const bool) {return 0xFFFFFFFF;}
98 virtual void removeRigidAttachment(Dy::SoftBody*, PxU32) {}
99
100 virtual void addTetRigidFilter(Dy::SoftBody*,
101 const PxNodeIndex&, PxU32) {}
102 virtual void removeTetRigidFilter(Dy::SoftBody* ,
103 const PxNodeIndex&, PxU32) {}
104
105 virtual PxU32 addTetRigidAttachment(Dy::SoftBody*, PxsRigidBody*, const PxNodeIndex&,
106 PxU32, const PxVec4& , const PxVec3&, PxConeLimitedConstraint*, const bool) { return 0xFFFFFFFF;}
107
108 virtual void addSoftBodyFilter(Dy::SoftBody*, Dy::SoftBody*, PxU32,
109 PxU32) {}
110 virtual void removeSoftBodyFilter(Dy::SoftBody*, Dy::SoftBody*, PxU32,
111 PxU32) {}
112 virtual void addSoftBodyFilters(Dy::SoftBody*, Dy::SoftBody*, PxU32*, PxU32*,
113 PxU32) {}
114 virtual void removeSoftBodyFilters(Dy::SoftBody*, Dy::SoftBody*, PxU32*, PxU32*,
115 PxU32) {}
116
117 virtual PxU32 addSoftBodyAttachment(Dy::SoftBody* , Dy::SoftBody* , PxU32, PxU32,
118 const PxVec4&, const PxVec4&, PxConeLimitedConstraint*, const bool){ return 0xFFFFFFFF;}
119 virtual void removeSoftBodyAttachment(Dy::SoftBody*, PxU32) {}
120
121 virtual void addClothFilter(Dy::SoftBody*, Dy::FEMCloth*, PxU32,
122 PxU32) {}
123 virtual void removeClothFilter(Dy::SoftBody*, Dy::FEMCloth*, PxU32,
124 PxU32) {}
125
126 virtual PxU32 addClothAttachment(Dy::SoftBody*, Dy::FEMCloth*, PxU32,
127 const PxVec4&, PxU32, const PxVec4&, PxConeLimitedConstraint* , const bool) { return 0xFFFFFFFF;}
128 virtual void removeClothAttachment(Dy::SoftBody*, PxU32) {}
129
130
131 virtual void addFEMCloth(Dy::FEMCloth* , const PxNodeIndex&) {}
132 virtual void releaseFEMCloth(Dy::FEMCloth*) {}
133 virtual void releaseDeferredFEMClothIds() {}
134 virtual void activateCloth(Dy::FEMCloth*) {}
135 virtual void deactivateCloth(Dy::FEMCloth*) {}
136 virtual void setClothWakeCounter(Dy::FEMCloth*) {}
137
138
139 virtual void addRigidFilter(Dy::FEMCloth*,
140 const PxNodeIndex&, PxU32){}
141
142 virtual void removeRigidFilter(Dy::FEMCloth*,
143 const PxNodeIndex&, PxU32){}
144
145 virtual PxU32 addRigidAttachment(Dy::FEMCloth* , const PxNodeIndex& ,
146 PxsRigidBody* , const PxNodeIndex& , PxU32, const PxVec3& , PxConeLimitedConstraint*, const bool){ return 0xFFFFFFFF; }
147
148 virtual void removeRigidAttachment(Dy::FEMCloth*, PxU32 ){}
149
150
151 virtual void addTriRigidFilter(Dy::FEMCloth*,
152 const PxNodeIndex&, PxU32) {}
153
154 virtual void removeTriRigidFilter(Dy::FEMCloth*,
155 const PxNodeIndex&, PxU32) {}
156
157 virtual PxU32 addTriRigidAttachment(Dy::FEMCloth*, PxsRigidBody*, const PxNodeIndex& ,
158 PxU32 , const PxVec4& , const PxVec3&, PxConeLimitedConstraint*, const bool){ return 0xFFFFFFFF;}
159
160 virtual void removeTriRigidAttachment(Dy::FEMCloth*, PxU32){}
161
162 virtual void addClothFilter(Dy::FEMCloth*, Dy::FEMCloth*, PxU32, PxU32) {}
163 virtual void removeClothFilter(Dy::FEMCloth*, Dy::FEMCloth*, PxU32, PxU32){}
164
165 virtual PxU32 addTriClothAttachment(Dy::FEMCloth*, Dy::FEMCloth*, PxU32, PxU32,
166 const PxVec4&, const PxVec4&, const bool){ return 0xFFFFFFFF;}
167
168 virtual void removeTriClothAttachment(Dy::FEMCloth*, PxU32) {}
169
170 virtual void addParticleSystem(Dy::ParticleSystem*, const PxNodeIndex&, PxParticleSolverType::Enum) {}
171 virtual void releaseParticleSystem(Dy::ParticleSystem*, PxParticleSolverType::Enum) {}
172 virtual void releaseDeferredParticleSystemIds() {}
173
174 virtual void addHairSystem(Dy::HairSystem *, const PxNodeIndex&) {}
175 virtual void releaseHairSystem(Dy::HairSystem*) {}
176 virtual void releaseDeferredHairSystemIds() {}
177 virtual void activateHairSystem(Dy::HairSystem*) {}
178 virtual void deactivateHairSystem(Dy::HairSystem*) {}
179 virtual void setHairSystemWakeCounter(Dy::HairSystem*) {}
180 virtual void copyHairSystemData(void** , void* , void* , PxHairSystemData::Enum , const PxU32 , const PxU32 , void* ) {}
181 virtual void applyHairSystemData(void** , void* , void* , PxHairSystemData::Enum , const PxU32 , const PxU32 , void* ) {}
182#endif
183
184 virtual void flush() {}
185 virtual void updateDynamic(Dy::FeatherstoneArticulation* /*articulation*/, const PxNodeIndex& /*nodeIndex*/) {}
186 virtual void updateJoint(const PxU32 /*edgeIndex*/, Dy::Constraint* /*constraint*/){}
187 virtual void updateBodies(PxsRigidBody** /*rigidBodies*/, PxU32* /*nodeIndices*/, const PxU32 /*nbBodies*/) {}
188 virtual void updateBody(PxsRigidBody* /*rigidBody*/, const PxU32 /*nodeIndex*/) {}
189 virtual void updateBodies(PxBaseTask* /*continuation*/){}
190 virtual void updateShapes(PxBaseTask* /*continuation*/) {}
191 virtual void preIntegrateAndUpdateBound(PxBaseTask* /*continuation*/, const PxVec3 /*gravity*/, const PxReal /*dt*/){}
192 virtual void updateParticleSystemsAndSoftBodies(){}
193 virtual void sortContacts(){}
194 virtual void update(PxBitMapPinned& /*changedHandleMap*/){}
195 virtual void mergeChangedAABBMgHandle(const PxU32 /*maxAABBMgHandles*/, const bool /*suppressedReadback*/) {}
196 virtual void gpuDmabackData(PxsTransformCache& /*cache*/, Bp::BoundsArray& /*boundArray*/, PxBitMapPinned& /*changedAABBMgrHandles*/, bool /*suppress*/){}
197 virtual void updateScBodyAndShapeSim(PxsTransformCache& /*cache*/, Bp::BoundsArray& /*boundArray*/, PxBaseTask* /*continuation*/);
198 virtual void updateArticulation(Dy::FeatherstoneArticulation* /*articulation*/, const PxNodeIndex& /*nodeIndex*/) {}
199 virtual void updateArticulationJoint(Dy::FeatherstoneArticulation* /*articulation*/, const PxNodeIndex& /*nodeIndex*/) {}
200 virtual void updateArticulationTendon(Dy::FeatherstoneArticulation* /*articulation*/, const PxNodeIndex& /*nodeIndex*/) {}
201 virtual void updateArticulationExtAccel(Dy::FeatherstoneArticulation* /*articulation*/, const PxNodeIndex& /*nodeIndex*/) {}
202 virtual void updateArticulationAfterIntegration(PxsContext* /*llContext*/, Bp::AABBManagerBase* /*aabbManager*/,
203 PxArray<Sc::BodySim*>& /*ccdBodies*/, PxBaseTask* /*continuation*/, IG::IslandSim& /*islandSim*/, const float /*dt*/);
204 virtual PxU32* getActiveBodies() { return NULL; }
205 virtual PxU32* getDeactiveBodies() { return NULL; }
206 virtual void** getRigidBodies() { return NULL; }
207 virtual PxU32 getNbBodies() { return 0; }
208 virtual PxU32 getNbFrozenShapes() { return 0; }
209 virtual PxU32 getNbUnfrozenShapes() { return 0; }
210
211 virtual PxU32* getUnfrozenShapes() { return NULL; }
212 virtual PxU32* getFrozenShapes() { return NULL; }
213 virtual PxsShapeSim** getShapeSims() { return NULL; }
214 virtual PxU32 getNbShapes() { return 0; }
215
216 virtual void clear() { }
217 virtual void setBounds(Bp::BoundsArray* /*boundArray*/){}
218 virtual void reserve(const PxU32 /*nbBodies*/) {}
219
220
221 virtual PxU32 getArticulationRemapIndex(const PxU32 /*nodeIndex*/) { return PX_INVALID_U32;}
222
223 //virtual void setParticleSystemManager(PxgParticleSystemCore* /* psCore*/) {}
224
225 virtual void copyArticulationData(void* /*jointData*/, void* /*index*/, PxArticulationGpuDataType::Enum /*flag*/, const PxU32 /*nbUpdatedArticulations*/, void* /*copyEvent*/) {}
226 virtual void applyArticulationData(void* /*data*/, void* /*index*/, PxArticulationGpuDataType::Enum /*flag*/, const PxU32 /*nbUpdatedArticulations*/, void* /*waitEvent*/, void* /*signalEvent*/) {}
227
228 virtual void copySoftBodyData(void** /*data*/, void* /*dataSizes*/, void* /*softBodyIndices*/, PxSoftBodyDataFlag::Enum /*flag*/, const PxU32 /*nbCopySoftBodies*/, const PxU32 /*maxSize*/, void* /*copyEvent*/) {}
229 virtual void applySoftBodyData(void** /*data*/, void* /*dataSizes*/, void* /*softBodyIndices*/, PxSoftBodyDataFlag::Enum /*flag*/, const PxU32 /*nbUpdatedSoftBodies*/, const PxU32 /*maxSize*/, void* /*applyEvent*/) {}
230
231 virtual void copyContactData(Dy::Context* /*dyContext*/, void* /*data*/, const PxU32 /*maxContactPairs*/, void* /*numContactPairs*/, void* /*copyEvent*/) {}
232 virtual void copyBodyData(PxGpuBodyData* /*data*/, PxGpuActorPair* /*index*/, const PxU32 /*nbCopyActors*/, void* /*copyEvent*/){}
233
234 virtual void applyActorData(void* /*data*/, PxGpuActorPair* /*index*/, PxActorCacheFlag::Enum /*flag*/, const PxU32 /*nbUpdatedActors*/, void* /*waitEvent*/, void* /*signalEvent*/) {}
235
236 virtual void* getMPMDataPointer(const Dy::ParticleSystem& /*psLL*/, PxMPMParticleDataFlag::Enum /*flags*/) { return NULL; }
237 virtual void* getSparseGridDataPointer(const Dy::ParticleSystem& /*psLL*/, PxSparseGridDataFlag::Enum /*flags*/, PxParticleSolverType::Enum /*type*/) { return NULL; }
238
239 virtual void allocatePBDMaterialsBuffer(PxPhysXGpu* /*physxGpu*/, Dy::ParticleSystemCore& /*core*/, PxU64* /*gpuMemStat*/) {}
240 virtual void allocateFLIPMaterialsBuffer(PxPhysXGpu* /*physxGpu*/, Dy::ParticleSystemCore& /*core*/, PxU64* /*gpuMemStat*/) {}
241 virtual void allocateMPMMaterialsBuffer(PxPhysXGpu* /*physxGpu*/, Dy::ParticleSystemCore& /*core*/, PxU64* /*gpuMemStat*/) {}
242
243 virtual void syncParticleData() {}
244
245 virtual void updateBoundsAndShapes(Bp::AABBManagerBase& /*aabbManager*/, const bool/* useGpuBp*/, const bool /*useDirectApi*/){}
246
247 virtual void computeDenseJacobians(const PxIndexDataPair* /*indices*/, PxU32 /*nbIndices*/, void* /*computeEvent*/){}
248 virtual void computeGeneralizedMassMatrices(const PxIndexDataPair* /*indices*/, PxU32 /*nbIndices*/, void* /*computeEvent*/){}
249 virtual void computeGeneralizedGravityForces(const PxIndexDataPair* /*indices*/, PxU32 /*nbIndices*/, const PxVec3& /*gravity*/, void* /*computeEvent*/){}
250 virtual void computeCoriolisAndCentrifugalForces(const PxIndexDataPair* /*indices*/, PxU32 /*nbIndices*/, void* /*computeEvent*/) {}
251 virtual void applyParticleBufferData(const PxU32* /*indices*/, const PxGpuParticleBufferIndexPair* /*indexPairs*/, const PxParticleBufferFlags* /*flags*/, PxU32 /*nbUpdatedBuffers*/, void* /*waitEvent*/, void* /*signalEvent*/) {}
252
253 virtual void flushInsertions() {}
254
255#if PX_SUPPORT_GPU_PHYSX
256 virtual PxU32 getNbDeactivatedFEMCloth() const { return 0; }
257 virtual PxU32 getNbActivatedFEMCloth() const { return 0; }
258
259 virtual Dy::FEMCloth** getDeactivatedFEMCloths() const { return NULL; }
260 virtual Dy::FEMCloth** getActivatedFEMCloths() const { return NULL; }
261
262 virtual bool hasFEMCloth() const { return false; }
263
264 virtual PxU32 getNbDeactivatedSoftbodies() const { return 0; }
265 virtual PxU32 getNbActivatedSoftbodies() const { return 0; }
266
267 virtual const PxReal* getSoftBodyWakeCounters() const { return NULL; }
268
269 virtual Dy::SoftBody** getDeactivatedSoftbodies() const { return NULL; }
270 virtual Dy::SoftBody** getActivatedSoftbodies() const { return NULL; }
271
272 virtual bool hasSoftBodies() const { return false; }
273
274 virtual PxU32 getNbDeactivatedHairSystems() const { return 0; }
275 virtual PxU32 getNbActivatedHairSystems() const { return 0; }
276 virtual Dy::HairSystem** getDeactivatedHairSystems() const { return NULL; }
277 virtual Dy::HairSystem** getActivatedHairSystems() const { return NULL; }
278 virtual bool hasHairSystems() const { return false; }
279#endif
280
281 };
282}
283
284}
285
286#endif
A structure responsible for: storing an aabb representation for each active shape in the related scen...
Definition BpAABBManagerBase.h:165
Definition BpAABBManagerBase.h:101
Definition DyContext.h:76
Definition DyFEMCloth.h:50
Definition DyFeatherstoneArticulation.h:590
Definition DyHairSystem.h:81
Definition DyParticleSystemCore.h:51
Definition DyParticleSystem.h:66
Definition DySoftBody.h:52
Definition PxsIslandSim.h:412
Definition PxArray.h:53
Enum
Definition PxArticulationFlag.h:52
Base class of all task types.
Definition PxTask.h:45
Container for bitfield flag variables associated with a specific enum type.
Definition PxFlags.h:73
PxNodeIndex.
Definition PxNodeIndex.h:51
Interface to create and run CUDA enabled PhysX features.
Definition PxPhysXGpu.h:92
Enum
Definition PxSoftBodyFlag.h:49
3 Element vector class.
Definition PxVec3.h:50
Definition PxVec4.h:50
Definition PxsContext.h:92
Definition PxsRigidBody.h:43
Definition PxsSimulationController.h:114
Definition PxsSimulationController.h:124
Definition PxsTransformCache.h:60
Definition ScSimulationController.h:52
Sorts an array of objects in ascending order, assuming that the predicate implements the < operator:
Definition PxBoxController.h:39
Definition DyConstraint.h:53
A constraint descriptor for limiting movement to a conical region.
Definition PxConeLimitedConstraint.h:48
Pair correspondence used for matching array indices with body node indices.
Definition PxActorData.h:89
State of a body used when interfacing with the GPU rigid body pipeline.
Definition PxActorData.h:76
A pair of particle buffer unique id and GPU particle system index.
Definition PxParticleSystemFlag.h:72
Enum
Definition PxHairSystemFlag.h:47
Maps numeric index to a data pointer.
Definition PxActorData.h:101
Enum
Definition PxParticleSolverType.h:53
Definition PxsShapeSim.h:40