[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [57642] branches/soc-2013-rigid_body_sim: rigidbody: Avoid unnecessary reallocations when creating mesh shapes
Sergej Reich
sergej.reich at googlemail.com
Fri Jun 21 20:01:17 CEST 2013
Revision: 57642
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=57642
Author: sergof
Date: 2013-06-21 18:01:17 +0000 (Fri, 21 Jun 2013)
Log Message:
-----------
rigidbody: Avoid unnecessary reallocations when creating mesh shapes
Modified Paths:
--------------
branches/soc-2013-rigid_body_sim/intern/rigidbody/RBI_api.h
branches/soc-2013-rigid_body_sim/intern/rigidbody/rb_bullet_api.cpp
branches/soc-2013-rigid_body_sim/source/blender/blenkernel/intern/rigidbody.c
Modified: branches/soc-2013-rigid_body_sim/intern/rigidbody/RBI_api.h
===================================================================
--- branches/soc-2013-rigid_body_sim/intern/rigidbody/RBI_api.h 2013-06-21 18:01:14 UTC (rev 57641)
+++ branches/soc-2013-rigid_body_sim/intern/rigidbody/RBI_api.h 2013-06-21 18:01:17 UTC (rev 57642)
@@ -227,7 +227,7 @@
/* Setup (Triangle Mesh) ---------- */
/* 1 */
-extern rbMeshData *RB_trimesh_data_new(void);
+extern rbMeshData *RB_trimesh_data_new(int num_tris, int num_verts);
extern void RB_trimesh_add_triangle(rbMeshData *mesh, const float v1[3], const float v2[3], const float v3[3]);
/* 2a - Triangle Meshes */
extern rbCollisionShape *RB_shape_new_trimesh(rbMeshData *mesh);
Modified: branches/soc-2013-rigid_body_sim/intern/rigidbody/rb_bullet_api.cpp
===================================================================
--- branches/soc-2013-rigid_body_sim/intern/rigidbody/rb_bullet_api.cpp 2013-06-21 18:01:14 UTC (rev 57641)
+++ branches/soc-2013-rigid_body_sim/intern/rigidbody/rb_bullet_api.cpp 2013-06-21 18:01:17 UTC (rev 57642)
@@ -752,10 +752,15 @@
* we get nasty crashes...
*/
-rbMeshData *RB_trimesh_data_new()
+rbMeshData *RB_trimesh_data_new(int num_tris, int num_verts)
{
// XXX: welding threshold?
- return (rbMeshData *) new btTriangleMesh(true, false);
+ btTriangleMesh *mesh = new btTriangleMesh(true, false);
+
+ mesh->preallocateIndices(num_tris * 3);
+ mesh->preallocateVertices(num_verts);
+
+ return (rbMeshData *) mesh;
}
void RB_trimesh_add_triangle(rbMeshData *mesh, const float v1[3], const float v2[3], const float v3[3])
Modified: branches/soc-2013-rigid_body_sim/source/blender/blenkernel/intern/rigidbody.c
===================================================================
--- branches/soc-2013-rigid_body_sim/source/blender/blenkernel/intern/rigidbody.c 2013-06-21 18:01:14 UTC (rev 57641)
+++ branches/soc-2013-rigid_body_sim/source/blender/blenkernel/intern/rigidbody.c 2013-06-21 18:01:17 UTC (rev 57642)
@@ -267,6 +267,7 @@
MFace *mface;
int totvert;
int totface;
+ int tottris = 0;
/* ensure mesh validity, then grab data */
BLI_assert(dm!= NULL); // RB_TODO need to make sure there's no case where deform derived mesh doesn't exist
@@ -285,8 +286,13 @@
rbMeshData *mdata;
int i;
+ /* count triangles */
+ for (i = 0; (i < totface) && (mface); i++) {
+ (mface->v4) ? (tottris += 2) : (tottris += 1);
+ }
+
/* init mesh data for collision shape */
- mdata = RB_trimesh_data_new();
+ mdata = RB_trimesh_data_new(tottris, totvert);
/* loop over all faces, adding them as triangles to the collision shape
* (so for some faces, more than triangle will get added)
More information about the Bf-blender-cvs
mailing list