[Bf-blender-cvs] [2e9c941] particles_refactor: Cleanup: Separated object and constraint build loops into own functions. Renamed some more API methods to follow the new naming scheme.

Lukas Tönne noreply at git.blender.org
Tue Apr 22 12:06:43 CEST 2014


Commit: 2e9c9415eba8d6718abe796ea5c8423e1b159899
Author: Lukas Tönne
Date:   Wed Jan 1 13:21:18 2014 +0100
https://developer.blender.org/rB2e9c9415eba8d6718abe796ea5c8423e1b159899

Cleanup: Separated object and constraint build loops into own functions.
Renamed some more API methods to follow the new naming scheme.

Conflicts:
	source/blender/blenkernel/intern/rigidbody.c

===================================================================

M	source/blender/blenkernel/BKE_rigidbody.h
M	source/blender/blenkernel/intern/object.c
M	source/blender/blenkernel/intern/rigidbody.c

===================================================================

diff --git a/source/blender/blenkernel/BKE_rigidbody.h b/source/blender/blenkernel/BKE_rigidbody.h
index 86be3bf..f5bc55b 100644
--- a/source/blender/blenkernel/BKE_rigidbody.h
+++ b/source/blender/blenkernel/BKE_rigidbody.h
@@ -90,7 +90,7 @@ void BKE_rigidbody_remove_constraint(struct Scene *scene, struct Object *ob);
 /* Simulation */
 
 void BKE_rigidbody_aftertrans_update(struct Object *ob, float loc[3], float rot[3], float quat[4], float rotAxis[3], float rotAngle);
-void BKE_rigidbody_sync_transforms(struct RigidBodyWorld *rbw, struct Object *ob, float ctime);
+void BKE_rigidbody_apply_transforms(struct RigidBodyWorld *rbw, struct Object *ob, float ctime);
 bool BKE_rigidbody_check_sim_running(struct RigidBodyWorld *rbw, float ctime);
 void BKE_rigidbody_cache_reset(struct RigidBodyWorld *rbw);
 void BKE_rigidbody_rebuild_world(struct Scene *scene, float ctime);
diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c
index 23af5bd..7ce46e8 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -2342,7 +2342,7 @@ void BKE_object_where_is_calc_time_ex(Scene *scene, Object *ob, float ctime,
 	/* try to fall back to the scene rigid body world if none given */
 	rbw = rbw ? rbw : scene->rigidbody_world;
 	/* read values pushed into RBO from sim/cache... */
-	BKE_rigidbody_sync_transforms(rbw, ob, ctime);
+	BKE_rigidbody_apply_transforms(rbw, ob, ctime);
 	
 	/* solve constraints */
 	if (ob->constraints.first && !(ob->transflag & OB_NO_CONSTRAINTS)) {
diff --git a/source/blender/blenkernel/intern/rigidbody.c b/source/blender/blenkernel/intern/rigidbody.c
index 83432be..0fa6aeb 100644
--- a/source/blender/blenkernel/intern/rigidbody.c
+++ b/source/blender/blenkernel/intern/rigidbody.c
@@ -632,6 +632,8 @@ static rbRigidBody *rigidbody_validate_particle(RigidBodyWorld *rbw, Object *UNU
 
 	if (rbw && rbw->physics_world)
 		RB_dworld_add_body(rbw->physics_world, body, 0xFFFF);
+	
+	return body;
 }
 
 static void rigidbody_sync_particle(RigidBodyWorld *UNUSED(rbw), Object *UNUSED(ob), NParticleIterator *UNUSED(iter))
@@ -648,6 +650,8 @@ static void rigidbody_world_build_particles(RigidBodyWorld *rbw, Object *ob, NPa
 
 	for (BKE_nparticle_iter_init(state, &iter); BKE_nparticle_iter_valid(&iter); BKE_nparticle_iter_next(&iter)) {
 		rbRigidBody *body = rigidbody_validate_particle(rbw, ob, &iter, rebuild);
+		if (body)
+			rigidbody_sync_particle(rbw, ob, &iter);
 	}
 }
 
@@ -1129,7 +1133,7 @@ static void rigidbody_update_ob_array(RigidBodyWorld *rbw)
 	}
 }
 
