[Bf-blender-cvs] [c56fb3d] particles_refactor: Make the btRigidBody a direct component of the rbRigidBody wrapper struct. This avoids one pointer indirection and makes future memory management possible. Requires a constructur/destructor pair to initialize the 'body' member correctly.
Lukas Tönne
noreply at git.blender.org
Tue Apr 22 12:06:31 CEST 2014
Commit: c56fb3d108b041df5b9ef6950ef3d15bf1a2b91b
Author: Lukas Tönne
Date: Tue Dec 31 09:52:16 2013 +0100
https://developer.blender.org/rBc56fb3d108b041df5b9ef6950ef3d15bf1a2b91b
Make the btRigidBody a direct component of the rbRigidBody wrapper
struct. This avoids one pointer indirection and makes future memory
management possible. Requires a constructur/destructor pair to
initialize the 'body' member correctly.
===================================================================
M intern/rigidbody/rb_bullet_api.cpp
===================================================================
diff --git a/intern/rigidbody/rb_bullet_api.cpp b/intern/rigidbody/rb_bullet_api.cpp
index 7d5654e..074d363 100644
--- a/intern/rigidbody/rb_bullet_api.cpp
+++ b/intern/rigidbody/rb_bullet_api.cpp
@@ -83,7 +83,13 @@ struct rbDynamicsWorld {
};
struct rbRigidBody {
- btRigidBody *body;
+ rbRigidBody(const btRigidBody::btRigidBodyConstructionInfo& constructionInfo) :
+ body(constructionInfo)
+ {}
+ ~rbRigidBody()
+ {}
+
+ btRigidBody body;
int col_groups;
};
@@ -253,7 +259,7 @@ void RB_dworld_export(rbDynamicsWorld *world, const char *filename)
void RB_dworld_add_body(rbDynamicsWorld *world, rbRigidBody *object, int col_groups)
{
- btRigidBody *body = object->body;
+ btRigidBody *body = &object->body;
object->col_groups = col_groups;
world->dynamicsWorld->addRigidBody(body);
@@ -261,7 +267,7 @@ void RB_dworld_add_body(rbDynamicsWorld *world, rbRigidBody *object, int col_gro
void RB_dworld_remove_body(rbDynamicsWorld *world, rbRigidBody *object)
{
- btRigidBody *body = object->body;
+ btRigidBody *body = &object->body;
world->dynamicsWorld->removeRigidBody(body);
}
@@ -273,7 +279,7 @@ void RB_world_convex_sweep_test(
const float loc_start[3], const float loc_end[3],
float v_location[3], float v_hitpoint[3], float v_normal[3], int *r_hit)
{
- btRigidBody *body = object->body;
+ btRigidBody *body = &object->body;
btCollisionShape *collisionShape = body->getCollisionShape();
/* only convex shapes are supported, but user can specify a non convex shape */
if (collisionShape->isConvex()) {
@@ -323,7 +329,6 @@ void RB_world_convex_sweep_test(
rbRigidBody *RB_body_new(rbCollisionShape *shape, const float loc[3], const float rot[4])
{
- rbRigidBody *object = new rbRigidBody;
/* current transform */
btTransform trans;
trans.setOrigin(btVector3(loc[0], loc[1], loc[2]));
@@ -335,16 +340,15 @@ rbRigidBody *RB_body_new(rbCollisionShape *shape, const float loc[3], const floa
/* make rigidbody */
btRigidBody::btRigidBodyConstructionInfo rbInfo(1.0f, motionState, shape->cshape);
- object->body = new btRigidBody(rbInfo);
-
- object->body->setUserPointer(object);
+ rbRigidBody *object = new rbRigidBody(rbInfo);
+ object->body.setUserPointer(object);
return object;
}
void RB_body_delete(rbRigidBody *object)
{
- btRigidBody *body = object->body;
+ btRigidBody *body = &object->body;
/* motion state */
btMotionState *ms = body->getMotionState();
@@ -362,7 +366,6 @@ void RB_body_delete(rbRigidBody *object)
body->removeConstraintRef(con);
}
- delete body;
delete object;
}
@@ -370,7 +373,7 @@ void RB_body_delete(rbRigidBody *object)
void RB_body_set_collision_shape(rbRigidBody *object, rbCollisionShape *shape)
{
- btRigidBody *body = object->body;
+ btRigidBody *body = &object->body;
/* set new collision shape */
body->setCollisionShape(shape->cshape);
@@ -383,7 +386,7 @@ void RB_body_set_collision_shape(rbRigidBody *object, rbCollisionShape *shape)
float RB_body_get_mass(rbRigidBody *object)
{
- btRigidBody *body = object->body;
+ btRigidBody *body = &object->body;
/* there isn't really a mass setting, but rather 'inverse mass'
* which we convert back to mass by taking the reciprocal again
@@ -398,7 +401,7 @@ float RB_body_get_mass(rbRigidBody *object)
void RB_body_set_mass(rbRigidBody *object, float value)
{
- btRigidBody *body = object->body;
+ btRigidBody *body = &object->body;
btVector3 localInertia(0, 0, 0);
/* calculate new inertia if non-zero mass */
@@ -414,33 +417,33 @@ void RB_body_set_mass(rbRigidBody *object, float value)
float RB_body_get_friction(rbRigidBody *object)
{
- btRigidBody *body = object->body;
+ btRigidBody *body = &object->body;
return body->getFriction();
}
void RB_body_set_friction(rbRigidBody *object, float value)
{
- btRigidBody *body = object->body;
+ btRigidBody *body = &object->body;
body->setFriction(value);
}
float RB_body_get_restitution(rbRigidBody *object)
{
- btRigidBody *body = object->body;
+ btRigidBody *body = &object->body;
return body->getRestitution();
}
void RB_body_set_restitution(rbRigidBody *object, float value)
{
- btRigidBody *body = object->body;
+ btRigidBody *body = &object->body;
body->setRestitution(value);
}
float RB_body_get_linear_damping(rbRigidBody *object)
{
- btRigidBody *body = object->body;
+ btRigidBody *body = &object->body;
return body->getLinearDamping();
}
@@ -451,7 +454,7 @@ void RB_body_set_linear_damping(rbRigidBody *object, float value)
float RB_body_get_angular_damping(rbRigidBody *object)
{
- btRigidBody *body = object->body;
+ btRigidBody *body = &object->body;
return body->getAngularDamping();
}
@@ -462,14 +465,14 @@ void RB_body_set_angular_damping(rbRigidBody *object, float value)
void RB_body_set_damping(rbRigidBody *object, float linear, float angular)
{
- btRigidBody *body = object->body;
+ btRigidBody *body = &object->body;
body->setDamping(linear, angular);
}
float RB_body_get_linear_sleep_thresh(rbRigidBody *object)
{
- btRigidBody *body = object->body;
+ btRigidBody *body = &object->body;
return body->getLinearSleepingThreshold();
}
@@ -480,7 +483,7 @@ void RB_body_set_linear_sleep_thresh(rbRigidBody *object, float value)
float RB_body_get_angular_sleep_thresh(rbRigidBody *object)
{
- btRigidBody *body = object->body;
+ btRigidBody *body = &object->body;
return body->getAngularSleepingThreshold();
}
@@ -491,7 +494,7 @@ void RB_body_set_angular_sleep_thresh(rbRigidBody *object, float value)
void RB_body_set_sleep_thresh(rbRigidBody *object, float linear, float angular)
{
- btRigidBody *body = object->body;
+ btRigidBody *body = &object->body;
body->setSleepingThresholds(linear, angular);
}
@@ -499,14 +502,14 @@ void RB_body_set_sleep_thresh(rbRigidBody *object, float linear, float angular)
void RB_body_get_linear_velocity(rbRigidBody *object, float v_out[3])
{
- btRigidBody *body = object->body;
+ btRigidBody *body = &object->body;
copy_v3_btvec3(v_out, body->getLinearVelocity());
}
void RB_body_set_linear_velocity(rbRigidBody *object, const float v_in[3])
{
- btRigidBody *body = object->body;
+ btRigidBody *body = &object->body;
body->setLinearVelocity(btVector3(v_in[0], v_in[1], v_in[2]));
}
@@ -514,27 +517,27 @@ void RB_body_set_linear_velocity(rbRigidBody *object, const float v_in[3])
void RB_body_get_angular_velocity(rbRigidBody *object, float v_out[3])
{
- btRigidBody *body = object->body;
+ btRigidBody *body = &object->body;
copy_v3_btvec3(v_out, body->getAngularVelocity());
}
void RB_body_set_angular_velocity(rbRigidBody *object, const float v_in[3])
{
- btRigidBody *body = object->body;
+ btRigidBody *body = &object->body;
body->setAngularVelocity(btVector3(v_in[0], v_in[1], v_in[2]));
}
void RB_body_set_linear_factor(rbRigidBody *object, float x, float y, float z)
{
- btRigidBody *body = object->body;
+ btRigidBody *body = &object->body;
body->setLinearFactor(btVector3(x, y, z));
}
void RB_body_set_angular_factor(rbRigidBody *object, float x, float y, float z)
{
- btRigidBody *body = object->body;
+ btRigidBody *body = &object->body;
body->setAngularFactor(btVector3(x, y, z));
}
@@ -542,7 +545,7 @@ void RB_body_set_angular_factor(rbRigidBody *object, float x, float y, float z)
void RB_body_set_kinematic_state(rbRigidBody *object, int kinematic)
{
- btRigidBody *body = object->body;
+ btRigidBody *body = &object->body;
if (kinematic)
body->setCollisionFlags(body->getCollisionFlags() | btCollisionObject::CF_KINEMATIC_OBJECT);
else
@@ -553,7 +556,7 @@ void RB_body_set_kinematic_state(rbRigidBody *object, int kinematic)
void RB_body_set_activation_state(rbRigidBody *object, int use_deactivation)
{
- btRigidBody *body = object->body;
+ btRigidBody *body = &object->body;
if (use_deactivation)
body->forceActivationState(ACTIVE_TAG);
else
@@ -561,12 +564,12 @@ void RB_body_set_activation_state(rbRigidBody *object, int use_deactivation)
}
void RB_body_activate(rbRigidBody *object)
{
- btRigidBody *body = object->body;
+ btRigidBody *body = &object->body;
body->setActivationState(ACTIVE_TAG);
}
void RB_body_deactivate(rbRigidBody *object)
{
- btRigidBody *body = object->body;
+ btRigidBody *body = &object->body;
body->setActivationState(ISLAND_SLEEPING);
}
@@ -582,7 +585,7 @@ void RB_body_deactivate(rbRigidBody *object)
void RB_body_get_transform_matrix(rbRigidBody *object, float m_out[4][4])
{
- btRigidBody *body = object->body;
+ btRigidBody *body = &object->body;
btMotionState *ms = body->getMotionState();
btTransform trans;
@@ -593,7 +596,7 @@ void RB_body_get_transform_matrix(rbRigidBody *object, float m_out[4][4])
void RB_body_set_loc_rot(rbRigidBody *object, const float loc[3], const float rot[4])
{
- btRigidBody *body = object->body;
+ btRigidBody *body = &object->body;
btMotionState *ms = body->getMotionState();
/* set transform matrix */
@@ -606,7 +609,7 @@ void RB_body_set_loc_rot(rbRigidBody *object, const float loc[3], const float ro
void RB_body_set_scale(rbRigidBody *object, const float scale[3])
{
- btRigidBody *body = object->body;
+ btRigidBody *body = &object->body;
/* apply scaling factor from matrix above to the collision shape */
btCollisionShape *cshape = body->getCollisionShape();
@@ -624,14 +627,14 @@ void RB_body_set_scale(rbRigidBody *object, const float scale[3])
void RB_body_get_position(rbRigidBody *object, float v_out[3])
{
- btRigidBody *body = object->body;
+ btRigidBody *body = &object->body;
copy_v3_btvec3(v_out, body->getWorldTransform().getOrigin());
}
void RB_body_get_orientation(rbRigidBody *object, float v_out[4])
{
- btRigidBody *body = object->body;
+ btRigidBody *body = &object->body;
copy_quat_btquat(v_out, body->getWorldTransform().getRotation());
}
@@ -641,7 +644,7 @@ void RB_body_get_orientation(rbRigidBody *object, float v_out[4])
void RB_body_apply_central_force(rbRigidBody *object, const float v_in[3])
{
- btRigidBody *body = object->body;
+ btRigidBody *body = &object->body;
body->applyCentralForce(btVector3(v_in[0], v_in[1], v_in[2]));
}
@@ -864,8 +867,8 @
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list