[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