-static void rigidbody_update_sim_world(Scene *scene, RigidBodyWorld *rbw)
+static void rigidbody_sync_world(Scene *scene, RigidBodyWorld *rbw)
 {
 	float adj_gravity[3];
 
@@ -1233,22 +1237,9 @@ static void rigidbody_sync_object(Scene *scene, RigidBodyWorld *rbw, Object *ob,
 	 */
 }
 
-/* Updates and validates world, bodies and shapes.
- * < rebuild: rebuild entire simulation
- */
-static void rigidbody_world_build(Scene *scene, RigidBodyWorld *rbw, bool rebuild)
+static void rigidbody_world_build_objects(Scene *scene, RigidBodyWorld *rbw, bool rebuild)
 {
 	GroupObject *go;
-
-	/* update world */
-	if (rebuild)
-		BKE_rigidbody_validate_sim_world(scene, rbw, true);
-	rigidbody_update_sim_world(scene, rbw);
-
-	/* clear sync tags */
-	rigidbody_world_clear_used_tags(rbw);
-
-	/* update objects */
 	for (go = rbw->group->gobject.first; go; go = go->next) {
 		Object *ob = go->ob;
 		ModifierData *md;
@@ -1308,41 +1299,66 @@ static void rigidbody_world_build(Scene *scene, RigidBodyWorld *rbw, bool rebuil
 			}
 		}
 	}
+}
+
+static void rigidbody_world_build_constraints(Scene *scene, RigidBodyWorld *rbw, int rebuild)
+{
+	GroupObject *go;
+	
+	if (!rbw->constraints)
+		return;
 	
-	/* update constraints */
-	if (rbw->constraints) {
-		for (go = rbw->constraints->gobject.first; go; go = go->next) {
-			Object *ob = go->ob;
+	for (go = rbw->constraints->gobject.first; go; go = go->next) {
+		Object *ob = go->ob;
+		
+		if (ob) {
+			/* validate that we've got valid object set up here... */
+			RigidBodyCon *rbc = ob->rigidbody_constraint;
+			/* update transformation matrix of the object so we don't get a frame of lag for simple animations */
+			BKE_object_where_is_calc(scene, ob);
 			
-			if (ob) {
-				/* validate that we've got valid object set up here... */
-				RigidBodyCon *rbc = ob->rigidbody_constraint;
-				/* update transformation matrix of the object so we don't get a frame of lag for simple animations */
-				BKE_object_where_is_calc(scene, ob);
-				
-				if (rbc == NULL) {
-					/* Since this object is included in the group but doesn't have
+			if (rbc == NULL) {
+				/* Since this object is included in the group but doesn't have
 				 * constraint settings (perhaps it was added manually), add!
 				 */
-					ob->rigidbody_constraint = BKE_rigidbody_create_constraint(scene, ob, RBC_TYPE_FIXED);
+				ob->rigidbody_constraint = BKE_rigidbody_create_constraint(scene, ob, RBC_TYPE_FIXED);
+				rigidbody_validate_sim_constraint(rbw, ob, true);
+				
+				rbc = ob->rigidbody_constraint;
+			}
+			else {
+				/* perform simulation data updates as tagged */
+				if (rebuild) {
+					/* World has been rebuilt so rebuild constraint */
 					rigidbody_validate_sim_constraint(rbw, ob, true);
-					
-					rbc = ob->rigidbody_constraint;
 				}
-				else {
-					/* perform simulation data updates as tagged */
-					if (rebuild) {
-						/* World has been rebuilt so rebuild constraint */
-						rigidbody_validate_sim_constraint(rbw, ob, true);
-					}
-					else if (rbc->flag & RBC_FLAG_NEEDS_VALIDATE) {
-						rigidbody_validate_sim_constraint(rbw, ob, false);
-					}
-					rbc->flag &= ~RBC_FLAG_NEEDS_VALIDATE;
+				else if (rbc->flag & RBC_FLAG_NEEDS_VALIDATE) {
+					rigidbody_validate_sim_constraint(rbw, ob, false);
 				}
+				rbc->flag &= ~RBC_FLAG_NEEDS_VALIDATE;
 			}
 		}
 	}
+}
+
+/* Construct Bullet bodies, shapes and constraints from a Blender scene.
+ * < rebuild: rebuild entire simulation
+ */
+static void rigidbody_world_build(Scene *scene, RigidBodyWorld *rbw, int rebuild)
+{
+	/* update world */
+	if (rebuild)
+		BKE_rigidbody_validate_sim_world(scene, rbw, true);
+	rigidbody_sync_world(scene, rbw);
+
+	/* clear sync tags */
+	rigidbody_world_clear_used_tags(rbw);
+
+	/* build objects */
+	rigidbody_world_build_objects(scene, rbw, rebuild);
+	
+	/* build constraints */
+	rigidbody_world_build_constraints(scene, rbw, rebuild);
 	
 	/* remove orphaned rigid bodies */
 	rigidbody_world_free_bodies(rbw, true);
@@ -1385,7 +1401,7 @@ bool BKE_rigidbody_check_sim_running(RigidBodyWorld *rbw, float ctime)
 }
 
 /* Sync rigid body and object transformations */
-void BKE_rigidbody_sync_transforms(RigidBodyWorld *rbw, Object *ob, float ctime)
+void BKE_rigidbody_apply_transforms(RigidBodyWorld *rbw, Object *ob, float ctime)
 {
 	RigidBodyOb *rbo = ob->rigidbody_object;




More information about the Bf-blender-cvs mailing list