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)

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to