2 Physics Effects Copyright(C) 2010 Sony Computer Entertainment Inc.
\r
5 Physics Effects is open software; you can redistribute it and/or
\r
6 modify it under the terms of the BSD License.
\r
8 Physics Effects is distributed in the hope that it will be useful,
\r
9 but WITHOUT ANY WARRANTY; without even the implied warranty of
\r
10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
\r
11 See the BSD License for more details.
\r
13 A copy of the BSD License is distributed with
\r
14 Physics Effects under the filename: physics_effects_license.txt
\r
17 #ifndef _SCE_PFX_CONSTRAINT_SOLVER_H
\r
18 #define _SCE_PFX_CONSTRAINT_SOLVER_H
\r
20 #include "../../base_level/rigidbody/pfx_rigid_body.h"
\r
21 #include "../../base_level/rigidbody/pfx_rigid_state.h"
\r
22 #include "../../base_level/solver/pfx_solver_body.h"
\r
23 #include "../../base_level/solver/pfx_constraint_pair.h"
\r
24 #include "../../base_level/solver/pfx_joint.h"
\r
25 #include "../../base_level/collision/pfx_contact_manifold.h"
\r
27 #include "../task/pfx_task_manager.h"
\r
30 namespace PhysicsEffects {
\r
32 ///////////////////////////////////////////////////////////////////////////////
\r
33 // Setup Solver Bodies
\r
35 struct PfxSetupSolverBodiesParam {
\r
36 PfxRigidState *states;
\r
37 PfxRigidBody *bodies;
\r
38 PfxSolverBody *solverBodies;
\r
39 PfxUInt32 numRigidBodies;
\r
42 PfxInt32 pfxSetupSolverBodies(PfxSetupSolverBodiesParam ¶m);
\r
44 PfxInt32 pfxSetupSolverBodies(PfxSetupSolverBodiesParam ¶m,PfxTaskManager *taskManager);
\r
46 ///////////////////////////////////////////////////////////////////////////////
\r
47 // Setup Constraints
\r
49 struct PfxSetupContactConstraintsParam {
\r
50 PfxConstraintPair *contactPairs;
\r
51 PfxUInt32 numContactPairs;
\r
52 PfxContactManifold *offsetContactManifolds;
\r
53 PfxRigidState *offsetRigidStates;
\r
54 PfxRigidBody *offsetRigidBodies;
\r
55 PfxSolverBody *offsetSolverBodies;
\r
56 PfxUInt32 numRigidBodies;
\r
58 PfxFloat separateBias;
\r
60 PfxSetupContactConstraintsParam()
\r
63 separateBias = 0.2f;
\r
67 PfxInt32 pfxSetupContactConstraints(PfxSetupContactConstraintsParam ¶m);
\r
69 PfxInt32 pfxSetupContactConstraints(PfxSetupContactConstraintsParam ¶m,PfxTaskManager *taskManager);
\r
71 struct PfxSetupJointConstraintsParam {
\r
72 PfxConstraintPair *jointPairs;
\r
73 PfxUInt32 numJointPairs;
\r
74 PfxJoint *offsetJoints;
\r
75 PfxRigidState *offsetRigidStates;
\r
76 PfxRigidBody *offsetRigidBodies;
\r
77 PfxSolverBody *offsetSolverBodies;
\r
78 PfxUInt32 numRigidBodies;
\r
81 PfxSetupJointConstraintsParam()
\r
87 PfxInt32 pfxSetupJointConstraints(PfxSetupJointConstraintsParam ¶m);
\r
89 PfxInt32 pfxSetupJointConstraints(PfxSetupJointConstraintsParam ¶m,PfxTaskManager *taskManager);
\r
91 ///////////////////////////////////////////////////////////////////////////////
\r
92 // Solve Constraints
\r
94 struct PfxSolveConstraintsParam {
\r
96 PfxUInt32 workBytes;
\r
97 PfxConstraintPair *contactPairs;
\r
98 PfxUInt32 numContactPairs;
\r
99 PfxContactManifold *offsetContactManifolds;
\r
100 PfxConstraintPair *jointPairs;
\r
101 PfxUInt32 numJointPairs;
\r
102 PfxJoint *offsetJoints;
\r
103 PfxRigidState *offsetRigidStates;
\r
104 PfxSolverBody *offsetSolverBodies;
\r
105 PfxUInt32 numRigidBodies;
\r
106 PfxUInt32 iteration;
\r
108 PfxSolveConstraintsParam()
\r
114 PfxUInt32 pfxGetWorkBytesOfSolveConstraints(PfxUInt32 numRigidBodies,PfxUInt32 numContactPairs,PfxUInt32 numJointPairs,PfxUInt32 maxTasks=1);
\r
116 PfxInt32 pfxSolveConstraints(PfxSolveConstraintsParam ¶m);
\r
118 PfxInt32 pfxSolveConstraints(PfxSolveConstraintsParam ¶m,PfxTaskManager *taskManager);
\r
120 } //namespace PhysicsEffects
\r
122 #endif // _SCE_PFX_CONSTRAINT_SOLVER_H
\r