Bullet Collision Detection & Physics Library: btStridingMeshInterface.h Source File

Bullet Collision Detection & Physics Library

btStridingMeshInterface.h
Go to the documentation of this file.
1 /*
2 Bullet Continuous Collision Detection and Physics Library
3 Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
4
5 This software is provided 'as-is', without any express or implied warranty.
6 In no event will the authors be held liable for any damages arising from the use of this software.
7 Permission is granted to anyone to use this software for any purpose,
8 including commercial applications, and to alter it and redistribute it freely,
9 subject to the following restrictions:
10
11 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
12 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
13 3. This notice may not be removed or altered from any source distribution.
14 */
15
16 #ifndef BT_STRIDING_MESHINTERFACE_H
17 #define BT_STRIDING_MESHINTERFACE_H
18
19 #include "LinearMath/btVector3.h"
20 #include "btTriangleCallback.h"
21 #include "btConcaveShape.h"
22
23
24
25
26
30 ATTRIBUTE_ALIGNED16(class ) btStridingMeshInterface
31 {
32 protected:
33
34 btVector3 m_scaling;
35
36 public:
37 BT_DECLARE_ALIGNED_ALLOCATOR();
38
39 btStridingMeshInterface() :m_scaling(btScalar(1.),btScalar(1.),btScalar(1.))
40 {
41
42 }
43
44 virtual ~btStridingMeshInterface();
45
46
47
48 virtual void InternalProcessAllTriangles(btInternalTriangleIndexCallback* callback,const btVector3& aabbMin,const btVector3& aabbMax) const;
49
51 void calculateAabbBruteForce(btVector3& aabbMin,btVector3& aabbMax);
52
58 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;
59
60 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;
61
64 virtual void unLockVertexBase(int subpart)=0;
65
66 virtual void unLockReadOnlyVertexBase(int subpart) const=0;
67
68
71 virtual int getNumSubParts() const=0;
72
73 virtual void preallocateVertices(int numverts)=0;
74 virtual void preallocateIndices(int numindices)=0;
75
76 virtual bool hasPremadeAabb() const { return false; }
77 virtual void setPremadeAabb(const btVector3& aabbMin, const btVector3& aabbMax ) const
78 {
79 (void) aabbMin;
80 (void) aabbMax;
81 }
82 virtual void getPremadeAabb(btVector3* aabbMin, btVector3* aabbMax ) const
83 {
84 (void) aabbMin;
85 (void) aabbMax;
86 }
87
88 const btVector3& getScaling() const {
89 return m_scaling;
90 }
91 void setScaling(const btVector3& scaling)
92 {
93 m_scaling = scaling;
94 }
95
96 virtual int calculateSerializeBufferSize() const;
97
99 virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const;
100
101
102 };
103
104 struct btIntIndexData
105 {
106 int m_value;
107 };
108
109 struct btShortIntIndexData
110 {
111 short m_value;
112 char m_pad[2];
113 };
114
115 struct btShortIntIndexTripletData
116 {
117 short m_values[3];
118 char m_pad[2];
119 };
120
121 struct btCharIndexTripletData
122 {
123 unsigned char m_values[3];
124 char m_pad;
125 };
126
127
129 struct btMeshPartData
130 {
131 btVector3FloatData *m_vertices3f;
132 btVector3DoubleData *m_vertices3d;
133
134 btIntIndexData *m_indices32;
135 btShortIntIndexTripletData *m_3indices16;
136 btCharIndexTripletData *m_3indices8;
137
138 btShortIntIndexData *m_indices16;//backwards compatibility
139
140 int m_numTriangles;//length of m_indices = m_numTriangles
141 int m_numVertices;
142 };
143
144
146 struct btStridingMeshInterfaceData
147 {
148 btMeshPartData *m_meshPartsPtr;
149 btVector3FloatData m_scaling;
150 int m_numMeshParts;
151 char m_padding[4];
152 };
153
154
155
156
157 SIMD_FORCE_INLINE int btStridingMeshInterface::calculateSerializeBufferSize() const
158 {
159 return sizeof(btStridingMeshInterfaceData);
160 }
161
162
163
164 #endif //BT_STRIDING_MESHINTERFACE_H
btStridingMeshInterfaceData::m_meshPartsPtr
btMeshPartData * m_meshPartsPtr
Definition: btStridingMeshInterface.h:148
btStridingMeshInterface::hasPremadeAabb
virtual bool hasPremadeAabb() const
Definition: btStridingMeshInterface.h:76
btIntIndexData::m_value
int m_value
Definition: btStridingMeshInterface.h:106
btVector3.h
btShortIntIndexData::m_value
short m_value
Definition: btStridingMeshInterface.h:111
btCharIndexTripletData
Definition: btStridingMeshInterface.h:121
SIMD_FORCE_INLINE
#define SIMD_FORCE_INLINE
Definition: btScalar.h:81
btStridingMeshInterface::setScaling
void setScaling(const btVector3 &scaling)
Definition: btStridingMeshInterface.h:91
btMeshPartData
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 ...
Definition: btStridingMeshInterface.h:129
btMeshPartData::m_numVertices
int m_numVertices
Definition: btStridingMeshInterface.h:141
btMeshPartData::m_vertices3f
btVector3FloatData * m_vertices3f
Definition: btStridingMeshInterface.h:131
btInternalTriangleIndexCallback
Definition: btTriangleCallback.h:32
btMeshPartData::m_numTriangles
int m_numTriangles
Definition: btStridingMeshInterface.h:140
btShortIntIndexTripletData
Definition: btStridingMeshInterface.h:115
btSerializer
Definition: btSerializer.h:68
btConcaveShape.h
btMeshPartData::m_indices16
btShortIntIndexData * m_indices16
Definition: btStridingMeshInterface.h:138
btMeshPartData::m_3indices8
btCharIndexTripletData * m_3indices8
Definition: btStridingMeshInterface.h:136
btStridingMeshInterfaceData
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 ...
Definition: btStridingMeshInterface.h:146
btMeshPartData::m_3indices16
btShortIntIndexTripletData * m_3indices16
Definition: btStridingMeshInterface.h:135
btTriangleCallback.h
btShortIntIndexData
Definition: btStridingMeshInterface.h:109
btStridingMeshInterface::btStridingMeshInterface
btStridingMeshInterface()
Definition: btStridingMeshInterface.h:39
btStridingMeshInterfaceData::m_numMeshParts
int m_numMeshParts
Definition: btStridingMeshInterface.h:150
btStridingMeshInterfaceData::m_scaling
btVector3FloatData m_scaling
Definition: btStridingMeshInterface.h:149
btVector3
btVector3 can be used to represent 3D points and vectors.
Definition: btVector3.h:83
ATTRIBUTE_ALIGNED16
#define ATTRIBUTE_ALIGNED16(a)
Definition: btScalar.h:82
btCharIndexTripletData::m_pad
char m_pad
Definition: btStridingMeshInterface.h:124
btStridingMeshInterface::getPremadeAabb
virtual void getPremadeAabb(btVector3 *aabbMin, btVector3 *aabbMax) const
Definition: btStridingMeshInterface.h:82
btStridingMeshInterface
The btStridingMeshInterface is the interface class for high performance generic access to triangle me...
Definition: btStridingMeshInterface.h:30
btStridingMeshInterface::calculateSerializeBufferSize
virtual int calculateSerializeBufferSize() const
Definition: btStridingMeshInterface.h:157
btStridingMeshInterface::getScaling
const btVector3 & getScaling() const
Definition: btStridingMeshInterface.h:88
BT_DECLARE_ALIGNED_ALLOCATOR
#define BT_DECLARE_ALIGNED_ALLOCATOR()
Definition: btScalar.h:403
btIntIndexData
Definition: btStridingMeshInterface.h:104
btStridingMeshInterface::setPremadeAabb
virtual void setPremadeAabb(const btVector3 &aabbMin, const btVector3 &aabbMax) const
Definition: btStridingMeshInterface.h:77
btMeshPartData::m_indices32
btIntIndexData * m_indices32
Definition: btStridingMeshInterface.h:134
btVector3FloatData
Definition: btVector3.h:1312
btScalar
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
Definition: btScalar.h:292
btVector3DoubleData
Definition: btVector3.h:1317
PHY_ScalarType
PHY_ScalarType
PHY_ScalarType enumerates possible scalar types.
Definition: btConcaveShape.h:25
btStridingMeshInterface::m_scaling
btVector3 m_scaling
Definition: btStridingMeshInterface.h:34
btMeshPartData::m_vertices3d
btVector3DoubleData * m_vertices3d
Definition: btStridingMeshInterface.h:132