1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
|
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
// are met:
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
// * Neither the name of NVIDIA CORPORATION nor the names of its
// contributors may be used to endorse or promote products derived
// from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
// Copyright (c) 2008-2018 NVIDIA Corporation. All rights reserved.
// Copyright (c) 2004-2008 AGEIA Technologies, Inc. All rights reserved.
// Copyright (c) 2001-2004 NovodeX AG. All rights reserved.
#ifndef PX_META_DATA_PVD_BINDING_H
#define PX_META_DATA_PVD_BINDING_H
#if PX_SUPPORT_PVD
#include "PxPhysXConfig.h"
#include "PsArray.h"
namespace physx
{
namespace pvdsdk
{
class PsPvd;
class PvdDataStream;
struct PvdMetaDataBindingData;
}
}
namespace physx
{
namespace Sc
{
struct Contact;
struct ClothBulkData;
}
namespace Vd
{
using namespace physx::pvdsdk;
class PvdVisualizer
{
protected:
virtual ~PvdVisualizer()
{
}
public:
virtual void visualize(PxArticulationLink& link) = 0;
};
class PvdMetaDataBinding
{
PvdMetaDataBindingData* mBindingData;
public:
PvdMetaDataBinding();
~PvdMetaDataBinding();
void registerSDKProperties(PvdDataStream& inStream);
void sendAllProperties(PvdDataStream& inStream, const PxPhysics& inPhysics);
void sendAllProperties(PvdDataStream& inStream, const PxScene& inScene);
// per frame update
void sendBeginFrame(PvdDataStream& inStream, const PxScene* inScene, PxReal simulateElapsedTime);
void sendContacts(PvdDataStream& inStream, const PxScene& inScene, shdfnd::Array<Sc::Contact>& inContacts);
void sendContacts(PvdDataStream& inStream, const PxScene& inScene);
void sendSceneQueries(PvdDataStream& inStream, const PxScene& inScene, PsPvd* pvd);
void sendStats(PvdDataStream& inStream, const PxScene* inScene, void* triMeshCacheStats);
void sendEndFrame(PvdDataStream& inStream, const PxScene* inScene);
void createInstance(PvdDataStream& inStream, const PxMaterial& inMaterial, const PxPhysics& ownerPhysics);
void sendAllProperties(PvdDataStream& inStream, const PxMaterial& inMaterial);
void destroyInstance(PvdDataStream& inStream, const PxMaterial& inMaterial, const PxPhysics& ownerPhysics);
void createInstance(PvdDataStream& inStream, const PxHeightField& inData, const PxPhysics& ownerPhysics);
void sendAllProperties(PvdDataStream& inStream, const PxHeightField& inData);
void destroyInstance(PvdDataStream& inStream, const PxHeightField& inData, const PxPhysics& ownerPhysics);
void createInstance(PvdDataStream& inStream, const PxConvexMesh& inData, const PxPhysics& ownerPhysics);
void destroyInstance(PvdDataStream& inStream, const PxConvexMesh& inData, const PxPhysics& ownerPhysics);
void createInstance(PvdDataStream& inStream, const PxTriangleMesh& inData, const PxPhysics& ownerPhysics);
void destroyInstance(PvdDataStream& inStream, const PxTriangleMesh& inData, const PxPhysics& ownerPhysics);
void createInstance(PvdDataStream& inStream, const PxRigidStatic& inObj, const PxScene& ownerScene, const PxPhysics& ownerPhysics, PsPvd* pvd);
void sendAllProperties(PvdDataStream& inStream, const PxRigidStatic& inObj);
void destroyInstance(PvdDataStream& inStream, const PxRigidStatic& inObj, const PxScene& ownerScene);
void createInstance(PvdDataStream& inStream, const PxRigidDynamic& inObj, const PxScene& ownerScene, const PxPhysics& ownerPhysics, PsPvd* pvd);
void sendAllProperties(PvdDataStream& inStream, const PxRigidDynamic& inObj);
void destroyInstance(PvdDataStream& inStream, const PxRigidDynamic& inObj, const PxScene& ownerScene);
void createInstance(PvdDataStream& inStream, const PxArticulation& inObj, const PxScene& ownerScene, const PxPhysics& ownerPhysics, PsPvd* pvd);
void sendAllProperties(PvdDataStream& inStream, const PxArticulation& inObj);
void destroyInstance(PvdDataStream& inStream, const PxArticulation& inObj, const PxScene& ownerScene);
void createInstance(PvdDataStream& inStream, const PxArticulationLink& inObj, const PxPhysics& ownerPhysics, PsPvd* pvd);
void sendAllProperties(PvdDataStream& inStream, const PxArticulationLink& inObj);
void destroyInstance(PvdDataStream& inStream, const PxArticulationLink& inObj);
void createInstance(PvdDataStream& inStream, const PxShape& inObj, const PxRigidActor& owner, const PxPhysics& ownerPhysics, PsPvd* pvd);
void sendAllProperties(PvdDataStream& inStream, const PxShape& inObj);
void releaseAndRecreateGeometry(PvdDataStream& inStream, const PxShape& inObj, PxPhysics& ownerPhysics, PsPvd* pvd);
void updateMaterials(PvdDataStream& inStream, const PxShape& inObj, PsPvd* pvd);
void destroyInstance(PvdDataStream& inStream, const PxShape& inObj, const PxRigidActor& owner);
// These are created as part of the articulation link's creation process, so outside entities don't need to
// create them.
void sendAllProperties(PvdDataStream& inStream, const PxArticulationJoint& inObj);
// per frame update
void updateDynamicActorsAndArticulations(PvdDataStream& inStream, const PxScene* inScene, PvdVisualizer* linkJointViz);
// Origin Shift
void originShift(PvdDataStream& inStream, const PxScene* inScene, PxVec3 shift);
#if PX_USE_PARTICLE_SYSTEM_API
void createInstance(PvdDataStream& inStream, const PxParticleSystem& inObj, const PxScene& ownerScene);
void sendAllProperties(PvdDataStream& inStream, const PxParticleSystem& inObj);
// per frame update
void sendArrays(PvdDataStream& inStream, const PxParticleSystem& inObj, PxParticleReadData& inData, PxU32 inFlags);
void destroyInstance(PvdDataStream& inStream, const PxParticleSystem& inObj, const PxScene& ownerScene);
void createInstance(PvdDataStream& inStream, const PxParticleFluid& inObj, const PxScene& ownerScene);
void sendAllProperties(PvdDataStream& inStream, const PxParticleFluid& inObj);
// per frame update
void sendArrays(PvdDataStream& inStream, const PxParticleFluid& inObj, PxParticleFluidReadData& inData,
PxU32 inFlags);
void destroyInstance(PvdDataStream& inStream, const PxParticleFluid& inObj, const PxScene& ownerScene);
#endif
#if PX_USE_CLOTH_API
void createInstance(PvdDataStream& inStream, const PxClothFabric& fabric, const PxPhysics& ownerPhysics);
void sendAllProperties(PvdDataStream& inStream, const PxClothFabric& fabric);
void destroyInstance(PvdDataStream& inStream, const PxClothFabric& fabric, const PxPhysics& ownerPhysics);
void createInstance(PvdDataStream& inStream, const PxCloth& cloth, const PxScene& ownerScene, const PxPhysics& ownerPhysics, PsPvd* pvd);
void sendAllProperties(PvdDataStream& inStream, const PxCloth& cloth);
void sendSimpleProperties(PvdDataStream& inStream, const PxCloth& cloth);
void sendMotionConstraints(PvdDataStream& inStream, const PxCloth& cloth);
void sendCollisionSpheres(PvdDataStream& inStream, const PxCloth& cloth, bool sendPairs = true);
void sendCollisionTriangles(PvdDataStream& inStream, const PxCloth& cloth);
void sendVirtualParticles(PvdDataStream& inStream, const PxCloth& cloth);
void sendSeparationConstraints(PvdDataStream& inStream, const PxCloth& cloth);
void sendRestPositions(PvdDataStream& inStream, const PxCloth& cloth);
void sendSelfCollisionIndices(PvdDataStream& inStream, const PxCloth& cloth);
void sendParticleAccelerations(PvdDataStream& inStream, const PxCloth& cloth);
// per frame update
void updateCloths(PvdDataStream& inStream, const PxScene& inScene);
void destroyInstance(PvdDataStream& inStream, const PxCloth& cloth, const PxScene& ownerScene);
#endif
void createInstance(PvdDataStream& inStream, const PxAggregate& inObj, const PxScene& ownerScene);
void sendAllProperties(PvdDataStream& inStream, const PxAggregate& inObj);
void destroyInstance(PvdDataStream& inStream, const PxAggregate& inObj, const PxScene& ownerScene);
void detachAggregateActor(PvdDataStream& inStream, const PxAggregate& inObj, const PxActor& inActor);
void attachAggregateActor(PvdDataStream& inStream, const PxAggregate& inObj, const PxActor& inActor);
template <typename TDataType>
void registrarPhysicsObject(PvdDataStream&, const TDataType&, PsPvd*);
};
}
}
#endif
#endif
|