RavEngine
Loading...
Searching...
No Matches
DyTGSContactPrep.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 DY_TGS_CONTACT_PREP_H
30#define DY_TGS_CONTACT_PREP_H
31
32#include "foundation/PxPreprocessor.h"
33#include "DySolverConstraintDesc.h"
34#include "PxSceneDesc.h"
35#include "DySolverContact4.h"
36
37namespace physx
38{
39
40 struct PxcNpWorkUnit;
41 class PxsConstraintBlockManager;
42 class PxcConstraintBlockStream;
43 struct PxsContactManagerOutput;
44 class FrictionPatchStreamPair;
45 struct PxSolverBody;
46 struct PxSolverBodyData;
47 struct PxSolverConstraintDesc;
48 class PxsContactManager;
49
50 namespace Dy
51 {
52 class ThreadContext;
53 struct CorrelationBuffer;
54
55 bool createFinalizeSolverContactsStep(PxTGSSolverContactDesc& contactDesc,
56 PxsContactManagerOutput& output,
57 ThreadContext& threadContext,
58 const PxReal invDtF32,
59 const PxReal invTotalDtF32,
60 const PxReal totalDtF32,
61 const PxReal stepDt,
62 const PxReal bounceThresholdF32,
63 const PxReal frictionOffsetThreshold,
64 const PxReal correlationDistance,
65 const PxReal biasCoefficient,
66 PxConstraintAllocator& constraintAllocator);
67
68 bool createFinalizeSolverContactsStep(
69 PxTGSSolverContactDesc& contactDesc,
70 CorrelationBuffer& c,
71 const PxReal invDtF32,
72 const PxReal invTotalDtF32,
73 const PxReal totalDtF32,
74 const PxReal dtF32,
75 const PxReal bounceThresholdF32,
76 const PxReal frictionOffsetThreshold,
77 const PxReal correlationDistance,
78 const PxReal biasCoefficient,
79 PxConstraintAllocator& constraintAllocator);
80
81 SolverConstraintPrepState::Enum setupSolverConstraintStep4
82 (PxTGSSolverConstraintPrepDesc* PX_RESTRICT constraintDescs,
83 const PxReal dt, const PxReal totalDt, const PxReal recipdt, const PxReal recipTotalDt, PxU32& totalRows,
84 PxConstraintAllocator& allocator, PxU32 maxRows,
85 const PxReal lengthScale, const PxReal biasCoefficient);
86
87 PxU32 SetupSolverConstraintStep(SolverConstraintShaderPrepDesc& shaderDesc,
88 PxTGSSolverConstraintPrepDesc& prepDesc,
89 PxConstraintAllocator& allocator,
90 const PxReal dt, const PxReal totalDt, const PxReal invdt, const PxReal invTotalDt,
91 const PxReal lengthScale, const PxReal biasCoefficient);
92
93 PxU32 setupSolverConstraintStep(
94 const PxTGSSolverConstraintPrepDesc& prepDesc,
95 PxConstraintAllocator& allocator,
96 const PxReal dt, const PxReal totalDt, const PxReal invdt, const PxReal invTotalDt,
97 const PxReal lengthScale, const PxReal biasCoefficient);
98
99 SolverConstraintPrepState::Enum setupSolverConstraintStep4
100 (SolverConstraintShaderPrepDesc* PX_RESTRICT constraintShaderDescs,
101 PxTGSSolverConstraintPrepDesc* PX_RESTRICT constraintDescs,
102 const PxReal dt, const PxReal totalDt, const PxReal recipdt, const PxReal recipTotalDt, PxU32& totalRows,
103 PxConstraintAllocator& allocator, const PxReal lengthScale, const PxReal biasCoefficient);
104
105 SolverConstraintPrepState::Enum createFinalizeSolverContacts4Step(
106 PxsContactManagerOutput** cmOutputs,
107 ThreadContext& threadContext,
108 PxTGSSolverContactDesc* blockDescs,
109 const PxReal invDtF32,
110 const PxReal totalDtF32,
111 const PxReal invTotalDtF32,
112 const PxReal dt,
113 const PxReal bounceThresholdF32,
114 const PxReal frictionOffsetThreshold,
115 const PxReal correlationDistance,
116 const PxReal biasCoefficient,
117 PxConstraintAllocator& constraintAllocator);
118
119 SolverConstraintPrepState::Enum createFinalizeSolverContacts4Step(
120 Dy::CorrelationBuffer& c,
121 PxTGSSolverContactDesc* blockDescs,
122 const PxReal invDtF32,
123 const PxReal totalDt,
124 const PxReal invTotalDtF32,
125 const PxReal dt,
126 const PxReal bounceThresholdF32,
127 const PxReal frictionOffsetThreshold,
128 const PxReal correlationDistance,
129 const PxReal biasCoefficient,
130 PxConstraintAllocator& constraintAllocator);
131
132 typedef void(*TGSSolveBlockMethod) (const PxConstraintBatchHeader& hdr, const PxSolverConstraintDesc* desc,
133 const PxTGSSolverBodyTxInertia* const txInertias, const PxReal minPenetration, const PxReal elapsedTime, SolverContext& cache);
134
135 typedef void (*TGSWriteBackMethod) (const PxConstraintBatchHeader& hdr, const PxSolverConstraintDesc* desc, SolverContext* cache);
136
137 typedef void (*TGSSolveConcludeMethod) (const PxConstraintBatchHeader& hdr, const PxSolverConstraintDesc* desc,
138 const PxTGSSolverBodyTxInertia* const txInertias, const PxReal elapsedTime, SolverContext& cache);
139
140 extern TGSSolveBlockMethod g_SolveTGSMethods[];
141
142 extern TGSWriteBackMethod g_WritebackTGSMethods[];
143
144 extern TGSSolveConcludeMethod g_SolveConcludeTGSMethods[];
145
146 }
147
148}
149
150#endif
#define PX_RESTRICT
Definition PxPreprocessor.h:355
Sorts an array of objects in ascending order, assuming that the predicate implements the < operator:
Definition PxBoxController.h:39