aboutsummaryrefslogtreecommitdiff
path: root/PhysX_3.4/Include/common
diff options
context:
space:
mode:
authorgit perforce import user <a@b>2016-10-25 12:29:14 -0600
committerSheikh Dawood Abdul Ajees <Sheikh Dawood Abdul Ajees>2016-10-25 18:56:37 -0500
commit3dfe2108cfab31ba3ee5527e217d0d8e99a51162 (patch)
treefa6485c169e50d7415a651bf838f5bcd0fd3bfbd /PhysX_3.4/Include/common
downloadphysx-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/Include/common')
-rw-r--r--PhysX_3.4/Include/common/PxBase.h201
-rw-r--r--PhysX_3.4/Include/common/PxCollection.h279
-rw-r--r--PhysX_3.4/Include/common/PxCoreUtilityTypes.h210
-rw-r--r--PhysX_3.4/Include/common/PxMetaData.h228
-rw-r--r--PhysX_3.4/Include/common/PxMetaDataFlags.h74
-rw-r--r--PhysX_3.4/Include/common/PxPhysXCommonConfig.h92
-rw-r--r--PhysX_3.4/Include/common/PxPhysicsInsertionCallback.h84
-rw-r--r--PhysX_3.4/Include/common/PxRenderBuffer.h157
-rw-r--r--PhysX_3.4/Include/common/PxSerialFramework.h406
-rw-r--r--PhysX_3.4/Include/common/PxSerializer.h257
-rw-r--r--PhysX_3.4/Include/common/PxStringTable.h73
-rw-r--r--PhysX_3.4/Include/common/PxTolerancesScale.h121
-rw-r--r--PhysX_3.4/Include/common/PxTypeInfo.h132
-rw-r--r--PhysX_3.4/Include/common/windows/PxWindowsDelayLoadHook.h127
14 files changed, 2441 insertions, 0 deletions
diff --git a/PhysX_3.4/Include/common/PxBase.h b/PhysX_3.4/Include/common/PxBase.h
new file mode 100644
index 00000000..a43f2c94
--- /dev/null
+++ b/PhysX_3.4/Include/common/PxBase.h
@@ -0,0 +1,201 @@
+// 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_PX_BASE
+#define PX_PHYSICS_PX_BASE
+
+/** \addtogroup common
+@{
+*/
+
+#include "PxSerialFramework.h"
+#include "PxCollection.h"
+#include "common/PxTypeInfo.h"
+#include "foundation/PxFlags.h"
+#include <string.h> // For strcmp
+
+#if !PX_DOXYGEN
+namespace physx
+{
+#endif
+
+typedef PxU16 PxType;
+
+/**
+\brief Flags for PxBase.
+*/
+struct PxBaseFlag
+{
+ enum Enum
+ {
+ eOWNS_MEMORY = (1<<0),
+ eIS_RELEASABLE = (1<<1)
+ };
+};
+
+typedef PxFlags<PxBaseFlag::Enum, PxU16> PxBaseFlags;
+PX_FLAGS_OPERATORS(PxBaseFlag::Enum, PxU16)
+
+/**
+\brief Base class for objects that can be members of a PxCollection.
+
+All PxBase sub-classes can be serialized.
+
+@see PxCollection
+*/
+class PxBase
+{
+//= ATTENTION! =====================================================================================
+// Changing the data layout of this class breaks the binary serialization format. See comments for
+// PX_BINARY_SERIAL_VERSION. If a modification is required, please adjust the getBinaryMetaData
+// function. If the modification is made on a custom branch, please change PX_BINARY_SERIAL_VERSION
+// accordingly.
+//==================================================================================================
+public:
+ /**
+ \brief Releases the PxBase instance, please check documentation of release in derived class.
+ */
+ virtual void release() = 0;
+
+ /**
+ \brief Returns string name of dynamic type.
+ \return Class name of most derived type of this object.
+ */
+ virtual const char* getConcreteTypeName() const = 0;
+
+ /* brief Implements dynamic cast functionality.
+
+ Example use:
+
+ if(actor->is<PxRigidDynamic>()) {...}
+
+ \return A pointer to the specified type if object matches, otherwise NULL
+ */
+ template<class T> T* is() { return typeMatch<T>() ? static_cast<T*>(this) : NULL; }
+
+ /* brief Implements dynamic cast functionality for const objects.
+
+ Example use:
+
+ if(actor->is<PxRigidDynamic>()) {...}
+
+ \return A pointer to the specified type if object matches, otherwise NULL
+ */
+ template<class T> const T* is() const { return typeMatch<T>() ? static_cast<const T*>(this) : NULL; }
+
+ /**
+ \brief Returns concrete type of object.
+ \return PxConcreteType::Enum of serialized object
+
+ @see PxConcreteType
+ */
+ PX_FORCE_INLINE PxType getConcreteType() const { return mConcreteType; }
+
+ /**
+ \brief Set PxBaseFlag
+
+ \param[in] flag The flag to be set
+ \param[in] value The flags new value
+ */
+ PX_FORCE_INLINE void setBaseFlag(PxBaseFlag::Enum flag, bool value) { mBaseFlags = value ? mBaseFlags|flag : mBaseFlags&~flag; }
+
+ /**
+ \brief Set PxBaseFlags
+
+ \param[in] inFlags The flags to be set
+
+ @see PxBaseFlags
+ */
+ PX_FORCE_INLINE void setBaseFlags(PxBaseFlags inFlags ) { mBaseFlags = inFlags; }
+
+ /**
+ \brief Returns PxBaseFlags
+
+ \return PxBaseFlags
+
+ @see PxBaseFlags
+ */
+ PX_FORCE_INLINE PxBaseFlags getBaseFlags() const { return mBaseFlags; }
+
+ /**
+ \brief Whether the object is subordinate.
+
+ A class is subordinate, if it can only be instantiated in the context of another class.
+
+ \return Whether the class is subordinate
+
+ @see PxSerialization::isSerializable
+ */
+ virtual bool isReleasable() const { return mBaseFlags & PxBaseFlag::eIS_RELEASABLE; }
+
+protected:
+ /**
+ \brief Constructor setting concrete type and base flags.
+ */
+ PX_INLINE PxBase(PxType concreteType, PxBaseFlags baseFlags)
+ : mConcreteType(concreteType), mBaseFlags(baseFlags) {}
+
+ /**
+ \brief Deserialization constructor setting base flags.
+ */
+ PX_INLINE PxBase(PxBaseFlags baseFlags) : mBaseFlags(baseFlags) {}
+
+ /**
+ \brief Destructor.
+ */
+ virtual ~PxBase() {}
+
+ /**
+ \brief Returns whether a given type name matches with the type of this instance
+ */
+ virtual bool isKindOf(const char* superClass) const { return !::strcmp(superClass, "PxBase"); }
+
+ template<class T> bool typeMatch() const
+ {
+ return PxU32(PxTypeInfo<T>::eFastTypeId)!=PxU32(PxConcreteType::eUNDEFINED) ?
+ PxU32(getConcreteType()) == PxU32(PxTypeInfo<T>::eFastTypeId) : isKindOf(PxTypeInfo<T>::name());
+ }
+
+
+private:
+ friend void getBinaryMetaData_PxBase(PxOutputStream& stream);
+
+protected:
+ PxType mConcreteType; // concrete type identifier - see PxConcreteType.
+ PxBaseFlags mBaseFlags; // internal flags
+
+};
+
+#if !PX_DOXYGEN
+} // namespace physx
+#endif
+
+/** @} */
+#endif
diff --git a/PhysX_3.4/Include/common/PxCollection.h b/PhysX_3.4/Include/common/PxCollection.h
new file mode 100644
index 00000000..5ec79b22
--- /dev/null
+++ b/PhysX_3.4/Include/common/PxCollection.h
@@ -0,0 +1,279 @@
+// 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_PX_COLLECTION
+#define PX_PHYSICS_PX_COLLECTION
+
+#include "PxSerialFramework.h"
+
+/** \addtogroup common
+@{
+*/
+
+#if !PX_DOXYGEN
+namespace physx
+{
+#endif
+
+class PxBase;
+
+/**
+\brief Collection class for serialization.
+
+A collection is a set of PxBase objects. PxBase objects can be added to the collection
+regardless of other objects they depend on. Objects may be named using PxSerialObjectId values in order
+to resolve dependencies between objects of different collections.
+
+Serialization and deserialization only work through collections.
+
+A scene is typically serialized using the following steps:
+
+ -# create a serialization registry
+ -# create a collection for scene objects
+ -# complete the scene objects (adds all dependent objects, e.g. meshes)
+ -# serialize collection
+ -# release collection
+ -# release serialization registry
+
+For example the code may look like this:
+
+\code
+ PxPhysics* physics; // The physics
+ PxScene* scene; // The physics scene
+ SerialStream s; // The user-defined stream doing the actual write to disk
+
+ PxSerializationRegistry* registry = PxSerialization::createSerializationRegistry(*physics); // step 1)
+ PxCollection* collection = PxSerialization::createCollection(*scene); // step 2)
+ PxSerialization::complete(*collection, *registry); // step 3)
+ PxSerialization::serializeCollectionToBinary(s, *collection, *registry); // step 4)
+ collection->release(); // step 5)
+ registry->release(); // step 6)
+\endcode
+
+A scene is typically deserialized using the following steps:
+
+ -# load a serialized collection into memory
+ -# create a serialization registry
+ -# create a collection by passing the serialized memory block
+ -# add collected objects to scene
+ -# release collection
+ -# release serialization registry
+
+For example the code may look like this:
+
+\code
+ PxPhysics* physics; // The physics
+ PxScene* scene; // The physics scene
+ void* memory128; // a 128-byte aligned buffer previously loaded from disk by the user - step 1)
+
+ PxSerializationRegistry* registry = PxSerialization::createSerializationRegistry(*physics); // step 2)
+ PxCollection* collection = PxSerialization::createCollectionFromBinary(memory128, *registry); // step 3)
+ scene->addCollection(*collection); // step 4)
+ collection->release(); // step 5)
+ registry->release(); // step 6)
+\endcode
+
+@see PxBase, PxCreateCollection()
+*/
+class PxCollection
+{
+public:
+
+ /**
+ \brief Adds a PxBase object to the collection.
+
+ Adds a PxBase object to the collection. Optionally a PxSerialObjectId can be provided
+ in order to resolve dependencies between collections. A PxSerialObjectId value of PX_SERIAL_OBJECT_ID_INVALID
+ means the object remains without id. Objects can be added regardless of other objects they require. If the object
+ is already in the collection, the ID will be set if it was PX_SERIAL_OBJECT_ID_INVALID previously, otherwise the
+ operation fails.
+
+
+ \param[in] object Object to be added to the collection
+ \param[in] id Optional PxSerialObjectId id
+ */
+ virtual void add(PxBase& object, PxSerialObjectId id = PX_SERIAL_OBJECT_ID_INVALID) = 0;
+
+ /**
+ \brief Removes a PxBase member object from the collection.
+
+ Object needs to be contained by the collection.
+
+ \param[in] object PxBase object to be removed
+ */
+ virtual void remove(PxBase& object) = 0;
+
+ /**
+ \brief Returns whether the collection contains a certain PxBase object.
+
+ \param[in] object PxBase object
+ \return Whether object is contained.
+ */
+ virtual bool contains(PxBase& object) const = 0;
+
+ /**
+ \brief Adds an id to a member PxBase object.
+
+ If the object is already associated with an id within the collection, the id is replaced.
+ May only be called for objects that are members of the collection. The id needs to be unique
+ within the collection.
+
+ \param[in] object Member PxBase object
+ \param[in] id PxSerialObjectId id to be given to the object
+ */
+ virtual void addId(PxBase& object, PxSerialObjectId id) = 0;
+
+ /**
+ \brief Removes id from a contained PxBase object.
+
+ May only be called for ids that are associated with an object in the collection.
+
+ \param[in] id PxSerialObjectId value
+ */
+ virtual void removeId(PxSerialObjectId id) = 0;
+
+ /**
+ \brief Adds all PxBase objects and their ids of collection to this collection.
+
+ PxBase objects already in this collection are ignored. Object ids need to be conflict
+ free, i.e. the same object may not have two different ids within the two collections.
+
+ \param[in] collection Collection to be added
+ */
+ virtual void add(PxCollection& collection) = 0;
+
+ /**
+ \brief Removes all PxBase objects of collection from this collection.
+
+ PxBase objects not present in this collection are ignored. Ids of objects
+ which are removed are also removed.
+
+ \param[in] collection Collection to be removed
+ */
+ virtual void remove(PxCollection& collection) = 0;
+
+ /**
+ \brief Gets number of PxBase objects in this collection.
+
+ \return Number of objects in this collection
+ */
+ virtual PxU32 getNbObjects() const = 0;
+
+ /**
+ \brief Gets the PxBase object of this collection given its index.
+
+ \param[in] index PxBase index in [0, getNbObjects())
+ \return PxBase object at index index
+ */
+ virtual PxBase& getObject(PxU32 index) const = 0;
+
+ /**
+ \brief Copies member PxBase pointers to a user specified buffer.
+
+ \param[out] userBuffer Array of PxBase pointers
+ \param[in] bufferSize Capacity of userBuffer
+ \param[in] startIndex Offset into list of member PxBase objects
+ \return number of members PxBase objects that have been written to the userBuffer
+ */
+ virtual PxU32 getObjects(PxBase** userBuffer, PxU32 bufferSize, PxU32 startIndex=0) const = 0;
+
+ /**
+ \brief Looks for a PxBase object given a PxSerialObjectId value.
+
+ If there is no PxBase object in the collection with the given id, NULL is returned.
+
+ \param[in] id PxSerialObjectId value to look for
+ \return PxBase object with the given id value or NULL
+ */
+ virtual PxBase* find(PxSerialObjectId id) const = 0;
+
+ /**
+ \brief Gets number of PxSerialObjectId names in this collection.
+
+ \return Number of PxSerialObjectId names in this collection
+ */
+ virtual PxU32 getNbIds() const = 0;
+
+ /**
+ \brief Copies member PxSerialObjectId values to a user specified buffer.
+
+ \param[out] userBuffer Array of PxSerialObjectId values
+ \param[in] bufferSize Capacity of userBuffer
+ \param[in] startIndex Offset into list of member PxSerialObjectId values
+ \return number of members PxSerialObjectId values that have been written to the userBuffer
+ */
+ virtual PxU32 getIds(PxSerialObjectId* userBuffer, PxU32 bufferSize, PxU32 startIndex=0) const = 0;
+
+ /**
+ \brief Gets the PxSerialObjectId name of a PxBase object within the collection.
+
+ The PxBase object needs to be a member of the collection.
+
+ \param[in] object PxBase object to get id for
+ \return PxSerialObjectId name of the object or PX_SERIAL_OBJECT_ID_INVALID if the object is unnamed
+ */
+ virtual PxSerialObjectId getId(const PxBase& object) const = 0;
+
+ /**
+ \brief Deletes a collection object.
+
+ This function only deletes the collection object, i.e. the container class. It doesn't delete objects
+ that are part of the collection.
+
+ @see PxCreateCollection()
+ */
+
+ virtual void release() = 0;
+
+protected:
+ PxCollection() {}
+ virtual ~PxCollection() {}
+};
+
+#if !PX_DOXYGEN
+} // namespace physx
+#endif
+
+/**
+\brief Creates a collection object.
+
+Objects can only be serialized or deserialized through a collection.
+For serialization, users must add objects to the collection and serialize the collection as a whole.
+For deserialization, the system gives back a collection of deserialized objects to users.
+
+\return The new collection object.
+
+@see PxCollection, PxCollection::release()
+*/
+PX_PHYSX_COMMON_API physx::PxCollection* PX_CALL_CONV PxCreateCollection();
+
+
+/** @} */
+#endif
diff --git a/PhysX_3.4/Include/common/PxCoreUtilityTypes.h b/PhysX_3.4/Include/common/PxCoreUtilityTypes.h
new file mode 100644
index 00000000..b8ca488d
--- /dev/null
+++ b/PhysX_3.4/Include/common/PxCoreUtilityTypes.h
@@ -0,0 +1,210 @@
+// 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_CORE_UTILTY_TYPES_H
+#define PX_CORE_UTILTY_TYPES_H
+/** \addtogroup common
+@{
+*/
+
+#include "foundation/PxAssert.h"
+
+#if !PX_DOXYGEN
+namespace physx
+{
+#endif
+
+
+struct PxStridedData
+{
+ /**
+ \brief The offset in bytes between consecutive samples in the data.
+
+ <b>Default:</b> 0
+ */
+ PxU32 stride;
+ const void* data;
+
+ PxStridedData() : stride( 0 ), data( NULL ) {}
+
+ template<typename TDataType>
+ PX_INLINE const TDataType& at( PxU32 idx ) const
+ {
+ PxU32 theStride( stride );
+ if ( theStride == 0 )
+ theStride = sizeof( TDataType );
+ PxU32 offset( theStride * idx );
+ return *(reinterpret_cast<const TDataType*>( reinterpret_cast< const PxU8* >( data ) + offset ));
+ }
+};
+
+template<typename TDataType>
+struct PxTypedStridedData
+{
+ PxU32 stride;
+ const TDataType* data;
+
+ PxTypedStridedData()
+ : stride( 0 )
+ , data( NULL )
+ {
+ }
+
+};
+
+struct PxBoundedData : public PxStridedData
+{
+ PxU32 count;
+ PxBoundedData() : count( 0 ) {}
+};
+
+template<PxU8 TNumBytes>
+struct PxPadding
+{
+ PxU8 mPadding[TNumBytes];
+ PxPadding()
+ {
+ for ( PxU8 idx =0; idx < TNumBytes; ++idx )
+ mPadding[idx] = 0;
+ }
+};
+
+template <PxU32 NB_ELEMENTS> class PxFixedSizeLookupTable
+{
+//= ATTENTION! =====================================================================================
+// Changing the data layout of this class breaks the binary serialization format. See comments for
+// PX_BINARY_SERIAL_VERSION. If a modification is required, please adjust the getBinaryMetaData
+// function. If the modification is made on a custom branch, please change PX_BINARY_SERIAL_VERSION
+// accordingly.
+//==================================================================================================
+public:
+
+ PxFixedSizeLookupTable()
+ : mNbDataPairs(0)
+ {
+ }
+
+ PxFixedSizeLookupTable(const PxEMPTY) {}
+
+ PxFixedSizeLookupTable(const PxReal* dataPairs, const PxU32 numDataPairs)
+ {
+ memcpy(mDataPairs,dataPairs,sizeof(PxReal)*2*numDataPairs);
+ mNbDataPairs=numDataPairs;
+ }
+
+ PxFixedSizeLookupTable(const PxFixedSizeLookupTable& src)
+ {
+ memcpy(mDataPairs,src.mDataPairs,sizeof(PxReal)*2*src.mNbDataPairs);
+ mNbDataPairs=src.mNbDataPairs;
+ }
+
+ ~PxFixedSizeLookupTable()
+ {
+ }
+
+ PxFixedSizeLookupTable& operator=(const PxFixedSizeLookupTable& src)
+ {
+ memcpy(mDataPairs,src.mDataPairs,sizeof(PxReal)*2*src.mNbDataPairs);
+ mNbDataPairs=src.mNbDataPairs;
+ return *this;
+ }
+
+ PX_FORCE_INLINE void addPair(const PxReal x, const PxReal y)
+ {
+ PX_ASSERT(mNbDataPairs<NB_ELEMENTS);
+ mDataPairs[2*mNbDataPairs+0]=x;
+ mDataPairs[2*mNbDataPairs+1]=y;
+ mNbDataPairs++;
+ }
+
+ PX_FORCE_INLINE PxReal getYVal(const PxReal x) const
+ {
+ if(0==mNbDataPairs)
+ {
+ PX_ASSERT(false);
+ return 0;
+ }
+
+ if(1==mNbDataPairs || x<getX(0))
+ {
+ return getY(0);
+ }
+
+ PxReal x0=getX(0);
+ PxReal y0=getY(0);
+
+ for(PxU32 i=1;i<mNbDataPairs;i++)
+ {
+ const PxReal x1=getX(i);
+ const PxReal y1=getY(i);
+
+ if((x>=x0)&&(x<x1))
+ {
+ return (y0+(y1-y0)*(x-x0)/(x1-x0));
+ }
+
+ x0=x1;
+ y0=y1;
+ }
+
+ PX_ASSERT(x>=getX(mNbDataPairs-1));
+ return getY(mNbDataPairs-1);
+ }
+
+ PxU32 getNbDataPairs() const {return mNbDataPairs;}
+
+ void clear()
+ {
+ memset(mDataPairs, 0, NB_ELEMENTS*2*sizeof(PxReal));
+ mNbDataPairs = 0;
+ }
+
+ PX_FORCE_INLINE PxReal getX(const PxU32 i) const
+ {
+ return mDataPairs[2*i];
+ }
+ PX_FORCE_INLINE PxReal getY(const PxU32 i) const
+ {
+ return mDataPairs[2*i+1];
+ }
+
+ PxReal mDataPairs[2*NB_ELEMENTS];
+ PxU32 mNbDataPairs;
+ PxU32 mPad[3];
+
+
+};
+
+#if !PX_DOXYGEN
+} // namespace physx
+#endif
+
+/** @} */
+#endif
diff --git a/PhysX_3.4/Include/common/PxMetaData.h b/PhysX_3.4/Include/common/PxMetaData.h
new file mode 100644
index 00000000..5348ac19
--- /dev/null
+++ b/PhysX_3.4/Include/common/PxMetaData.h
@@ -0,0 +1,228 @@
+// 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_METADATA_H
+#define PX_PHYSICS_METADATA_H
+/** \addtogroup physics
+@{
+*/
+
+#include "foundation/Px.h"
+#include "foundation/PxIO.h"
+#include "PxMetaDataFlags.h"
+
+
+#if !PX_DOXYGEN
+namespace physx
+{
+#endif
+
+ /**
+ \brief Struct to store meta data definitions.
+
+ Note: The individual fields have different meaning depending on the meta data entry configuration.
+ */
+ struct PxMetaDataEntry
+ {
+ const char* type; //!< Field type (bool, byte, quaternion, etc)
+ const char* name; //!< Field name (appears exactly as in the source file)
+ PxU32 offset; //!< Offset from the start of the class (ie from "this", field is located at "this"+Offset)
+ PxU32 size; //!< sizeof(Type)
+ PxU32 count; //!< Number of items of type Type (0 for dynamic sizes)
+ PxU32 offsetSize; //!< Offset of dynamic size param, for dynamic arrays
+ PxU32 flags; //!< Field parameters
+ PxU32 alignment; //!< Explicit alignment
+ };
+
+ #define PX_STORE_METADATA(stream, metaData) stream.write(&metaData, sizeof(PxMetaDataEntry))
+
+ #define PX_SIZE_OF(Class, Member) sizeof((reinterpret_cast<Class*>(0))->Member)
+
+ /**
+ \brief specifies a binary metadata entry for a member variable of a class
+ */
+ #define PX_DEF_BIN_METADATA_ITEM(stream, Class, type, name, flags) \
+ { \
+ PxMetaDataEntry tmp = { #type, #name, PxU32(PX_OFFSET_OF_RT(Class, name)), PX_SIZE_OF(Class, name), \
+ 1, 0, flags, 0}; \
+ PX_STORE_METADATA(stream, tmp); \
+ }
+
+ /**
+ \brief specifies a binary metadata entry for a member array variable of a class
+ \details similar to PX_DEF_BIN_METADATA_ITEMS_AUTO but for cases with mismatch between specified type and array type
+ */
+ #define PX_DEF_BIN_METADATA_ITEMS(stream, Class, type, name, flags, count) \
+ { \
+ PxMetaDataEntry tmp = { #type, #name, PxU32(PX_OFFSET_OF_RT(Class, name)), PX_SIZE_OF(Class, name), \
+ count, 0, flags, 0}; \
+ PX_STORE_METADATA(stream, tmp); \
+ }
+
+ /**
+ \brief specifies a binary metadata entry for a member array variable of a class
+ \details similar to PX_DEF_BIN_METADATA_ITEMS but automatically detects the array length, which only works when the specified
+ type matches the type of the array - does not support PxMetaDataFlag::ePTR
+ */
+ #define PX_DEF_BIN_METADATA_ITEMS_AUTO(stream, Class, type, name, flags) \
+ { \
+ PxMetaDataEntry tmp = { #type, #name, PxU32(PX_OFFSET_OF_RT(Class, name)), PX_SIZE_OF(Class, name), \
+ sizeof((reinterpret_cast<Class*>(0))->name)/sizeof(type), 0, flags, 0}; \
+ PX_STORE_METADATA(stream, tmp); \
+ }
+
+ /**
+ \brief specifies a binary metadata entry for a class
+ */
+ #define PX_DEF_BIN_METADATA_CLASS(stream, Class) \
+ { \
+ PxMetaDataEntry tmp = { #Class, 0, 0, sizeof(Class), 0, 0, PxMetaDataFlag::eCLASS, 0 }; \
+ PX_STORE_METADATA(stream, tmp); \
+ }
+
+ /**
+ \brief specifies a binary metadata entry for a virtual class
+ */
+ #define PX_DEF_BIN_METADATA_VCLASS(stream, Class) \
+ { \
+ PxMetaDataEntry tmp = { #Class, 0, 0, sizeof(Class), 0, 0, PxMetaDataFlag::eCLASS|PxMetaDataFlag::eVIRTUAL, 0}; \
+ PX_STORE_METADATA(stream, tmp); \
+ }
+
+ /**
+ \brief specifies a binary metadata entry for a typedef
+ */
+ #define PX_DEF_BIN_METADATA_TYPEDEF(stream, newType, oldType) \
+ { \
+ PxMetaDataEntry tmp = { #newType, #oldType, 0, 0, 0, 0, PxMetaDataFlag::eTYPEDEF, 0 }; \
+ PX_STORE_METADATA(stream, tmp); \
+ }
+
+ /**
+ \brief specifies a binary metadata entry for declaring a base class
+ */
+ #define PX_DEF_BIN_METADATA_BASE_CLASS(stream, Class, BaseClass) \
+ { \
+ Class* myClass = reinterpret_cast<Class*>(42); \
+ BaseClass* s = static_cast<BaseClass*>(myClass); \
+ const PxU32 offset = PxU32(size_t(s) - size_t(myClass)); \
+ PxMetaDataEntry tmp = { #Class, #BaseClass, offset, sizeof(Class), 0, 0, PxMetaDataFlag::eCLASS, 0 }; \
+ PX_STORE_METADATA(stream, tmp); \
+ }
+
+ /**
+ \brief specifies a binary metadata entry for a union
+ */
+ #define PX_DEF_BIN_METADATA_UNION(stream, Class, name) \
+ { \
+ PxMetaDataEntry tmp = { #Class, 0, PxU32(PX_OFFSET_OF_RT(Class, name)), PX_SIZE_OF(Class, name), \
+ 1, 0, PxMetaDataFlag::eUNION, 0 }; \
+ PX_STORE_METADATA(stream, tmp); \
+ }
+
+ /**
+ \brief specifies a binary metadata entry for a particular member type of a union
+ */
+ #define PX_DEF_BIN_METADATA_UNION_TYPE(stream, Class, type, enumValue) \
+ { \
+ PxMetaDataEntry tmp = { #Class, #type, enumValue, 0, 0, 0, PxMetaDataFlag::eUNION, 0 }; \
+ PX_STORE_METADATA(stream, tmp); \
+ }
+
+ /**
+ \brief specifies a binary metadata entry for extra data
+ */
+ #define PX_DEF_BIN_METADATA_EXTRA_ITEM(stream, Class, type, control, align) \
+ { \
+ PxMetaDataEntry tmp = { #type, 0, PxU32(PX_OFFSET_OF_RT(Class, control)), sizeof(type), 0, PxU32(PX_SIZE_OF(Class, control)), \
+ PxMetaDataFlag::eEXTRA_DATA|PxMetaDataFlag::eEXTRA_ITEM, align }; \
+ PX_STORE_METADATA(stream, tmp); \
+ }
+
+ /**
+ \brief specifies a binary metadata entry for an array of extra data
+ */
+ #define PX_DEF_BIN_METADATA_EXTRA_ITEMS(stream, Class, type, control, count, flags, align) \
+ { \
+ PxMetaDataEntry tmp = { #type, 0, PxU32(PX_OFFSET_OF_RT(Class, control)), PxU32(PX_SIZE_OF(Class, control)), \
+ PxU32(PX_OFFSET_OF_RT(Class, count)), PxU32(PX_SIZE_OF(Class, count)), \
+ PxMetaDataFlag::eEXTRA_DATA|PxMetaDataFlag::eEXTRA_ITEMS|flags, align }; \
+ PX_STORE_METADATA(stream, tmp); \
+ }
+
+ /**
+ \brief specifies a binary metadata entry for an array of extra data
+ additional to PX_DEF_BIN_METADATA_EXTRA_ITEMS a mask can be specified to interpret the control value
+ @see PxMetaDataFlag::eCONTROL_MASK
+ */
+ #define PX_DEF_BIN_METADATA_EXTRA_ITEMS_MASKED_CONTROL(stream, Class, type, control, controlMask ,count, flags, align) \
+ { \
+ PxMetaDataEntry tmp = { #type, 0, PxU32(PX_OFFSET_OF_RT(Class, control)), PxU32(PX_SIZE_OF(Class, control)), \
+ PxU32(PX_OFFSET_OF_RT(Class, count)), PxU32(PX_SIZE_OF(Class, count)), \
+ PxMetaDataFlag::eCONTROL_MASK|PxMetaDataFlag::eEXTRA_DATA|PxMetaDataFlag::eEXTRA_ITEMS|flags|(controlMask & PxMetaDataFlag::eCONTROL_MASK_RANGE) << 16, \
+ align}; \
+ PX_STORE_METADATA(stream, tmp); \
+ }
+
+ /**
+ \brief specifies a binary metadata entry for an array of extra data
+ \details similar to PX_DEF_BIN_METADATA_EXTRA_ITEMS, but supporting no control - PxMetaDataFlag::ePTR is also not supported
+ */
+ #define PX_DEF_BIN_METADATA_EXTRA_ARRAY(stream, Class, type, dyn_count, align, flags) \
+ { \
+ PxMetaDataEntry tmp = { #type, 0, PxU32(PX_OFFSET_OF_RT(Class, dyn_count)), PX_SIZE_OF(Class, dyn_count), align, 0, \
+ PxMetaDataFlag::eEXTRA_DATA|flags, align }; \
+ PX_STORE_METADATA(stream, tmp); \
+ }
+
+ /**
+ \brief specifies a binary metadata entry for an string of extra data
+ */
+ #define PX_DEF_BIN_METADATA_EXTRA_NAME(stream, Class, control, align) \
+ { \
+ PxMetaDataEntry tmp = { "char", "string", 0, 0, 0, 0, PxMetaDataFlag::eEXTRA_DATA|PxMetaDataFlag::eEXTRA_NAME, align }; \
+ PX_STORE_METADATA(stream, tmp); \
+ }
+
+ /**
+ \brief specifies a binary metadata entry declaring an extra data alignment for a class
+ */
+ #define PX_DEF_BIN_METADATA_EXTRA_ALIGN(stream, Class, align) \
+ { \
+ PxMetaDataEntry tmp = { "PxU8", "Alignment", 0, 0, 0, 0, PxMetaDataFlag::eEXTRA_DATA|PxMetaDataFlag::eALIGNMENT, align}; \
+ PX_STORE_METADATA(stream, tmp); \
+ }
+
+#if !PX_DOXYGEN
+} // namespace physx
+#endif
+
+/** @} */
+#endif
diff --git a/PhysX_3.4/Include/common/PxMetaDataFlags.h b/PhysX_3.4/Include/common/PxMetaDataFlags.h
new file mode 100644
index 00000000..c6012e91
--- /dev/null
+++ b/PhysX_3.4/Include/common/PxMetaDataFlags.h
@@ -0,0 +1,74 @@
+// 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_METADATA_FLAGS
+#define PX_PHYSICS_METADATA_FLAGS
+
+#include "foundation/Px.h"
+
+#if !PX_DOXYGEN
+namespace physx
+{
+#endif
+
+ /**
+ \brief Flags used to configure binary meta data entries, typically set through PX_DEF_BIN_METADATA defines.
+
+ @see PxMetaDataEntry
+ */
+ struct PxMetaDataFlag
+ {
+ enum Enum
+ {
+ eCLASS = (1<<0), //!< declares a class
+ eVIRTUAL = (1<<1), //!< declares class to be virtual
+ eTYPEDEF = (1<<2), //!< declares a typedef
+ ePTR = (1<<3), //!< declares a pointer
+ eEXTRA_DATA = (1<<4), //!< declares extra data exported with PxSerializer::exportExtraData
+ eEXTRA_ITEM = (1<<5), //!< specifies one element of extra data
+ eEXTRA_ITEMS = (1<<6), //!< specifies an array of extra data
+ eEXTRA_NAME = (1<<7), //!< specifies a name of extra data
+ eUNION = (1<<8), //!< declares a union
+ ePADDING = (1<<9), //!< declares explicit padding data
+ eALIGNMENT = (1<<10), //!< declares aligned data
+ eCOUNT_MASK_MSB = (1<<11), //!< specifies that the count value's most significant bit needs to be masked out
+ eCOUNT_SKIP_IF_ONE = (1<<12), //!< specifies that the count value is treated as zero for a variable value of one - special case for single triangle meshes
+ eCONTROL_FLIP = (1<<13), //!< specifies that the control value is the negate of the variable value
+ eCONTROL_MASK = (1<<14), //!< specifies that the control value is masked - mask bits are assumed to be within eCONTROL_MASK_RANGE
+ eCONTROL_MASK_RANGE = 0x000000FF, //!< mask range allowed for eCONTROL_MASK
+ eFORCE_DWORD = 0x7fffffff
+ };
+ };
+
+#if !PX_DOXYGEN
+}
+#endif
+
+#endif
diff --git a/PhysX_3.4/Include/common/PxPhysXCommonConfig.h b/PhysX_3.4/Include/common/PxPhysXCommonConfig.h
new file mode 100644
index 00000000..f951161f
--- /dev/null
+++ b/PhysX_3.4/Include/common/PxPhysXCommonConfig.h
@@ -0,0 +1,92 @@
+// 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_COMMON_NX
+#define PX_PHYSICS_COMMON_NX
+
+/** \addtogroup common
+@{ */
+
+#include "foundation/Px.h"
+
+
+// define API function declaration (public API only needed because of extensions)
+#if defined PX_PHYSX_STATIC_LIB || defined PX_PHYSX_CORE_STATIC_LIB
+ #define PX_PHYSX_CORE_API
+#else
+ #if PX_WINDOWS
+ #if defined PX_PHYSX_CORE_EXPORTS
+ #define PX_PHYSX_CORE_API __declspec(dllexport)
+ #else
+ #define PX_PHYSX_CORE_API __declspec(dllimport)
+ #endif
+ #elif PX_UNIX_FAMILY
+ #define PX_PHYSX_CORE_API PX_UNIX_EXPORT
+ #else
+ #define PX_PHYSX_CORE_API
+ #endif
+#endif
+
+#if PX_WINDOWS && !defined(__CUDACC__)
+ #if defined PX_PHYSX_COMMON_EXPORTS
+ #define PX_PHYSX_COMMON_API __declspec(dllexport)
+ #else
+ #define PX_PHYSX_COMMON_API __declspec(dllimport)
+ #endif
+#elif PX_UNIX_FAMILY
+ #define PX_PHYSX_COMMON_API PX_UNIX_EXPORT
+#else
+ #define PX_PHYSX_COMMON_API
+#endif
+
+// Changing these parameters requires recompilation of the SDK
+
+#if !PX_DOXYGEN
+namespace physx
+{
+#endif
+ class PxCollection;
+ class PxBase;
+
+ class PxHeightField;
+ class PxHeightFieldDesc;
+
+ class PxTriangleMesh;
+ class PxConvexMesh;
+
+ typedef PxU32 PxTriangleID;
+ typedef PxU16 PxMaterialTableIndex;
+
+#if !PX_DOXYGEN
+} // namespace physx
+#endif
+
+/** @} */
+#endif
diff --git a/PhysX_3.4/Include/common/PxPhysicsInsertionCallback.h b/PhysX_3.4/Include/common/PxPhysicsInsertionCallback.h
new file mode 100644
index 00000000..e36c3320
--- /dev/null
+++ b/PhysX_3.4/Include/common/PxPhysicsInsertionCallback.h
@@ -0,0 +1,84 @@
+// 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_PX_PHYSICS_INSERTION_CALLBACK
+#define PX_PHYSICS_PX_PHYSICS_INSERTION_CALLBACK
+
+#include "PxBase.h"
+
+/** \addtogroup common
+@{
+*/
+
+#if !PX_DOXYGEN
+namespace physx
+{
+#endif
+
+ /**
+
+ \brief Callback interface that permits PxCooking to insert a
+ TriangleMesh, HeightfieldMesh or ConvexMesh directly into PxPhysics without the need to store
+ the cooking results into a stream.
+
+
+ Using this is advised only if real-time cooking is required; using "offline" cooking and
+ streams is otherwise preferred.
+
+ The default PxPhysicsInsertionCallback implementation must be used. The PxPhysics
+ default callback can be obtained using the PxPhysics::getPhysicsInsertionCallback().
+
+ @see PxCooking PxPhysics
+ */
+ class PxPhysicsInsertionCallback
+ {
+ public:
+ PxPhysicsInsertionCallback() {}
+
+ /**
+ \brief Builds object (TriangleMesh, HeightfieldMesh or ConvexMesh) from given data in PxPhysics.
+
+ \param type Object type to build.
+ \param data Object data
+ \return PxBase Created object in PxPhysics.
+ */
+ virtual PxBase* buildObjectFromData(PxConcreteType::Enum type, void* data) = 0;
+
+ protected:
+ virtual ~PxPhysicsInsertionCallback() {}
+ };
+
+
+#if !PX_DOXYGEN
+} // namespace physx
+#endif
+
+/** @} */
+#endif
diff --git a/PhysX_3.4/Include/common/PxRenderBuffer.h b/PhysX_3.4/Include/common/PxRenderBuffer.h
new file mode 100644
index 00000000..ab01425d
--- /dev/null
+++ b/PhysX_3.4/Include/common/PxRenderBuffer.h
@@ -0,0 +1,157 @@
+// 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_FOUNDATION_PXRENDERBUFFER_H
+#define PX_FOUNDATION_PXRENDERBUFFER_H
+
+/** \addtogroup common
+@{
+*/
+
+#include "common/PxPhysXCommonConfig.h"
+#include "foundation/PxVec3.h"
+#include "foundation/PxMat33.h"
+#include "foundation/PxBounds3.h"
+
+#if !PX_DOXYGEN
+namespace physx
+{
+#endif
+
+/**
+\brief Default color values used for debug rendering.
+*/
+struct PxDebugColor
+{
+ enum Enum
+ {
+ eARGB_BLACK = 0xff000000,
+ eARGB_RED = 0xffff0000,
+ eARGB_GREEN = 0xff00ff00,
+ eARGB_BLUE = 0xff0000ff,
+ eARGB_YELLOW = 0xffffff00,
+ eARGB_MAGENTA = 0xffff00ff,
+ eARGB_CYAN = 0xff00ffff,
+ eARGB_WHITE = 0xffffffff,
+ eARGB_GREY = 0xff808080,
+ eARGB_DARKRED = 0x88880000,
+ eARGB_DARKGREEN = 0x88008800,
+ eARGB_DARKBLUE = 0x88000088
+ };
+};
+
+/**
+\brief Used to store a single point and colour for debug rendering.
+*/
+struct PxDebugPoint
+{
+ PxDebugPoint(const PxVec3& p, const PxU32& c)
+ : pos(p), color(c) {}
+
+ PxVec3 pos;
+ PxU32 color;
+};
+
+/**
+\brief Used to store a single line and colour for debug rendering.
+*/
+struct PxDebugLine
+{
+ PxDebugLine(const PxVec3& p0, const PxVec3& p1, const PxU32& c)
+ : pos0(p0), color0(c), pos1(p1), color1(c) {}
+
+ PxVec3 pos0;
+ PxU32 color0;
+ PxVec3 pos1;
+ PxU32 color1;
+};
+
+/**
+\brief Used to store a single triangle and colour for debug rendering.
+*/
+struct PxDebugTriangle
+{
+ PxDebugTriangle(const PxVec3& p0, const PxVec3& p1, const PxVec3& p2, const PxU32& c)
+ : pos0(p0), color0(c), pos1(p1), color1(c), pos2(p2), color2(c) {}
+
+ PxVec3 pos0;
+ PxU32 color0;
+ PxVec3 pos1;
+ PxU32 color1;
+ PxVec3 pos2;
+ PxU32 color2;
+};
+
+/**
+\brief Used to store a text for debug rendering. Doesn't own 'string' array.
+*/
+struct PxDebugText
+{
+ PxDebugText() : string(0) {}
+
+ PxDebugText(const PxVec3& p, const PxReal& s, const PxU32& c, const char* str)
+ : position(p), size(s), color(c), string(str) {}
+
+ PxVec3 position;
+ PxReal size;
+ PxU32 color;
+ const char* string;
+};
+
+/**
+\brief Interface for points, lines, triangles, and text buffer.
+*/
+class PxRenderBuffer
+{
+public:
+ virtual ~PxRenderBuffer() {}
+
+ virtual PxU32 getNbPoints() const = 0;
+ virtual const PxDebugPoint* getPoints() const = 0;
+
+ virtual PxU32 getNbLines() const = 0;
+ virtual const PxDebugLine* getLines() const = 0;
+
+ virtual PxU32 getNbTriangles() const = 0;
+ virtual const PxDebugTriangle* getTriangles() const = 0;
+
+ virtual PxU32 getNbTexts() const = 0;
+ virtual const PxDebugText* getTexts() const = 0;
+
+ virtual void append(const PxRenderBuffer& other) = 0;
+ virtual void clear() = 0;
+};
+
+#if !PX_DOXYGEN
+} // namespace physx
+#endif
+
+/** @} */
+#endif
diff --git a/PhysX_3.4/Include/common/PxSerialFramework.h b/PhysX_3.4/Include/common/PxSerialFramework.h
new file mode 100644
index 00000000..daf5b99e
--- /dev/null
+++ b/PhysX_3.4/Include/common/PxSerialFramework.h
@@ -0,0 +1,406 @@
+// 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_COMMON_NX_SERIAL_FRAMEWORK
+#define PX_PHYSICS_COMMON_NX_SERIAL_FRAMEWORK
+
+/** \addtogroup common
+@{
+*/
+
+#include "common/PxPhysXCommonConfig.h"
+
+#if !PX_DOXYGEN
+namespace physx
+{
+#endif
+
+typedef PxU16 PxType;
+class PxBase;
+class PxSerializationContext;
+class PxRepXSerializer;
+class PxSerializer;
+class PxPhysics;
+
+//! Default serialization alignment
+#define PX_SERIAL_ALIGN 16
+
+//! Serialized input data must be aligned to this value
+#define PX_SERIAL_FILE_ALIGN 128
+
+//! PxSerialObjectId value for objects that do not have an ID
+#define PX_SERIAL_OBJECT_ID_INVALID 0
+
+//! ID type for PxBase objects in a PxCollection
+typedef PxU64 PxSerialObjectId;
+
+//! Bit to mark pointer type references, @see PxDeserializationContext
+#define PX_SERIAL_REF_KIND_PTR_TYPE_BIT (1u<<31)
+
+//! Reference kind value for PxBase objects
+#define PX_SERIAL_REF_KIND_PXBASE (0 | PX_SERIAL_REF_KIND_PTR_TYPE_BIT)
+
+//! Reference kind value for material indices
+#define PX_SERIAL_REF_KIND_MATERIAL_IDX (1)
+
+//! Used to fix multi-byte characters warning from gcc for situations like: PxU32 foo = 'CCTS';
+#define PX_MAKE_FOURCC(a, b, c, d) ( (a) | ((b)<<8) | ((c)<<16) | ((d)<<24) )
+
+/**
+\brief Callback class used to process PxBase objects.
+
+@see PxSerializer::requires
+*/
+class PxProcessPxBaseCallback
+{
+public:
+ virtual ~PxProcessPxBaseCallback() {}
+ virtual void process(PxBase&) = 0;
+};
+
+
+/**
+\brief Binary serialization context class.
+
+This class is used to register reference values and write object
+and object extra data during serialization.
+It is mainly used by the serialization framework. Except for custom
+serializable types, users should not have to worry about it.
+
+@see PxDeserializationContext
+*/
+class PxSerializationContext
+{
+public:
+
+ /**
+ \brief Registers a reference value corresponding to a PxBase object.
+
+ This method is assumed to be called in the implementation of PxSerializer::registerReferences for serialized
+ references that need to be resolved on deserialization.
+
+ A reference needs to be associated with exactly one PxBase object in either the collection or the
+ external references collection.
+
+ Different kinds of references are supported and need to be specified. In the most common case
+ (PX_SERIAL_REF_KIND_PXBASE) the PxBase object matches the reference value (which is the pointer
+ to the PxBase object). Integer references maybe registered as well (used for internal material
+ indices with PX_SERIAL_REF_KIND_MATERIAL_IDX). Other kinds could be added with the restriction that
+ for pointer types the kind value needs to be marked with the PX_SERIAL_REF_KIND_PTR_TYPE_BIT.
+
+ \param[in] base PxBase object associated with the reference
+ \param[in] kind What kind of reference this is (PX_SERIAL_REF_KIND_PXBASE, PX_SERIAL_REF_KIND_MATERIAL_IDX or custom kind)
+ \param[in] reference Value of reference
+
+ @see PxDeserializationContext::resolveReference, PX_SERIAL_REF_KIND_PXBASE, PX_SERIAL_REF_KIND_MATERIAL_IDX, PxSerializer::registerReferences
+ */
+ virtual void registerReference(PxBase& base, PxU32 kind, size_t reference) = 0;
+
+ /**
+ \brief Returns the collection that is being serialized.
+ */
+ virtual const PxCollection& getCollection() const = 0;
+
+ /**
+ \brief Serializes object data and object extra data.
+
+ This function is assumed to be called within the implementation of PxSerializer::exportData and PxSerializer::exportExtraData.
+
+ @see PxSerializer::exportData, PxSerializer::exportExtraData, PxSerializer::createObject, PxDeserializationContext::readExtraData
+ */
+ virtual void writeData(const void* data, PxU32 size) = 0;
+
+ /**
+ \brief Aligns the serialized data.
+
+ This function is assumed to be called within the implementation of PxSerializer::exportData and PxSerializer::exportExtraData.
+
+ @see PxSerializer::exportData, PxSerializer::exportExtraData, PxDeserializationContext::alignExtraData
+ */
+ virtual void alignData(PxU32 alignment = PX_SERIAL_ALIGN) = 0;
+
+ /**
+ \brief Helper function to write a name to the extraData if serialization is configured to save names.
+
+ This function is assumed to be called within the implementation of PxSerializer::exportExtraData.
+
+ @see PxSerialization::serializeCollectionToBinary, PxDeserializationContext::readName
+ */
+ virtual void writeName(const char* name) = 0;
+
+protected:
+
+ PxSerializationContext() {}
+ virtual ~PxSerializationContext() {}
+};
+
+
+/**
+\brief Binary deserialization context class.
+
+This class is used to resolve references and access extra data during deserialization.
+It is mainly used by the serialization framework. Except for custom
+serializable types, users should not have to worry about it.
+
+@see PxSerializationContext
+*/
+class PxDeserializationContext
+{
+public:
+
+ /**
+ \brief Retrieves a pointer to a deserialized PxBase object given a corresponding deserialized reference value
+
+ This method is assumed to be called in the implementation of PxSerializer::createObject in order
+ to update reference values on deserialization.
+
+ To update a PxBase reference the corresponding deserialized pointer value needs to be provided in order to retrieve
+ the location of the corresponding deserialized PxBase object. (PxDeserializationContext::translatePxBase simplifies
+ this common case).
+
+ For other kinds of references the reverence values need to be updated by deduction given the corresponding PxBase instance.
+
+ \param[in] kind What kind of reference this is (PX_SERIAL_REF_KIND_PXBASE, PX_SERIAL_REF_KIND_MATERIAL_IDX or custom kind)
+ \param[in] reference Deserialized reference value
+ \return PxBase object associated with the reference value
+
+ @see PxSerializationContext::registerReference, PX_SERIAL_REF_KIND_PXBASE, PX_SERIAL_REF_KIND_MATERIAL_IDX, translatePxBase
+ */
+ virtual PxBase* resolveReference(PxU32 kind, size_t reference) const = 0;
+
+ /**
+ \brief Helper function to update PxBase pointer on deserialization
+
+ @see resolveReference, PX_SERIAL_REF_KIND_PXBASE
+ */
+ template<typename T>
+ void translatePxBase(T*& base) { if (base) { base = static_cast<T*>(resolveReference(PX_SERIAL_REF_KIND_PXBASE, size_t(base))); } }
+
+ /**
+ \brief Helper function to read a name from the extra data during deserialization.
+
+ This function is assumed to be called within the implementation of PxSerializer::createObject.
+
+ @see PxSerializationContext::writeName
+ */
+ PX_INLINE void readName(const char*& name)
+ {
+ PxU32 len = *reinterpret_cast<PxU32*>(mExtraDataAddress);
+ mExtraDataAddress += sizeof(len);
+ name = len ? reinterpret_cast<const char*>(mExtraDataAddress) : NULL;
+ mExtraDataAddress += len;
+ }
+
+ /**
+ \brief Function to read extra data during deserialization.
+
+ This function is assumed to be called within the implementation of PxSerializer::createObject.
+
+ @see PxSerializationContext::writeData, PxSerializer::createObject
+ */
+ template<typename T>
+ PX_INLINE T* readExtraData(PxU32 count=1)
+ {
+ T* data = reinterpret_cast<T*>(mExtraDataAddress);
+ mExtraDataAddress += sizeof(T)*count;
+ return data;
+ }
+
+ /**
+ \brief Function to read extra data during deserialization optionally aligning the extra data stream before reading.
+
+ This function is assumed to be called within the implementation of PxSerializer::createObject.
+
+ @see PxSerializationContext::writeData, PxDeserializationContext::alignExtraData, PxSerializer::createObject
+ */
+ template<typename T, PxU32 alignment>
+ PX_INLINE T* readExtraData(PxU32 count=1)
+ {
+ alignExtraData(alignment);
+ return readExtraData<T>(count);
+ }
+
+ /**
+ \brief Function to align the extra data stream to a power of 2 alignment
+
+ This function is assumed to be called within the implementation of PxSerializer::createObject.
+
+ @see PxSerializationContext::alignData, PxSerializer::createObject
+ */
+ PX_INLINE void alignExtraData(PxU32 alignment = PX_SERIAL_ALIGN)
+ {
+ size_t addr = reinterpret_cast<size_t>(mExtraDataAddress);
+ addr = (addr+alignment-1)&~size_t(alignment-1);
+ mExtraDataAddress = reinterpret_cast<PxU8*>(addr);
+ }
+
+
+ /**
+ \brief Function to return the PX_PHYSX_VERSION value with which the data was originally serialized
+ */
+
+ virtual PxU32 getPhysXVersion() const = 0;
+
+protected:
+
+ PxDeserializationContext() {}
+ virtual ~PxDeserializationContext() {}
+
+ PxU8* mExtraDataAddress;
+};
+
+/**
+\brief Callback type for exporting binary meta data for a serializable type.
+@see PxSerializationRegistry::registerBinaryMetaDataCallback
+
+\param stream Stream to store binary meta data.
+*/
+typedef void (*PxBinaryMetaDataCallback)(PxOutputStream& stream);
+
+/**
+\brief Class serving as a registry for XML (RepX) and binary serializable types.
+
+In order to serialize and deserialize objects the application needs
+to maintain an instance of this class. It can be created with
+PxSerialization::createSerializationRegistry() and released with
+PxSerializationRegistry::release().
+
+@see PxSerialization::createSerializationRegistry
+*/
+class PxSerializationRegistry
+{
+public:
+ /************************************************************************************************/
+
+ /** @name Binary Serialization Functionality
+ */
+ //@{
+
+ /**
+ \brief Register a serializer for a concrete type
+
+ \param type PxConcreteType corresponding to the serializer
+ \param serializer The PxSerializer to be registered
+
+ @see PxConcreteType, PxSerializer, PxSerializationRegistry::unregisterSerializer
+ */
+ virtual void registerSerializer(PxType type, PxSerializer& serializer) = 0;
+
+ /**
+ \brief Unregister a serializer for a concrete type, and retrieves the corresponding serializer object.
+
+ \param type PxConcreteType for which the serializer should be unregistered
+ \return Unregistered serializer corresponding to type, NULL for types for which no serializer has been registered.
+
+ @see PxConcreteType, PxSerializationRegistry::registerSerializer, PxSerializationRegistry::release
+ */
+ virtual PxSerializer* unregisterSerializer(PxType type) = 0;
+
+ /**
+ \brief Register binary meta data callback
+
+ The callback is executed when calling PxSerialization::dumpBinaryMetaData.
+
+ \param callback PxBinaryMetaDataCallback to be registered.
+
+ @see PxBinaryMetaDataCallback, PxSerialization::dumpBinaryMetaData
+ */
+ virtual void registerBinaryMetaDataCallback(PxBinaryMetaDataCallback callback) = 0;
+
+ /**
+ \brief Returns PxSerializer corresponding to type
+
+ \param type PxConcreteType of the serializer requested.
+ \return Registered PxSerializer object corresponding to type
+
+ @see PxConcreteType
+ */
+ virtual const PxSerializer* getSerializer(PxType type) const = 0;
+
+ //@}
+ /************************************************************************************************/
+
+ /** @name RepX (XML) Serialization Functionality
+ */
+ //@{
+
+ /**
+ \brief Register a RepX serializer for a concrete type
+
+ \param type PxConcreteType corresponding to the RepX serializer
+ \param serializer The PxRepXSerializer to be registered
+
+ @see PxConcreteType, PxRepXSerializer
+ */
+ virtual void registerRepXSerializer(PxType type, PxRepXSerializer& serializer) = 0;
+
+ /**
+ \brief Unregister a RepX serializer for a concrete type, and retrieves the corresponding serializer object.
+
+ \param type PxConcreteType for which the RepX serializer should be unregistered
+ \return Unregistered PxRepxSerializer corresponding to type, NULL for types for which no RepX serializer has been registered.
+
+ @see PxConcreteType, PxSerializationRegistry::registerRepXSerializer, PxSerializationRegistry::release
+ */
+ virtual PxRepXSerializer* unregisterRepXSerializer(PxType type) = 0;
+
+ /**
+ \brief Returns RepX serializer given the corresponding type name
+
+ \param typeName Name of the type
+ \return Registered PxRepXSerializer object corresponding to type name
+
+ @see PxRepXSerializer, PxTypeInfo, PX_DEFINE_TYPEINFO
+ */
+ virtual PxRepXSerializer* getRepXSerializer(const char* typeName) const = 0;
+
+ //@}
+ /************************************************************************************************/
+
+ /**
+ \brief Releases PxSerializationRegistry instance.
+
+ This unregisters all PhysX and PhysXExtension serializers. Make sure to unregister all custom type
+ serializers before releasing the PxSerializationRegistry.
+
+ @see PxSerializationRegistry::unregisterSerializer, PxSerializationRegistry::unregisterRepXSerializer
+ */
+ virtual void release() = 0;
+
+protected:
+ virtual ~PxSerializationRegistry(){}
+};
+
+#if !PX_DOXYGEN
+} // namespace physx
+#endif
+
+/** @} */
+#endif
diff --git a/PhysX_3.4/Include/common/PxSerializer.h b/PhysX_3.4/Include/common/PxSerializer.h
new file mode 100644
index 00000000..0c7d0a76
--- /dev/null
+++ b/PhysX_3.4/Include/common/PxSerializer.h
@@ -0,0 +1,257 @@
+// 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_SERIALIZER_H
+#define PX_SERIALIZER_H
+/** \addtogroup extensions
+@{
+*/
+
+#include "PxSerialFramework.h"
+#include "PxCollection.h"
+#include "foundation/PxAssert.h"
+
+#if !PX_DOXYGEN
+namespace physx
+{
+#endif
+
+/**
+ \brief Serialization interface class.
+
+ PxSerializer is used to extend serializable PxBase classes with serialization functionality. The
+ interface is structured such that per-class adapter instances can be used as opposed to per-object
+ adapter instances, avoiding per object allocations. Hence the methods take a reference to PxBase as a parameter.
+
+ The PxSerializer interface needs to be implemented for binary or RepX serialization to work on custom
+ types. If only RepX serialization is needed, some methods can be left empty, as they are only needed
+ for binary serialization.
+
+ A default implementation is available as a template adapter (PxSerializerDefaultAdapter).
+
+ @see PxSerializerDefaultAdapter, PX_NEW_SERIALIZER_ADAPTER, PxSerializationRegistry::registerSerializer
+*/
+class PxSerializer
+{
+public:
+
+ /**********************************************************************************************************************/
+
+ /** @name Basics needed for Binary- and RepX-Serialization
+ */
+ //@{
+
+ /**
+ \brief Returns string name of dynamic type.
+
+ \return Class name of most derived type of this object.
+ */
+ virtual const char* getConcreteTypeName() const = 0;
+
+ /**
+ \brief Adds required objects to the collection.
+
+ This method does not add the required objects recursively, e.g. objects required by required objects.
+
+ @see PxCollection, PxSerialization::complete
+ */
+ virtual void requires(PxBase&, PxProcessPxBaseCallback&) const = 0;
+
+ /**
+ \brief Whether the object is subordinate.
+
+ A class is subordinate, if it can only be instantiated in the context of another class.
+
+ \return Whether the class is subordinate
+
+ @see PxSerialization::isSerializable
+ */
+ virtual bool isSubordinate() const = 0;
+
+ //@}
+ /**********************************************************************************************************************/
+
+ /**********************************************************************************************************************/
+
+ /** @name Functionality needed for Binary Serialization only
+ */
+ //@{
+
+ /**
+ \brief Exports object's extra data to stream.
+ */
+ virtual void exportExtraData(PxBase&, PxSerializationContext&) const = 0;
+
+ /**
+ \brief Exports object's data to stream.
+ */
+ virtual void exportData(PxBase&, PxSerializationContext&) const = 0;
+
+ /**
+ \brief Register references that the object maintains to other objects.
+ */
+ virtual void registerReferences(PxBase& obj, PxSerializationContext& s) const = 0;
+
+ /**
+ \brief Returns size needed to create the class instance.
+
+ \return sizeof class instance.
+ */
+ virtual size_t getClassSize() const = 0;
+
+ /**
+ \brief Create object at a given address, resolve references and import extra data.
+
+ \param address Location at which object is created. Address is increased by the size of the created object.
+ \param context Context for reading external data and resolving references.
+ \return Created PxBase pointer (needs to be identical to address before increment).
+ */
+ virtual PxBase* createObject(PxU8*& address, PxDeserializationContext& context) const = 0;
+
+ //@}
+ /**********************************************************************************************************************/
+ virtual ~PxSerializer() {}
+};
+
+
+/**
+ \brief Default PxSerializer implementation.
+*/
+template<class T>
+class PxSerializerDefaultAdapter : public PxSerializer
+{
+public:
+
+ /************************************************************************************************/
+
+ /** @name Basics needed for Binary- and RepX-Serialization
+ */
+ //@{
+
+ PxSerializerDefaultAdapter(const char* name) : mTypeName(name){}
+
+ virtual const char* getConcreteTypeName() const
+ {
+ return mTypeName;
+ }
+
+ virtual void requires(PxBase& obj, PxProcessPxBaseCallback& c) const
+ {
+ T& t = static_cast<T&>(obj);
+ t.requires(c);
+ }
+
+ virtual bool isSubordinate() const
+ {
+ return false;
+ }
+
+ //@}
+ /************************************************************************************************/
+
+ /** @name Functionality needed for Binary Serialization only
+ */
+ //@{
+
+ // object methods
+
+ virtual void exportExtraData(PxBase& obj, PxSerializationContext& s) const
+ {
+ T& t = static_cast<T&>(obj);
+ t.exportExtraData(s);
+ }
+
+ virtual void exportData(PxBase& obj, PxSerializationContext& s) const
+ {
+ s.writeData(&obj, sizeof(T));
+ }
+
+ virtual void registerReferences(PxBase& obj, PxSerializationContext& s) const
+ {
+ T& t = static_cast<T&>(obj);
+
+ s.registerReference(obj, PX_SERIAL_REF_KIND_PXBASE, size_t(&obj));
+
+ struct RequiresCallback : public PxProcessPxBaseCallback
+ {
+ RequiresCallback(PxSerializationContext& c) : context(c) {}
+ RequiresCallback& operator=(RequiresCallback&) { PX_ASSERT(0); return *this; }
+ void process(physx::PxBase& base)
+ {
+ context.registerReference(base, PX_SERIAL_REF_KIND_PXBASE, size_t(&base));
+ }
+ PxSerializationContext& context;
+ };
+
+ RequiresCallback callback(s);
+ t.requires(callback);
+ }
+
+ // class methods
+
+ virtual size_t getClassSize() const
+ {
+ return sizeof(T);
+ }
+
+ virtual PxBase* createObject(PxU8*& address, PxDeserializationContext& context) const
+ {
+ return T::createObject(address, context);
+ }
+
+
+ //@}
+ /************************************************************************************************/
+
+private:
+ const char* mTypeName;
+};
+
+/**
+ \brief Preprocessor Macro to simplify adapter creation.
+
+ Note: that the allocator used for creation needs to match with the one used in PX_DELETE_SERIALIZER_ADAPTER.
+*/
+#define PX_NEW_SERIALIZER_ADAPTER(x) \
+ *new( PxGetFoundation().getAllocatorCallback().allocate(sizeof(PxSerializerDefaultAdapter<x>), \
+ "PxSerializerDefaultAdapter", __FILE__, __LINE__ )) PxSerializerDefaultAdapter<x>(#x)
+
+/**
+ \brief Preprocessor Macro to simplify adapter deletion.
+*/
+#define PX_DELETE_SERIALIZER_ADAPTER(x) \
+ { PxSerializer* s = x; if (s) { s->~PxSerializer(); PxGetFoundation().getAllocatorCallback().deallocate(s); } }
+
+#if !PX_DOXYGEN
+} // namespace physx
+#endif
+
+/** @} */
+#endif
diff --git a/PhysX_3.4/Include/common/PxStringTable.h b/PhysX_3.4/Include/common/PxStringTable.h
new file mode 100644
index 00000000..d6db06b5
--- /dev/null
+++ b/PhysX_3.4/Include/common/PxStringTable.h
@@ -0,0 +1,73 @@
+// 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_STRING_TABLE_H
+#define PX_STRING_TABLE_H
+
+#include "foundation/PxPreprocessor.h"
+
+/** \addtogroup physics
+@{
+*/
+
+#if !PX_DOXYGEN
+namespace physx
+{
+#endif
+
+/**
+ * \brief a table to manage strings. Strings allocated through this object are expected to be owned by this object.
+ */
+class PxStringTable
+{
+protected:
+ virtual ~PxStringTable(){}
+public:
+ /**
+ * \brief Allocate a new string.
+ *
+ * \param[in] inSrc Source string, null terminated or null.
+ *
+ * \return *Always* a valid null terminated string. "" is returned if "" or null is passed in.
+ */
+ virtual const char* allocateStr( const char* inSrc ) = 0;
+
+ /**
+ * Release the string table and all the strings associated with it.
+ */
+ virtual void release() = 0;
+};
+
+#if !PX_DOXYGEN
+} // namespace physx
+#endif
+
+/** @} */
+#endif
diff --git a/PhysX_3.4/Include/common/PxTolerancesScale.h b/PhysX_3.4/Include/common/PxTolerancesScale.h
new file mode 100644
index 00000000..3d381aa4
--- /dev/null
+++ b/PhysX_3.4/Include/common/PxTolerancesScale.h
@@ -0,0 +1,121 @@
+// 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_SCALE_H
+#define PX_SCALE_H
+
+/** \addtogroup common
+ @{
+*/
+
+#include "common/PxPhysXCommonConfig.h"
+
+#if !PX_DOXYGEN
+namespace physx
+{
+#endif
+
+class PxPhysics;
+
+/**
+\brief Class to define the scale at which simulation runs. Most simulation tolerances are
+calculated in terms of the values here.
+
+\note if you change the simulation scale, you will probablly also wish to change the scene's
+default value of gravity, and stable simulation will probably require changes to the scene's
+bounceThreshold also.
+*/
+
+class PxTolerancesScale
+{
+public:
+
+ /** brief
+ The approximate size of objects in the simulation.
+
+ For simulating roughly human-sized in metric units, 1 is a good choice.
+ If simulation is done in centimetres, use 100 instead. This is used to
+ estimate certain length-related tolerances.
+
+ */
+
+ PxReal length;
+
+
+ /** brief
+ The approximate mass of a length * length * length block.
+ If using metric scale for character sized objects and measuring mass in
+ kilogrammes, 1000 is a good choice.
+ \note This parameter is ignored by the PhysX SDK.
+ */
+ PX_DEPRECATED PxReal mass;
+
+ /** brief
+ The typical magnitude of velocities of objects in simulation. This is used to estimate
+ whether a contact should be treated as bouncing or resting based on its impact velocity,
+ and a kinetic energy threshold below which the simulation may put objects to sleep.
+
+ For normal physical environments, a good choice is the approximate speed of an object falling
+ under gravity for one second.
+ */
+ PxReal speed;
+
+
+ /**
+ \brief constructor sets to default
+ */
+ PX_INLINE PxTolerancesScale();
+
+ /**
+ \brief Returns true if the descriptor is valid.
+ \return true if the current settings are valid (returns always true).
+ */
+ PX_INLINE bool isValid() const;
+
+};
+
+PX_INLINE PxTolerancesScale::PxTolerancesScale():
+ length(1),
+ mass(1000),
+ speed(10)
+ {
+ }
+
+PX_INLINE bool PxTolerancesScale::isValid() const
+{
+ return length>0 && mass>0;
+}
+
+#if !PX_DOXYGEN
+} // namespace physx
+#endif
+
+/** @} */
+#endif
diff --git a/PhysX_3.4/Include/common/PxTypeInfo.h b/PhysX_3.4/Include/common/PxTypeInfo.h
new file mode 100644
index 00000000..69a15e44
--- /dev/null
+++ b/PhysX_3.4/Include/common/PxTypeInfo.h
@@ -0,0 +1,132 @@
+// 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_COMMON_PX_TYPEINFO
+#define PX_PHYSICS_COMMON_PX_TYPEINFO
+
+/** \addtogroup common
+@{
+*/
+
+#include "common/PxPhysXCommonConfig.h"
+
+#if !PX_DOXYGEN
+namespace physx
+{
+#endif
+
+/**
+\brief an enumeration of concrete classes inheriting from PxBase
+
+Enumeration space is reserved for future PhysX core types, PhysXExtensions,
+PhysXVehicle and Custom application types.
+
+@see PxBase, PxTypeInfo
+*/
+
+struct PxConcreteType
+{
+ enum Enum
+ {
+ eUNDEFINED,
+
+ eHEIGHTFIELD,
+ eCONVEX_MESH,
+ eTRIANGLE_MESH_BVH33,
+ eTRIANGLE_MESH_BVH34,
+ eCLOTH_FABRIC,
+
+ eRIGID_DYNAMIC,
+ eRIGID_STATIC,
+ eSHAPE,
+ eMATERIAL,
+ eCONSTRAINT,
+ eCLOTH,
+ ePARTICLE_SYSTEM,
+ ePARTICLE_FLUID,
+ eAGGREGATE,
+ eARTICULATION,
+ eARTICULATION_LINK,
+ eARTICULATION_JOINT,
+ ePRUNING_STRUCTURE,
+
+ ePHYSX_CORE_COUNT,
+ eFIRST_PHYSX_EXTENSION = 256,
+ eFIRST_VEHICLE_EXTENSION = 512,
+ eFIRST_USER_EXTENSION = 1024
+ };
+};
+
+/**
+\brief a structure containing per-type information for types inheriting from PxBase
+
+@see PxBase, PxConcreteType
+*/
+
+template<typename T> struct PxTypeInfo {};
+
+#define PX_DEFINE_TYPEINFO(_name, _fastType) \
+ class _name; \
+ template <> struct PxTypeInfo<_name> { static const char* name() { return #_name; } enum { eFastTypeId = _fastType }; };
+
+/* the semantics of the fastType are as follows: an object A can be cast to a type B if B's fastType is defined, and A has the same fastType.
+ * This implies that B has no concrete subclasses or superclasses.
+ */
+
+PX_DEFINE_TYPEINFO(PxBase, PxConcreteType::eUNDEFINED)
+PX_DEFINE_TYPEINFO(PxMaterial, PxConcreteType::eMATERIAL)
+PX_DEFINE_TYPEINFO(PxConvexMesh, PxConcreteType::eCONVEX_MESH)
+PX_DEFINE_TYPEINFO(PxTriangleMesh, PxConcreteType::eUNDEFINED)
+PX_DEFINE_TYPEINFO(PxBVH33TriangleMesh, PxConcreteType::eTRIANGLE_MESH_BVH33)
+PX_DEFINE_TYPEINFO(PxBVH34TriangleMesh, PxConcreteType::eTRIANGLE_MESH_BVH34)
+PX_DEFINE_TYPEINFO(PxHeightField, PxConcreteType::eHEIGHTFIELD)
+PX_DEFINE_TYPEINFO(PxActor, PxConcreteType::eUNDEFINED)
+PX_DEFINE_TYPEINFO(PxRigidActor, PxConcreteType::eUNDEFINED)
+PX_DEFINE_TYPEINFO(PxRigidBody, PxConcreteType::eUNDEFINED)
+PX_DEFINE_TYPEINFO(PxRigidDynamic, PxConcreteType::eRIGID_DYNAMIC)
+PX_DEFINE_TYPEINFO(PxRigidStatic, PxConcreteType::eRIGID_STATIC)
+PX_DEFINE_TYPEINFO(PxArticulationLink, PxConcreteType::eARTICULATION_LINK)
+PX_DEFINE_TYPEINFO(PxArticulationJoint, PxConcreteType::eARTICULATION_JOINT)
+PX_DEFINE_TYPEINFO(PxArticulation, PxConcreteType::eARTICULATION)
+PX_DEFINE_TYPEINFO(PxAggregate, PxConcreteType::eAGGREGATE)
+PX_DEFINE_TYPEINFO(PxConstraint, PxConcreteType::eCONSTRAINT)
+PX_DEFINE_TYPEINFO(PxShape, PxConcreteType::eSHAPE)
+PX_DEFINE_TYPEINFO(PxClothFabric, PxConcreteType::eCLOTH_FABRIC)
+PX_DEFINE_TYPEINFO(PxCloth, PxConcreteType::eCLOTH)
+PX_DEFINE_TYPEINFO(PxParticleBase, PxConcreteType::eUNDEFINED)
+PX_DEFINE_TYPEINFO(PxParticleFluid, PxConcreteType::ePARTICLE_FLUID)
+PX_DEFINE_TYPEINFO(PxParticleSystem, PxConcreteType::ePARTICLE_SYSTEM)
+PX_DEFINE_TYPEINFO(PxPruningStructure, PxConcreteType::ePRUNING_STRUCTURE)
+
+#if !PX_DOXYGEN
+} // namespace physx
+#endif
+
+/** @} */
+#endif
diff --git a/PhysX_3.4/Include/common/windows/PxWindowsDelayLoadHook.h b/PhysX_3.4/Include/common/windows/PxWindowsDelayLoadHook.h
new file mode 100644
index 00000000..2a2afdca
--- /dev/null
+++ b/PhysX_3.4/Include/common/windows/PxWindowsDelayLoadHook.h
@@ -0,0 +1,127 @@
+// 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_DELAY_LOAD_HOOK
+#define PX_PHYSICS_DELAY_LOAD_HOOK
+
+#include "foundation/PxPreprocessor.h"
+#include "foundation/windows/PxWindowsFoundationDelayLoadHook.h"
+#include "common/PxPhysXCommonConfig.h"
+#if PX_SUPPORT_GPU_PHYSX
+#include "Pxg.h"
+#else
+#define PX_PHYSX_GPU_API
+#endif
+
+/** \addtogroup foundation
+@{
+*/
+
+#if !PX_DOXYGEN
+namespace physx
+{
+#endif
+ /**
+ \brief PxDelayLoadHook
+
+ This is a helper class for delay loading the PhysXCommon dll, PxFoundation dll and PxPvdSDK dll.
+ If a PhysXCommon dll, PxFoundation dll or PxPvdSDK dll with a non-default file name needs to be loaded,
+ PxDelayLoadHook can be sub-classed to provide the custom filenames.
+
+ Once the names are set, the instance must be set for use by PhysX.dll using PxSetPhysXDelayLoadHook(),
+ PhysXCooking.dll using PxSetPhysXCookingDelayLoadHook(), PhysXGPU.dll using PxSetPhysXGpuDelayLoadHook
+ or by PhysXCommon.dll using PxSetPhysXCommonDelayLoadHook().
+
+ \note Foundation names are set through the base class PxFoundationDelayLoadHook.
+
+ @see PxSetPhysXDelayLoadHook(), PxSetPhysXCookingDelayLoadHook(), PxSetPhysXGpuDelayLoadHook(), PxSetPhysXCommonDelayLoadHook()
+ @see PxFoundationDelayLoadHook
+ */
+ class PxDelayLoadHook: public PxFoundationDelayLoadHook
+ {
+ public:
+ PxDelayLoadHook() {}
+ virtual ~PxDelayLoadHook() {}
+
+ virtual const char* getPhysXCommonDEBUGDllName() const = 0;
+ virtual const char* getPhysXCommonCHECKEDDllName() const = 0;
+ virtual const char* getPhysXCommonPROFILEDllName() const = 0;
+ virtual const char* getPhysXCommonDllName() const = 0;
+
+ virtual const char* getPxPvdSDKDEBUGDllName() const = 0;
+ virtual const char* getPxPvdSDKCHECKEDDllName() const = 0;
+ virtual const char* getPxPvdSDKPROFILEDllName() const = 0;
+ virtual const char* getPxPvdSDKDllName() const = 0;
+
+ protected:
+ private:
+ };
+
+ /**
+ \brief Sets delay load hook instance for PhysX dll.
+
+ \param[in] hook Delay load hook.
+
+ @see PxDelayLoadHook
+ */
+ PX_C_EXPORT PX_PHYSX_CORE_API void PX_CALL_CONV PxSetPhysXDelayLoadHook(const physx::PxDelayLoadHook* hook);
+
+ /**
+ \brief Sets delay load hook instance for PhysXCooking dll.
+
+ \param[in] hook Delay load hook.
+
+ @see PxDelayLoadHook
+ */
+ PX_C_EXPORT PX_PHYSX_CORE_API void PX_CALL_CONV PxSetPhysXCookingDelayLoadHook(const physx::PxDelayLoadHook* hook);
+
+ /**
+ \brief Sets delay load hook instance for PhysXGpu dll.
+
+ \param[in] hook Delay load hook.
+
+ @see PxDelayLoadHook
+ */
+ PX_C_EXPORT PX_PHYSX_GPU_API void PX_CALL_CONV PxSetPhysXGpuDelayLoadHook(const physx::PxDelayLoadHook* hook);
+
+ /**
+ \brief Sets delay load hook instance for PhysXCommon dll.
+
+ \param[in] hook Delay load hook.
+
+ @see PxDelayLoadHook
+ */
+ PX_C_EXPORT PX_PHYSX_COMMON_API void PX_CALL_CONV PxSetPhysXCommonDelayLoadHook(const physx::PxDelayLoadHook* hook);
+
+#if !PX_DOXYGEN
+} // namespace physx
+#endif
+/** @} */
+#endif