Differential D8762 Diff 28333 extern/bullet2/src/BulletCollision/CollisionShapes/btStridingMeshInterface.h
Changeset View
Changeset View
Standalone View
Standalone View
extern/bullet2/src/BulletCollision/CollisionShapes/btStridingMeshInterface.h
| Show All 14 Lines | |||||
| #ifndef BT_STRIDING_MESHINTERFACE_H | #ifndef BT_STRIDING_MESHINTERFACE_H | ||||
| #define BT_STRIDING_MESHINTERFACE_H | #define BT_STRIDING_MESHINTERFACE_H | ||||
| #include "LinearMath/btVector3.h" | #include "LinearMath/btVector3.h" | ||||
| #include "btTriangleCallback.h" | #include "btTriangleCallback.h" | ||||
| #include "btConcaveShape.h" | #include "btConcaveShape.h" | ||||
| /// The btStridingMeshInterface is the interface class for high performance generic access to triangle meshes, used in combination with btBvhTriangleMeshShape and some other collision shapes. | /// The btStridingMeshInterface is the interface class for high performance generic access to triangle meshes, used in combination with btBvhTriangleMeshShape and some other collision shapes. | ||||
| /// Using index striding of 3*sizeof(integer) it can use triangle arrays, using index striding of 1*sizeof(integer) it can handle triangle strips. | /// Using index striding of 3*sizeof(integer) it can use triangle arrays, using index striding of 1*sizeof(integer) it can handle triangle strips. | ||||
| /// It allows for sharing graphics and collision meshes. Also it provides locking/unlocking of graphics meshes that are in gpu memory. | /// It allows for sharing graphics and collision meshes. Also it provides locking/unlocking of graphics meshes that are in gpu memory. | ||||
| ATTRIBUTE_ALIGNED16(class ) btStridingMeshInterface | ATTRIBUTE_ALIGNED16(class) | ||||
| btStridingMeshInterface | |||||
| { | { | ||||
| protected: | protected: | ||||
| btVector3 m_scaling; | btVector3 m_scaling; | ||||
| public: | public: | ||||
| BT_DECLARE_ALIGNED_ALLOCATOR(); | BT_DECLARE_ALIGNED_ALLOCATOR(); | ||||
| btStridingMeshInterface() :m_scaling(btScalar(1.),btScalar(1.),btScalar(1.)) | btStridingMeshInterface() : m_scaling(btScalar(1.), btScalar(1.), btScalar(1.)) | ||||
| { | { | ||||
| } | } | ||||
| virtual ~btStridingMeshInterface(); | virtual ~btStridingMeshInterface(); | ||||
| virtual void InternalProcessAllTriangles(btInternalTriangleIndexCallback* callback,const btVector3& aabbMin,const btVector3& aabbMax) const; | virtual void InternalProcessAllTriangles(btInternalTriangleIndexCallback * callback, const btVector3& aabbMin, const btVector3& aabbMax) const; | ||||
| ///brute force method to calculate aabb | ///brute force method to calculate aabb | ||||
| void calculateAabbBruteForce(btVector3& aabbMin,btVector3& aabbMax); | void calculateAabbBruteForce(btVector3 & aabbMin, btVector3 & aabbMax); | ||||
| /// get read and write access to a subpart of a triangle mesh | /// get read and write access to a subpart of a triangle mesh | ||||
| /// this subpart has a continuous array of vertices and indices | /// this subpart has a continuous array of vertices and indices | ||||
| /// in this way the mesh can be handled as chunks of memory with striding | /// in this way the mesh can be handled as chunks of memory with striding | ||||
| /// very similar to OpenGL vertexarray support | /// very similar to OpenGL vertexarray support | ||||
| /// make a call to unLockVertexBase when the read and write access is finished | /// make a call to unLockVertexBase when the read and write access is finished | ||||
| virtual void getLockedVertexIndexBase(unsigned char **vertexbase, int& numverts,PHY_ScalarType& type, int& stride,unsigned char **indexbase,int & indexstride,int& numfaces,PHY_ScalarType& indicestype,int subpart=0)=0; | virtual void getLockedVertexIndexBase(unsigned char** vertexbase, int& numverts, PHY_ScalarType& type, int& stride, unsigned char** indexbase, int& indexstride, int& numfaces, PHY_ScalarType& indicestype, int subpart = 0) = 0; | ||||
| virtual void getLockedReadOnlyVertexIndexBase(const unsigned char **vertexbase, int& numverts,PHY_ScalarType& type, int& stride,const unsigned char **indexbase,int & indexstride,int& numfaces,PHY_ScalarType& indicestype,int subpart=0) const=0; | virtual void getLockedReadOnlyVertexIndexBase(const unsigned char** vertexbase, int& numverts, PHY_ScalarType& type, int& stride, const unsigned char** indexbase, int& indexstride, int& numfaces, PHY_ScalarType& indicestype, int subpart = 0) const = 0; | ||||
| /// unLockVertexBase finishes the access to a subpart of the triangle mesh | /// unLockVertexBase finishes the access to a subpart of the triangle mesh | ||||
| /// make a call to unLockVertexBase when the read and write access (using getLockedVertexIndexBase) is finished | /// make a call to unLockVertexBase when the read and write access (using getLockedVertexIndexBase) is finished | ||||
| virtual void unLockVertexBase(int subpart)=0; | virtual void unLockVertexBase(int subpart) = 0; | ||||
| virtual void unLockReadOnlyVertexBase(int subpart) const=0; | virtual void unLockReadOnlyVertexBase(int subpart) const = 0; | ||||
| /// getNumSubParts returns the number of separate subparts | |||||
| /// getNumSubParts returns the number of seperate subparts | |||||
| /// each subpart has a continuous array of vertices and indices | /// each subpart has a continuous array of vertices and indices | ||||
| virtual int getNumSubParts() const=0; | virtual int getNumSubParts() const = 0; | ||||
| virtual void preallocateVertices(int numverts)=0; | virtual void preallocateVertices(int numverts) = 0; | ||||
| virtual void preallocateIndices(int numindices)=0; | virtual void preallocateIndices(int numindices) = 0; | ||||
| virtual bool hasPremadeAabb() const { return false; } | virtual bool hasPremadeAabb() const { return false; } | ||||
| virtual void setPremadeAabb(const btVector3& aabbMin, const btVector3& aabbMax ) const | virtual void setPremadeAabb(const btVector3& aabbMin, const btVector3& aabbMax) const | ||||
| { | { | ||||
| (void) aabbMin; | (void)aabbMin; | ||||
| (void) aabbMax; | (void)aabbMax; | ||||
| } | } | ||||
| virtual void getPremadeAabb(btVector3* aabbMin, btVector3* aabbMax ) const | virtual void getPremadeAabb(btVector3 * aabbMin, btVector3 * aabbMax) const | ||||
| { | { | ||||
| (void) aabbMin; | (void)aabbMin; | ||||
| (void) aabbMax; | (void)aabbMax; | ||||
| } | } | ||||
| const btVector3& getScaling() const { | const btVector3& getScaling() const | ||||
| { | |||||
| return m_scaling; | return m_scaling; | ||||
| } | } | ||||
| void setScaling(const btVector3& scaling) | void setScaling(const btVector3& scaling) | ||||
| { | { | ||||
| m_scaling = scaling; | m_scaling = scaling; | ||||
| } | } | ||||
| virtual int calculateSerializeBufferSize() const; | virtual int calculateSerializeBufferSize() const; | ||||
| ///fills the dataBuffer and returns the struct name (and 0 on failure) | ///fills the dataBuffer and returns the struct name (and 0 on failure) | ||||
| virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const; | virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const; | ||||
| }; | }; | ||||
| struct btIntIndexData | struct btIntIndexData | ||||
| { | { | ||||
| int m_value; | int m_value; | ||||
| }; | }; | ||||
| struct btShortIntIndexData | struct btShortIntIndexData | ||||
| { | { | ||||
| short m_value; | short m_value; | ||||
| char m_pad[2]; | char m_pad[2]; | ||||
| }; | }; | ||||
| struct btShortIntIndexTripletData | struct btShortIntIndexTripletData | ||||
| { | { | ||||
| short m_values[3]; | short m_values[3]; | ||||
| char m_pad[2]; | char m_pad[2]; | ||||
| }; | }; | ||||
| struct btCharIndexTripletData | struct btCharIndexTripletData | ||||
| { | { | ||||
| unsigned char m_values[3]; | unsigned char m_values[3]; | ||||
| char m_pad; | char m_pad; | ||||
| }; | }; | ||||
| // clang-format off | |||||
| ///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 | ///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 | ||||
| struct btMeshPartData | struct btMeshPartData | ||||
| { | { | ||||
| btVector3FloatData *m_vertices3f; | btVector3FloatData *m_vertices3f; | ||||
| btVector3DoubleData *m_vertices3d; | btVector3DoubleData *m_vertices3d; | ||||
| btIntIndexData *m_indices32; | btIntIndexData *m_indices32; | ||||
| Show All 11 Lines | |||||
| struct btStridingMeshInterfaceData | struct btStridingMeshInterfaceData | ||||
| { | { | ||||
| btMeshPartData *m_meshPartsPtr; | btMeshPartData *m_meshPartsPtr; | ||||
| btVector3FloatData m_scaling; | btVector3FloatData m_scaling; | ||||
| int m_numMeshParts; | int m_numMeshParts; | ||||
| char m_padding[4]; | char m_padding[4]; | ||||
| }; | }; | ||||
| // clang-format on | |||||
| SIMD_FORCE_INLINE int btStridingMeshInterface::calculateSerializeBufferSize() const | SIMD_FORCE_INLINE int btStridingMeshInterface::calculateSerializeBufferSize() const | ||||
| { | { | ||||
| return sizeof(btStridingMeshInterfaceData); | return sizeof(btStridingMeshInterfaceData); | ||||
| } | } | ||||
| #endif //BT_STRIDING_MESHINTERFACE_H | #endif //BT_STRIDING_MESHINTERFACE_H | ||||