[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [30524] branches/soc-2010-aligorith-2/ source/blender/editors/physics/rigidbody_object.c: Bullet SoC - Bugfix - Removing Rigid Bodies causes crashes when playing back

Joshua Leung aligorith at gmail.com
Tue Jul 20 11:30:12 CEST 2010


Revision: 30524
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=30524
Author:   aligorith
Date:     2010-07-20 11:30:12 +0200 (Tue, 20 Jul 2010)

Log Message:
-----------
Bullet SoC - Bugfix - Removing Rigid Bodies causes crashes when playing back

Rigid Bodies were not getting removed from the sim scene(s) correctly, so Bullet was crashing when trying to simulate the non-existent sim-objects.

Modified Paths:
--------------
    branches/soc-2010-aligorith-2/source/blender/editors/physics/rigidbody_object.c

Modified: branches/soc-2010-aligorith-2/source/blender/editors/physics/rigidbody_object.c
===================================================================
--- branches/soc-2010-aligorith-2/source/blender/editors/physics/rigidbody_object.c	2010-07-20 06:05:25 UTC (rev 30523)
+++ branches/soc-2010-aligorith-2/source/blender/editors/physics/rigidbody_object.c	2010-07-20 09:30:12 UTC (rev 30524)
@@ -40,6 +40,8 @@
 #include "BLI_blenlib.h"
 #include "BLI_math.h"
 
+#include "RBI_api.h"
+
 #include "BKE_context.h"
 #include "BKE_depsgraph.h"
 #include "BKE_group.h"
@@ -130,9 +132,25 @@
 {
 	RigidBodyWorld *rbw;
 	
-	/* remove object's rigidbody stuff from all worlds */
+	/* remove world-sim references to object 
+	 * NOTE: done as a separate pass since static objects can be 
+	 * added to multiple sims at once, so doing below would miss
+	 * other instances.
+	 */
 	RB_WORLDS_WITH_OB_LOOPER(scene, ob, rbw)
 	{
+		RigidBodyOb *rbo = ob->rigidbodySettings;
+		
+		/* remove from rigidbody world too 
+		 *	- free object won't do this 
+		 */
+		if (rbw->physics_world && rbo->physics_object)
+			rbDWorldRemoveBody(rbw->physics_world, rbo->physics_object);
+	}
+	
+	/* remove object's rigidbody settings */
+	RB_WORLDS_WITH_OB_LOOPER(scene, ob, rbw)
+	{	
 		/* remove from group */
 		rem_from_group(rbw->group, ob, scene, NULL);
 		





More information about the Bf-blender-cvs mailing list