[Bf-blender-cvs] [0ec9516] hair_system: Don't try to remove collision objects from the Bullet world when deleting the hair solver.
Lukas Tönne
noreply at git.blender.org
Mon Aug 4 16:18:58 CEST 2014
Commit: 0ec95169ffc836a9b3acf7246c65f3c36a6c1e3c
Author: Lukas Tönne
Date: Mon Aug 4 15:57:17 2014 +0200
Branches: hair_system
https://developer.blender.org/rB0ec95169ffc836a9b3acf7246c65f3c36a6c1e3c
Don't try to remove collision objects from the Bullet world when
deleting the hair solver.
This already happens when the scene datablock gets freed. The order of
datablock freeing is not very explicit, so this is an unsafe assumption,
but the current rigidbody API relies on it as well ...
===================================================================
M source/blender/hair/HAIR_capi.cpp
M source/blender/hair/intern/HAIR_solver.cpp
===================================================================
diff --git a/source/blender/hair/HAIR_capi.cpp b/source/blender/hair/HAIR_capi.cpp
index a703131..c192184 100644
--- a/source/blender/hair/HAIR_capi.cpp
+++ b/source/blender/hair/HAIR_capi.cpp
@@ -72,16 +72,14 @@ void HAIR_solver_build_data(struct HAIR_Solver *csolver, Scene *scene, Object *o
RigidBodyWorld *rbw = scene->rigidbody_world;
rbDynamicsWorld *world = rbw ? (rbDynamicsWorld *)rbw->physics_world : NULL;
- if (world && solver->data())
+ if (solver->data())
solver->data()->remove_from_world(world);
SolverData *data = SceneConverter::build_solver_data(scene, ob, dm, hsys, time);
solver->set_data(data);
- if (world) {
- // XXX col_groups ?
- data->add_to_world(world, 0xFFFFFFFF);
- }
+ // XXX col_groups ?
+ data->add_to_world(world, 0xFFFFFFFF);
}
void HAIR_solver_update_externals(struct HAIR_Solver *csolver, Scene *scene, Object *ob, DerivedMesh *dm, HairSystem *hsys, float time)
diff --git a/source/blender/hair/intern/HAIR_solver.cpp b/source/blender/hair/intern/HAIR_solver.cpp
index 2168a22..4e07282 100644
--- a/source/blender/hair/intern/HAIR_solver.cpp
+++ b/source/blender/hair/intern/HAIR_solver.cpp
@@ -74,6 +74,9 @@ SolverData::~SolverData()
void SolverData::add_to_world(rbDynamicsWorld *world, int col_groups)
{
+ if (!world)
+ return;
+
for (int k = 0; k < totpoints; ++k) {
RB_dworld_add_ghost(world, &points[k].rb_ghost, col_groups);
}
@@ -81,6 +84,9 @@ void SolverData::add_to_world(rbDynamicsWorld *world, int col_groups)
void SolverData::remove_from_world(rbDynamicsWorld *world)
{
+ if (!world)
+ return;
+
for (int k = 0; k < totpoints; ++k) {
RB_dworld_remove_ghost(world, &points[k].rb_ghost);
}
@@ -190,12 +196,8 @@ Solver::Solver() :
Solver::~Solver()
{
- if (m_data) {
- if (m_forces.dynamics_world)
- m_data->remove_from_world(m_forces.dynamics_world);
-
+ if (m_data)
delete m_data;
- }
}
void Solver::set_data(SolverData *data)
More information about the Bf-blender-cvs
mailing list