Merge branch 'master' into blender2.8
[blender.git] / source / blender / blenkernel / intern / cloth.c
index 681b931..4ab6c82 100644 (file)
@@ -45,7 +45,6 @@
 #include "BKE_effect.h"
 #include "BKE_global.h"
 #include "BKE_modifier.h"
-#include "BKE_pointcache.h"
 
 #include "BPH_mass_spring.h"
 
@@ -129,9 +128,6 @@ void cloth_init(ClothModifierData *clmd )
 
        if (!clmd->sim_parms->effector_weights)
                clmd->sim_parms->effector_weights = BKE_add_effector_weights(NULL);
-
-       if (clmd->point_cache)
-               clmd->point_cache->step = 1;
 }
 
 static BVHTree *bvhselftree_build_from_cloth (ClothModifierData *clmd, float epsilon)
@@ -302,35 +298,16 @@ void bvhselftree_update_from_cloth(ClothModifierData *clmd, bool moving)
        }
 }
 
-void cloth_clear_cache(Object *ob, ClothModifierData *clmd, float framenr)
-{
-       PTCacheID pid;
-       
-       BKE_ptcache_id_from_cloth(&pid, ob, clmd);
-
-       // don't do anything as long as we're in editmode!
-       if (pid.cache->edit && ob->mode & OB_MODE_PARTICLE_EDIT)
-               return;
-       
-       BKE_ptcache_id_clear(&pid, PTCACHE_CLEAR_AFTER, framenr);
-}
-
 static int do_init_cloth(Object *ob, ClothModifierData *clmd, DerivedMesh *result, int framenr)
 {
-       PointCache *cache;
-
-       cache= clmd->point_cache;
-
        /* initialize simulation data if it didn't exist already */
        if (clmd->clothObject == NULL) {
                if (!cloth_from_object(ob, clmd, result, framenr, 1)) {
-                       BKE_ptcache_invalidate(cache);
                        modifier_setError(&(clmd->modifier), "Can't initialize cloth");
                        return 0;
                }
        
                if (clmd->clothObject == NULL) {
-                       BKE_ptcache_invalidate(cache);
                        modifier_setError(&(clmd->modifier), "Null cloth object");
                        return 0;
                }
@@ -368,7 +345,7 @@ static int do_step_cloth(Object *ob, ClothModifierData *clmd, DerivedMesh *resul
                mul_m4_v3(ob->obmat, verts->xconst);
        }
 
-       effectors = pdInitEffectors(clmd->scene, ob, NULL, clmd->sim_parms->effector_weights, true);
+       effectors = pdInitEffectors(clmd->scene, ob, clmd->sim_parms->effector_weights, true);
 
        if (clmd->sim_parms->flags & CLOTH_SIMSETTINGS_FLAG_DYNAMIC_BASEMESH )
                cloth_update_verts ( ob, clmd, result );
@@ -400,27 +377,14 @@ static int do_step_cloth(Object *ob, ClothModifierData *clmd, DerivedMesh *resul
  ************************************************/
 void clothModifier_do(ClothModifierData *clmd, Scene *scene, Object *ob, DerivedMesh *dm, float (*vertexCos)[3])
 {
-       PointCache *cache;
-       PTCacheID pid;
-       float timescale;
-       int framenr, startframe, endframe;
-       int cache_result;
+       int framenr = scene->r.cfra, startframe = scene->r.sfra, endframe = scene->r.efra;
 
        clmd->scene= scene;     /* nice to pass on later :) */
-       framenr= (int)scene->r.cfra;
-       cache= clmd->point_cache;
 
-       BKE_ptcache_id_from_cloth(&pid, ob, clmd);
-       BKE_ptcache_id_time(&pid, scene, framenr, &startframe, &endframe, &timescale);
-       clmd->sim_parms->timescale= timescale * clmd->sim_parms->time_scale;
+       clmd->sim_parms->timescale = 1.0f;
 
        if (clmd->sim_parms->reset || (clmd->clothObject && dm->getNumVerts(dm) != clmd->clothObject->mvert_num)) {
                clmd->sim_parms->reset = 0;
-               cache->flag |= PTCACHE_OUTDATED;
-               BKE_ptcache_id_reset(scene, &pid, PTCACHE_RESET_OUTDATED);
-               BKE_ptcache_validate(cache, 0);
-               cache->last_exact= 0;
-               cache->flag &= ~PTCACHE_REDO_NEEDED;
        }
        
        // unused in the moment, calculated separately in implicit.c
@@ -428,7 +392,6 @@ void clothModifier_do(ClothModifierData *clmd, Scene *scene, Object *ob, Derived
 
        /* simulation is only active during a specific period */
        if (framenr < startframe) {
-               BKE_ptcache_invalidate(cache);
                return;
        }
        else if (framenr > endframe) {
@@ -440,56 +403,18 @@ void clothModifier_do(ClothModifierData *clmd, Scene *scene, Object *ob, Derived
                return;
 
        if (framenr == startframe) {
-               BKE_ptcache_id_reset(scene, &pid, PTCACHE_RESET_OUTDATED);
                do_init_cloth(ob, clmd, dm, framenr);
-               BKE_ptcache_validate(cache, framenr);
-               cache->flag &= ~PTCACHE_REDO_NEEDED;
-               clmd->clothObject->last_frame= framenr;
-               return;
-       }
-
-       /* try to read from cache */
-       cache_result = BKE_ptcache_read(&pid, (float)framenr+scene->r.subframe);
-
-       if (cache_result == PTCACHE_READ_EXACT || cache_result == PTCACHE_READ_INTERPOLATED) {
-               BKE_cloth_solver_set_positions(clmd);
-               cloth_to_object (ob, clmd, vertexCos);
-
-               BKE_ptcache_validate(cache, framenr);
-
-               if (cache_result == PTCACHE_READ_INTERPOLATED && cache->flag & PTCACHE_REDO_NEEDED)
-                       BKE_ptcache_write(&pid, framenr);
-
                clmd->clothObject->last_frame= framenr;
-
-               return;
-       }
-       else if (cache_result==PTCACHE_READ_OLD) {
-               BKE_cloth_solver_set_positions(clmd);
-       }
-       else if ( /*ob->id.lib ||*/ (cache->flag & PTCACHE_BAKED)) { /* 2.4x disabled lib, but this can be used in some cases, testing further - campbell */
-               /* if baked and nothing in cache, do nothing */
-               BKE_ptcache_invalidate(cache);
                return;
        }
 
        if (framenr!=clmd->clothObject->last_frame+1)
                return;
 
-       /* if on second frame, write cache for first frame */
-       if (cache->simframe == startframe && (cache->flag & PTCACHE_OUTDATED || cache->last_exact==0))
-               BKE_ptcache_write(&pid, startframe);
-
-       clmd->sim_parms->timescale *= framenr - cache->simframe;
+       clmd->sim_parms->timescale *= 1.0f;
 
        /* do simulation */
-       BKE_ptcache_validate(cache, framenr);
-
-       if (!do_step_cloth(ob, clmd, dm, framenr)) {
-               BKE_ptcache_invalidate(cache);
-       }
-       else
-               BKE_ptcache_write(&pid, framenr);
+       do_step_cloth(ob, clmd, dm, framenr);
 
        cloth_to_object (ob, clmd, vertexCos);
        clmd->clothObject->last_frame= framenr;