diff options
| author | git perforce import user <a@b> | 2016-10-25 12:29:14 -0600 |
|---|---|---|
| committer | Sheikh Dawood Abdul Ajees <Sheikh Dawood Abdul Ajees> | 2016-10-25 18:56:37 -0500 |
| commit | 3dfe2108cfab31ba3ee5527e217d0d8e99a51162 (patch) | |
| tree | fa6485c169e50d7415a651bf838f5bcd0fd3bfbd /PhysX_3.4/Source/SimulationController/src/ScShapeSim.h | |
| download | physx-3.4-3dfe2108cfab31ba3ee5527e217d0d8e99a51162.tar.xz physx-3.4-3dfe2108cfab31ba3ee5527e217d0d8e99a51162.zip | |
Initial commit:
PhysX 3.4.0 Update @ 21294896
APEX 1.4.0 Update @ 21275617
[CL 21300167]
Diffstat (limited to 'PhysX_3.4/Source/SimulationController/src/ScShapeSim.h')
| -rw-r--r-- | PhysX_3.4/Source/SimulationController/src/ScShapeSim.h | 153 |
1 files changed, 153 insertions, 0 deletions
diff --git a/PhysX_3.4/Source/SimulationController/src/ScShapeSim.h b/PhysX_3.4/Source/SimulationController/src/ScShapeSim.h new file mode 100644 index 00000000..f59e4823 --- /dev/null +++ b/PhysX_3.4/Source/SimulationController/src/ScShapeSim.h @@ -0,0 +1,153 @@ +// This code contains NVIDIA Confidential Information and is disclosed to you +// under a form of NVIDIA software license agreement provided separately to you. +// +// Notice +// NVIDIA Corporation and its licensors retain all intellectual property and +// proprietary rights in and to this software and related documentation and +// any modifications thereto. Any use, reproduction, disclosure, or +// distribution of this software and related documentation without an express +// license agreement from NVIDIA Corporation is strictly prohibited. +// +// ALL NVIDIA DESIGN SPECIFICATIONS, CODE ARE PROVIDED "AS IS.". NVIDIA MAKES +// NO WARRANTIES, EXPRESSED, IMPLIED, STATUTORY, OR OTHERWISE WITH RESPECT TO +// THE MATERIALS, AND EXPRESSLY DISCLAIMS ALL IMPLIED WARRANTIES OF NONINFRINGEMENT, +// MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE. +// +// Information and code furnished is believed to be accurate and reliable. +// However, NVIDIA Corporation assumes no responsibility for the consequences of use of such +// information or for any infringement of patents or other rights of third parties that may +// result from its use. No license is granted by implication or otherwise under any patent +// or patent rights of NVIDIA Corporation. Details are subject to change without notice. +// This code supersedes and replaces all information previously supplied. +// NVIDIA Corporation products are not authorized for use as critical +// components in life support devices or systems without express written approval of +// NVIDIA Corporation. +// +// Copyright (c) 2008-2016 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_PHYSICS_SCP_SHAPESIM +#define PX_PHYSICS_SCP_SHAPESIM + +#include "ScElementSim.h" +#include "ScShapeCore.h" +#include "CmPtrTable.h" +#include "ScRigidSim.h" +#include "PxsShapeSim.h" + +namespace physx +{ + + class PxsTransformCache; +namespace Gu +{ + class TriangleMesh; + class HeightField; +} + +/** Simulation object corresponding to a shape core object. This object is created when + a ShapeCore object is added to the simulation, and destroyed when it is removed +*/ + +struct PxsRigidCore; + +namespace Sc +{ + + class RigidSim; + class ShapeCore; + class Scene; + class BodySim; + class StaticSim; + + PX_ALIGN_PREFIX(16) + class ShapeSim : public ElementSim + { + ShapeSim &operator=(const ShapeSim &); + public: + + // passing in a pointer for the shape to output its bounds allows us not to have to compute them twice. + // A neater way to do this would be to ask the AABB Manager for the bounds after the shape has been + // constructed, but there is currently no spec for what the AABBMgr is allowed to do with the bounds, + // hence better not to assume anything. + + ShapeSim(RigidSim&, const ShapeCore& core); + virtual ~ShapeSim(); + + // ElementSim + virtual void getFilterInfo(PxFilterObjectAttributes& filterAttr, PxFilterData& filterData) const; + //~ElementSim + + void reinsertBroadPhase(); + + PX_FORCE_INLINE const ShapeCore& getCore() const { return mCore; } + + // TODO: compile time coupling + + PX_INLINE PxGeometryType::Enum getGeometryType() const { return mCore.getGeometryType(); } + + // This is just for getting a reference for the user, so we cast away const-ness + + PX_INLINE PxShape* getPxShape() const { return const_cast<PxShape*>(mCore.getPxShape()); } + + PX_FORCE_INLINE PxReal getRestOffset() const { return mCore.getRestOffset(); } + PX_FORCE_INLINE PxU32 getFlags() const { return mCore.getFlags(); } + PX_FORCE_INLINE PxReal getContactOffset() const { return mCore.getContactOffset(); } + + PX_FORCE_INLINE RigidSim& getRbSim() const { return static_cast<RigidSim&>(getActor()); } + BodySim* getBodySim() const; + + PxsRigidCore& getPxsRigidCore() const; + bool actorIsDynamic() const; + + void onFilterDataChange(); + void onRestOffsetChange(); + void onFlagChange(PxShapeFlags oldFlags); + void onResetFiltering(); + void onVolumeOrTransformChange(bool asPartOfActorTransformChange, bool forceBoundsUpdate = false); + void onMaterialChange(); // remove when material properties are gone from PxcNpWorkUnit + void onContactOffsetChange(); + + void getAbsPoseAligned(PxTransform* PX_RESTRICT globalPose) const; + + PX_FORCE_INLINE PxU32 getID() const { return mId; } + PX_FORCE_INLINE PxU32 getTransformCacheID() const { return getElementID(); } + + void removeFromBroadPhase(bool wakeOnLostTouch); + + void createSqBounds(); + void destroySqBounds(); + + PX_FORCE_INLINE PxU32 getSqBoundsId() const { return mSqBoundsId; } + PX_FORCE_INLINE void setSqBoundsId(PxU32 id) { mSqBoundsId = id; } + + void updateCached(PxU32 transformCacheFlags, Cm::BitMapPinned* shapeChangedMap); + void updateCached(PxsTransformCache& transformCache, Bp::BoundsArray& boundsArray); + void updateContactDistance(PxReal* contactDistance, const PxReal inflation, const PxVec3 angVel, const PxReal dt, Bp::BoundsArray& boundsArray); + Ps::IntBool updateSweptBounds(); + + PX_FORCE_INLINE PxsShapeSim& getLLShapeSim() { return mLLShape; } + private: + PxsShapeSim mLLShape; + const ShapeCore& mCore; + PxU32 mId; + PxU32 mSqBoundsId; + + PX_FORCE_INLINE void internalAddToBroadPhase(); + PX_FORCE_INLINE void internalRemoveFromBroadPhase(); + void initSubsystemsDependingOnElementID(); + } + PX_ALIGN_SUFFIX(16); + +#if !PX_P64_FAMILY +// PX_COMPILE_TIME_ASSERT(32==sizeof(Sc::ShapeSim)); // after removing bounds from shapes +// PX_COMPILE_TIME_ASSERT((sizeof(Sc::ShapeSim) % 16) == 0); // aligned mem bounds are better for prefetching +#endif + +} // namespace Sc + +} + +#endif |