Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'extern/bullet2/src/BulletCollision/CollisionShapes/btTriangleMesh.cpp')
-rw-r--r--extern/bullet2/src/BulletCollision/CollisionShapes/btTriangleMesh.cpp109
1 files changed, 82 insertions, 27 deletions
diff --git a/extern/bullet2/src/BulletCollision/CollisionShapes/btTriangleMesh.cpp b/extern/bullet2/src/BulletCollision/CollisionShapes/btTriangleMesh.cpp
index 98c54ef45f8..bcea97052d6 100644
--- a/extern/bullet2/src/BulletCollision/CollisionShapes/btTriangleMesh.cpp
+++ b/extern/bullet2/src/BulletCollision/CollisionShapes/btTriangleMesh.cpp
@@ -14,47 +14,102 @@ subject to the following restrictions:
*/
#include "btTriangleMesh.h"
-#include <assert.h>
-btTriangleMesh::btTriangleMesh ()
+
+btTriangleMesh::btTriangleMesh (bool use32bitIndices,bool use4componentVertices)
+:m_use32bitIndices(use32bitIndices),
+m_use4componentVertices(use4componentVertices)
{
+ btIndexedMesh meshIndex;
+ meshIndex.m_numTriangles = 0;
+ meshIndex.m_numVertices = 0;
+ meshIndex.m_indexType = PHY_INTEGER;
+ meshIndex.m_triangleIndexBase = 0;
+ meshIndex.m_triangleIndexStride = 3*sizeof(int);
+ meshIndex.m_vertexBase = 0;
+ meshIndex.m_vertexStride = sizeof(btVector3);
+ m_indexedMeshes.push_back(meshIndex);
-}
+ if (m_use32bitIndices)
+ {
+ m_indexedMeshes[0].m_numTriangles = m_32bitIndices.size()/3;
+ m_indexedMeshes[0].m_triangleIndexBase = (unsigned char*) &m_32bitIndices[0];
+ m_indexedMeshes[0].m_indexType = PHY_INTEGER;
+ m_indexedMeshes[0].m_triangleIndexStride = 3*sizeof(int);
+ } else
+ {
+ m_indexedMeshes[0].m_numTriangles = m_16bitIndices.size()/3;
+ m_indexedMeshes[0].m_triangleIndexBase = (unsigned char*) &m_16bitIndices[0];
+ m_indexedMeshes[0].m_indexType = PHY_SHORT;
+ m_indexedMeshes[0].m_triangleIndexStride = 3*sizeof(short int);
+ }
-void btTriangleMesh::getLockedVertexIndexBase(unsigned char **vertexbase, int& numverts,PHY_ScalarType& type, int& stride,unsigned char **indexbase,int & indexstride,int& numfaces,PHY_ScalarType& indicestype,int subpart)
-{
- (void)subpart;
- numverts = m_vertices.size();
- *vertexbase = (unsigned char*)&m_vertices[0];
- type = PHY_FLOAT;
- stride = sizeof(btVector3);
+ if (m_use4componentVertices)
+ {
+ m_indexedMeshes[0].m_numVertices = m_4componentVertices.size();
+ m_indexedMeshes[0].m_vertexBase = (unsigned char*)&m_4componentVertices[0];
+ m_indexedMeshes[0].m_vertexStride = sizeof(btVector3);
+ } else
+ {
+ m_indexedMeshes[0].m_numVertices = m_3componentVertices.size()/3;
+ m_indexedMeshes[0].m_vertexBase = (unsigned char*)&m_3componentVertices[0];
+ m_indexedMeshes[0].m_vertexStride = 3*sizeof(btScalar);
+ }
- numfaces = m_indices.size()/3;
- *indexbase = (unsigned char*) &m_indices[0];
- indicestype = PHY_INTEGER;
- indexstride = 3*sizeof(int);
}
-void btTriangleMesh::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) const
+
+void btTriangleMesh::addTriangle(const btVector3& vertex0,const btVector3& vertex1,const btVector3& vertex2)
{
- (void)subpart;
- numverts = m_vertices.size();
- *vertexbase = (unsigned char*)&m_vertices[0];
- type = PHY_FLOAT;
- stride = sizeof(btVector3);
+ m_indexedMeshes[0].m_numTriangles++;
+ m_indexedMeshes[0].m_numVertices+=3;
- numfaces = m_indices.size()/3;
- *indexbase = (unsigned char*) &m_indices[0];
- indicestype = PHY_INTEGER;
- indexstride = 3*sizeof(int);
+ if (m_use4componentVertices)
+ {
+ m_4componentVertices.push_back(vertex0);
+ m_4componentVertices.push_back(vertex1);
+ m_4componentVertices.push_back(vertex2);
+ m_indexedMeshes[0].m_vertexBase = (unsigned char*)&m_4componentVertices[0];
+ } else
+ {
+ m_3componentVertices.push_back(vertex0.getX());
+ m_3componentVertices.push_back(vertex0.getY());
+ m_3componentVertices.push_back(vertex0.getZ());
-}
+ m_3componentVertices.push_back(vertex1.getX());
+ m_3componentVertices.push_back(vertex1.getY());
+ m_3componentVertices.push_back(vertex1.getZ());
+ m_3componentVertices.push_back(vertex2.getX());
+ m_3componentVertices.push_back(vertex2.getY());
+ m_3componentVertices.push_back(vertex2.getZ());
+ m_indexedMeshes[0].m_vertexBase = (unsigned char*)&m_3componentVertices[0];
+ }
+ if (m_use32bitIndices)
+ {
+ int curIndex = m_32bitIndices.size();
+ m_32bitIndices.push_back(curIndex++);
+ m_32bitIndices.push_back(curIndex++);
+ m_32bitIndices.push_back(curIndex++);
+ m_indexedMeshes[0].m_triangleIndexBase = (unsigned char*) &m_32bitIndices[0];
+ } else
+ {
+ short curIndex = static_cast<short>(m_16bitIndices.size());
+ m_16bitIndices.push_back(curIndex++);
+ m_16bitIndices.push_back(curIndex++);
+ m_16bitIndices.push_back(curIndex++);
+ m_indexedMeshes[0].m_triangleIndexBase = (unsigned char*) &m_16bitIndices[0];
+ }
+}
-int btTriangleMesh::getNumSubParts() const
+int btTriangleMesh::getNumTriangles() const
{
- return 1;
+ if (m_use32bitIndices)
+ {
+ return m_32bitIndices.size() / 3;
+ }
+ return m_16bitIndices.size() / 3;
}