RavEngine
Loading...
Searching...
No Matches
NpPBDMaterial.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 NP_PBD_MATERIAL_H
30#define NP_PBD_MATERIAL_H
31
32#include "common/PxSerialFramework.h"
33#include "foundation/PxUserAllocated.h"
34#include "foundation/PxUtilities.h"
35#include "CmRefCountable.h"
36#include "PxsPBDMaterialCore.h"
37#include "PxPBDMaterial.h"
38
39namespace physx
40{
41 // Compared to other objects, materials are special since they belong to the SDK and not to scenes
42 // (similar to meshes). That's why the NpPBDMaterial does have direct access to the core material instead
43 // of having a buffered interface for it. Scenes will have copies of the SDK material table and there
44 // the materials will be buffered.
45
47 {
48 //= ATTENTION! =====================================================================================
49 // Changing the data layout of this class breaks the binary serialization format. See comments for
50 // PX_BINARY_SERIAL_VERSION. If a modification is required, please adjust the getBinaryMetaData
51 // function. If the modification is made on a custom branch, please change PX_BINARY_SERIAL_VERSION
52 // accordingly.
53 //==================================================================================================
54 public:
55 // PX_SERIALIZATION
56 NpPBDMaterial(PxBaseFlags baseFlags) : PxPBDMaterial(baseFlags), mMaterial(PxEmpty) {}
57 virtual void resolveReferences(PxDeserializationContext& context);
58 static NpPBDMaterial* createObject(PxU8*& address, PxDeserializationContext& context);
59 static void getBinaryMetaData(PxOutputStream& stream);
60
61 void preExportDataReset() { Cm::RefCountable_preExportDataReset(*this); }
62 void exportExtraData(PxSerializationContext&) {}
63 void importExtraData(PxDeserializationContext&) {}
64 virtual void requiresObjects(PxProcessPxBaseCallback&) {}
65 //~PX_SERIALIZATION
67 virtual ~NpPBDMaterial();
68
69 // PxBase
70 virtual void release() PX_OVERRIDE;
71 //~PxBase
72
73 // PxRefCounted
75 virtual PxU32 getReferenceCount() const PX_OVERRIDE;
76 virtual void onRefCountZero() PX_OVERRIDE;
77 //~PxRefCounted
78
79 // PxParticleMaterial
80 virtual void setFriction(PxReal friction) PX_OVERRIDE;
81 virtual PxReal getFriction() const PX_OVERRIDE;
82 virtual void setDamping(PxReal damping) PX_OVERRIDE;
83 virtual PxReal getDamping() const PX_OVERRIDE;
84 virtual void setAdhesion(PxReal adhesion) PX_OVERRIDE;
85 virtual PxReal getAdhesion() const PX_OVERRIDE;
86 virtual void setGravityScale(PxReal scale) PX_OVERRIDE;
87 virtual PxReal getGravityScale() const PX_OVERRIDE;
88 virtual void setAdhesionRadiusScale(PxReal scale) PX_OVERRIDE;
89 virtual PxReal getAdhesionRadiusScale() const PX_OVERRIDE;
90 //~PxParticleMaterial
91
92 // PxPBDMaterial
93 virtual void setViscosity(PxReal viscosity) PX_OVERRIDE;
94 virtual PxReal getViscosity() const PX_OVERRIDE;
95 virtual void setVorticityConfinement(PxReal vorticityConfinement) PX_OVERRIDE;
96 virtual PxReal getVorticityConfinement() const PX_OVERRIDE;
97 virtual void setSurfaceTension(PxReal surfaceTension) PX_OVERRIDE;
98 virtual PxReal getSurfaceTension() const PX_OVERRIDE;
99 virtual void setCohesion(PxReal cohesion) PX_OVERRIDE;
100 virtual PxReal getCohesion() const PX_OVERRIDE;
101 virtual void setLift(PxReal lift) PX_OVERRIDE;
102 virtual PxReal getLift() const PX_OVERRIDE;
103 virtual void setDrag(PxReal drag) PX_OVERRIDE;
104 virtual PxReal getDrag() const PX_OVERRIDE;
105 virtual void setCFLCoefficient(PxReal coefficient) PX_OVERRIDE;
106 virtual PxReal getCFLCoefficient() const PX_OVERRIDE;
107 virtual void setParticleFrictionScale(PxReal scale) PX_OVERRIDE;
108 virtual PxReal getParticleFrictionScale() const PX_OVERRIDE;
109 virtual void setParticleAdhesionScale(PxReal adhesion) PX_OVERRIDE;
110 virtual PxReal getParticleAdhesionScale() const PX_OVERRIDE;
111 //~PxPBDMaterial
112
113 PX_FORCE_INLINE static void getMaterialIndices(NpPBDMaterial*const* materials, PxU16* materialIndices, PxU32 materialCount);
114
115 private:
116 PX_INLINE void updateMaterial();
117
118 // PX_SERIALIZATION
119 public:
120 //~PX_SERIALIZATION
121 PxsPBDMaterialCore mMaterial;
122 };
123
124 PX_FORCE_INLINE void NpPBDMaterial::getMaterialIndices(NpPBDMaterial*const* materials, PxU16* materialIndices, PxU32 materialCount)
125 {
126 for (PxU32 i = 0; i < materialCount; i++)
127 materialIndices[i] = static_cast<NpPBDMaterial*>(materials[i])->mMaterial.mMaterialIndex;
128 }
129
130#if PX_ENABLE_FEATURES_UNDER_CONSTRUCTION
131 class NpCustomMaterial : public PxCustomMaterial, public PxUserAllocated
132 {
133 //= ATTENTION! =====================================================================================
134 // Changing the data layout of this class breaks the binary serialization format. See comments for
135 // PX_BINARY_SERIAL_VERSION. If a modification is required, please adjust the getBinaryMetaData
136 // function. If the modification is made on a custom branch, please change PX_BINARY_SERIAL_VERSION
137 // accordingly.
138 //==================================================================================================
139 public:
140 // PX_SERIALIZATION
141 NpCustomMaterial(PxBaseFlags baseFlags) : PxCustomMaterial(baseFlags), mMaterial(PxEmpty) {}
142 virtual void resolveReferences(PxDeserializationContext& context);
143 static NpCustomMaterial* createObject(PxU8*& address, PxDeserializationContext& context);
144 static void getBinaryMetaData(PxOutputStream& stream);
145
146 // PxBase
147 virtual void onRefCountZero();
148 //~PxBase
149
150 void preExportDataReset() { Cm::RefCountable_preExportDataReset(*this); }
151 void exportExtraData(PxSerializationContext&) {}
152 void importExtraData(PxDeserializationContext&) {}
153 virtual void requiresObjects(PxProcessPxBaseCallback&) {}
154 //~PX_SERIALIZATION
155 NpCustomMaterial(const PxsCustomMaterialCore& desc);
156 virtual ~NpCustomMaterial();
157
158 virtual void release();
159
160 // PxRefCounted
161 virtual void acquireReference();
162 virtual PxU32 getReferenceCount() const;
163 //~PxRefCounted
164
165 // PxParticleMaterial
166 virtual void setFriction(PxReal friction) PX_OVERRIDE;
167 virtual PxReal getFriction() const PX_OVERRIDE;
168 virtual void setDamping(PxReal damping) PX_OVERRIDE;
169 virtual PxReal getDamping() const PX_OVERRIDE;
170 virtual void setAdhesion(PxReal adhesion) PX_OVERRIDE;
171 virtual PxReal getAdhesion() const PX_OVERRIDE;
172 virtual void setGravityScale(PxReal scale) PX_OVERRIDE;
173 virtual PxReal getGravityScale() const PX_OVERRIDE;
174 virtual void setAdhesionRadiusScale(PxReal scale) PX_OVERRIDE;
175 virtual PxReal getAdhesionRadiusScale() const PX_OVERRIDE;
176 //~PxParticleMaterial
177
178 PX_FORCE_INLINE static void getMaterialIndices(NpCustomMaterial*const* materials, PxU16* materialIndices, PxU32 materialCount);
179
180 private:
181 PX_INLINE void updateMaterial();
182
183 // PX_SERIALIZATION
184 public:
185 //~PX_SERIALIZATION
186 PxsCustomMaterialCore mMaterial;
187 };
188
189 PX_FORCE_INLINE void NpCustomMaterial::getMaterialIndices(NpCustomMaterial*const* materials, PxU16* materialIndices, PxU32 materialCount)
190 {
191 for (PxU32 i = 0; i < materialCount; i++)
192 materialIndices[i] = static_cast<NpCustomMaterial*>(materials[i])->mMaterial.mMaterialIndex;
193 }
194#endif
195}
196
197#endif
Definition base.h:1940
Definition NpPBDMaterial.h:47
virtual PxReal getVorticityConfinement() const PX_OVERRIDE
Retrieves the vorticity confinement coefficient.
virtual PxReal getLift() const PX_OVERRIDE
Retrieves the lift coefficient.
virtual void setCohesion(PxReal cohesion) PX_OVERRIDE
Sets material cohesion coefficient.
virtual PxReal getAdhesion() const PX_OVERRIDE
Retrieves the adhesion term.
virtual void setVorticityConfinement(PxReal vorticityConfinement) PX_OVERRIDE
Sets material vorticity confinement coefficient.
virtual void setDamping(PxReal damping) PX_OVERRIDE
Sets velocity damping term.
virtual void setViscosity(PxReal viscosity) PX_OVERRIDE
Sets viscosity.
virtual PxReal getParticleAdhesionScale() const PX_OVERRIDE
Retrieves the particle adhesion scale value.
virtual PxReal getFriction() const PX_OVERRIDE
Retrieves the friction value.
virtual void setSurfaceTension(PxReal surfaceTension) PX_OVERRIDE
Sets material surface tension coefficient.
virtual void setParticleFrictionScale(PxReal scale) PX_OVERRIDE
Sets material particle friction scale. This allows the application to scale up/down the frictional ef...
virtual PxReal getParticleFrictionScale() const PX_OVERRIDE
Retrieves the particle friction scale.
virtual PxU32 getReferenceCount() const PX_OVERRIDE
Returns the reference count of the object.
virtual void setLift(PxReal lift) PX_OVERRIDE
Sets material lift coefficient.
virtual void setGravityScale(PxReal scale) PX_OVERRIDE
Sets gravity scale term.
virtual void setDrag(PxReal drag) PX_OVERRIDE
Sets material drag coefficient.
virtual PxReal getAdhesionRadiusScale() const PX_OVERRIDE
Retrieves the adhesion radius scale.
virtual void setParticleAdhesionScale(PxReal adhesion) PX_OVERRIDE
Sets material particle adhesion scale value. This is the adhesive value between particles defined as ...
virtual void setCFLCoefficient(PxReal coefficient) PX_OVERRIDE
Sets the CFL coefficient.
virtual PxReal getCohesion() const PX_OVERRIDE
Retrieves the cohesion coefficient.
virtual PxReal getSurfaceTension() const PX_OVERRIDE
Retrieves the surface tension coefficient.
virtual void setAdhesionRadiusScale(PxReal scale) PX_OVERRIDE
Sets material adhesion radius scale. This is multiplied by the particle rest offset to compute the fa...
virtual PxReal getDrag() const PX_OVERRIDE
Retrieves the drag coefficient.
virtual void setAdhesion(PxReal adhesion) PX_OVERRIDE
Sets adhesion term.
virtual PxReal getGravityScale() const PX_OVERRIDE
Retrieves the gravity scale term.
virtual void release() PX_OVERRIDE
Decrements the reference count of the object and releases it if the new reference count is zero.
virtual void acquireReference() PX_OVERRIDE
Acquires a counted reference to this object.
virtual void setFriction(PxReal friction) PX_OVERRIDE
Sets friction.
virtual PxReal getCFLCoefficient() const PX_OVERRIDE
Retrieves the CFL coefficient.
virtual PxReal getViscosity() const PX_OVERRIDE
Retrieves the viscosity value.
virtual PxReal getDamping() const PX_OVERRIDE
Retrieves the velocity damping term.
Definition PxPBDMaterial.h:215
Binary deserialization context class.
Definition PxSerialFramework.h:174
Output stream class for I/O.
Definition PxIO.h:114
Material class to represent a set of PBD particle material properties.
Definition PxPBDMaterial.h:49
Callback class used to process PxBase objects.
Definition PxSerialFramework.h:81
Binary serialization context class.
Definition PxSerialFramework.h:99
Definition PxUserAllocated.h:43
#define PX_FORCE_INLINE
Definition PxPreprocessor.h:335
#define PX_OVERRIDE
Definition PxPreprocessor.h:375
#define PX_INLINE
Definition PxPreprocessor.h:320
Sorts an array of objects in ascending order, assuming that the predicate implements the < operator:
Definition PxBoxController.h:39