1//
2// Redistribution and use in source and binary forms, with or without
3// modification, are permitted provided that the following conditions
4// are met:
5// * Redistributions of source code must retain the above copyright
6// notice, this list of conditions and the following disclaimer.
7// * Redistributions in binary form must reproduce the above copyright
8// notice, this list of conditions and the following disclaimer in the
9// documentation and/or other materials provided with the distribution.
10// * Neither the name of NVIDIA CORPORATION nor the names of its
11// contributors may be used to endorse or promote products derived
12// from this software without specific prior written permission.
13//
14// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
15// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
18// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
22// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25//
26// Copyright (c) 2008-2021 NVIDIA Corporation. All rights reserved.
27// Copyright (c) 2004-2008 AGEIA Technologies, Inc. All rights reserved.
28// Copyright (c) 2001-2004 NovodeX AG. All rights reserved.
29
30
31#ifndef PX_PHYSICS_SCP_SHAPECORE
32#define PX_PHYSICS_SCP_SHAPECORE
33
34#include "PsUserAllocated.h"
35#include "GuGeometryUnion.h"
36#include "PxvGeometry.h"
37#include "PsUtilities.h"
38#include "PxFiltering.h"
39#include "PxShape.h"
40
41namespace physx
42{
43class PxShape;
44
45namespace Sc
46{
47 class Scene;
48 class RigidCore;
49 class BodyCore;
50 class ShapeSim;
51 class MaterialCore;
52
53 class ShapeCore : public Ps::UserAllocated
54 {
55 //= ATTENTION! =====================================================================================
56 // Changing the data layout of this class breaks the binary serialization format. See comments for
57 // PX_BINARY_SERIAL_VERSION. If a modification is required, please adjust the getBinaryMetaData
58 // function. If the modification is made on a custom branch, please change PX_BINARY_SERIAL_VERSION
59 // accordingly.
60 //==================================================================================================
61 public:
62// PX_SERIALIZATION
63 ShapeCore(const PxEMPTY);
64 void exportExtraData(PxSerializationContext& stream);
65 void importExtraData(PxDeserializationContext& context);
66 void resolveReferences(PxDeserializationContext& context);
67 static void getBinaryMetaData(PxOutputStream& stream);
68 void resolveMaterialReference(PxU32 materialTableIndex, PxU16 materialIndex);
69//~PX_SERIALIZATION
70
71 ShapeCore(const PxGeometry& geometry,
72 PxShapeFlags shapeFlags,
73 const PxU16* materialIndices,
74 PxU16 materialCount);
75
76 ~ShapeCore();
77
78 PX_FORCE_INLINE PxGeometryType::Enum getGeometryType() const { return mCore.geometry.getType(); }
79 PxShape* getPxShape();
80 const PxShape* getPxShape() const;
81
82 PX_FORCE_INLINE const Gu::GeometryUnion& getGeometryUnion() const { return mCore.geometry; }
83 PX_FORCE_INLINE const PxGeometry& getGeometry() const { return mCore.geometry.getGeometry(); }
84 void setGeometry(const PxGeometry& geom);
85
86 PxU16 getNbMaterialIndices() const;
87 const PxU16* getMaterialIndices() const;
88 void setMaterialIndices(const PxU16* materialIndices, PxU16 materialIndexCount);
89
90 PX_FORCE_INLINE const PxTransform& getShape2Actor() const { return mCore.transform; }
91 PX_FORCE_INLINE void setShape2Actor(const PxTransform& s2b) { mCore.transform = s2b; }
92
93 PX_FORCE_INLINE const PxFilterData& getSimulationFilterData() const { return mSimulationFilterData; }
94 PX_FORCE_INLINE void setSimulationFilterData(const PxFilterData& data) { mSimulationFilterData = data; }
95
96 // PT: this one doesn't need double buffering
97 PX_FORCE_INLINE const PxFilterData& getQueryFilterData() const { return mQueryFilterData; }
98 PX_FORCE_INLINE void setQueryFilterData(const PxFilterData& data) { mQueryFilterData = data; }
99
100 PX_FORCE_INLINE PxReal getContactOffset() const { return mCore.contactOffset; }
101 PX_FORCE_INLINE void setContactOffset(PxReal offset) { mCore.contactOffset = offset; }
102
103 PX_FORCE_INLINE PxReal getRestOffset() const { return mRestOffset; }
104 PX_FORCE_INLINE void setRestOffset(PxReal offset) { mRestOffset = offset; }
105
106 PX_FORCE_INLINE PxReal getTorsionalPatchRadius() const { return mTorsionalRadius; }
107 PX_FORCE_INLINE void setTorsionalPatchRadius(PxReal tpr) { mTorsionalRadius = tpr; }
108
109 PX_FORCE_INLINE PxReal getMinTorsionalPatchRadius() const {return mMinTorsionalPatchRadius; }
110 PX_FORCE_INLINE void setMinTorsionalPatchRadius(PxReal radius) { mMinTorsionalPatchRadius = radius; }
111
112 PX_FORCE_INLINE PxShapeFlags getFlags() const { return PxShapeFlags(mCore.mShapeFlags); }
113 PX_FORCE_INLINE void setFlags(PxShapeFlags f) { mCore.mShapeFlags = f; }
114
115 static PX_FORCE_INLINE size_t getCoreOffset() { return PX_OFFSET_OF(ShapeCore, mCore); }
116
117 PX_FORCE_INLINE const PxsShapeCore& getCore() const { return mCore; }
118
119 static PX_FORCE_INLINE ShapeCore& getCore(PxsShapeCore& core)
120 {
121 return *reinterpret_cast<ShapeCore*>(reinterpret_cast<PxU8*>(&core) - getCoreOffset());
122 }
123
124 protected:
125 PxFilterData mQueryFilterData; // Query filter data PT: TODO: consider moving this to SceneQueryShapeData
126 PxFilterData mSimulationFilterData; // Simulation filter data
127 PxsShapeCore PX_ALIGN(16, mCore);
128 PxReal mRestOffset; // same as the API property of the same name
129 PxReal mTorsionalRadius;
130 PxReal mMinTorsionalPatchRadius;
131 };
132
133} // namespace Sc
134
135
136}
137
138#endif
139

source code of qtquick3dphysics/src/3rdparty/PhysX/source/simulationcontroller/include/ScShapeCore.h