[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [28838] branches/render25/source/blender/ blenkernel: Render Branch: fix two point cache problems:

Brecht Van Lommel brecht at blender.org
Tue May 18 18:31:31 CEST 2010


Revision: 28838
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=28838
Author:   blendix
Date:     2010-05-18 18:31:29 +0200 (Tue, 18 May 2010)

Log Message:
-----------
Render Branch: fix two point cache problems:
* cloth did not get reset correct in some situations, when startframe was
  different than 1
* point cache could sometimes mark the cached frames as inexact, when
  writing an info pointcache file, since that was indicated as cfra == 0.

Modified Paths:
--------------
    branches/render25/source/blender/blenkernel/BKE_pointcache.h
    branches/render25/source/blender/blenkernel/intern/cloth.c
    branches/render25/source/blender/blenkernel/intern/particle_system.c
    branches/render25/source/blender/blenkernel/intern/pointcache.c
    branches/render25/source/blender/blenkernel/intern/smoke.c
    branches/render25/source/blender/blenkernel/intern/softbody.c

Modified: branches/render25/source/blender/blenkernel/BKE_pointcache.h
===================================================================
--- branches/render25/source/blender/blenkernel/BKE_pointcache.h	2010-05-18 16:02:33 UTC (rev 28837)
+++ branches/render25/source/blender/blenkernel/BKE_pointcache.h	2010-05-18 16:31:29 UTC (rev 28838)
@@ -267,10 +267,14 @@
 void	BKE_ptcache_data_set(void **data, int type, void *from);
 
 /* Main cache reading call. */
-int		BKE_ptcache_read_cache(PTCacheID *pid, float cfra, float frs_sec);
+#define PTCACHE_MODE_READ_INFO	0
+#define PTCACHE_MODE_READ_FRAME	1
+int		BKE_ptcache_read_cache(PTCacheID *pid, int mode, float cfra, float frs_sec);
 
 /* Main cache writing call. */
-int		BKE_ptcache_write_cache(PTCacheID *pid, int cfra);
+#define PTCACHE_MODE_WRITE_INFO		0
+#define PTCACHE_MODE_WRITE_FRAME	1
+int		BKE_ptcache_write_cache(PTCacheID *pid, int mode, int cfra);
 
 /****************** Continue physics ***************/
 void BKE_ptcache_set_continue_physics(struct Scene *scene, int enable);

Modified: branches/render25/source/blender/blenkernel/intern/cloth.c
===================================================================
--- branches/render25/source/blender/blenkernel/intern/cloth.c	2010-05-18 16:02:33 UTC (rev 28837)
+++ branches/render25/source/blender/blenkernel/intern/cloth.c	2010-05-18 16:31:29 UTC (rev 28838)
@@ -493,7 +493,7 @@
 		clmd->sim_parms->reset = 0;
 		cache->flag |= PTCACHE_OUTDATED;
 		BKE_ptcache_id_reset(scene, &pid, PTCACHE_RESET_OUTDATED);
-		BKE_ptcache_validate(cache, 0);
+		BKE_ptcache_validate(cache, framenr);
 		cache->last_exact= MIN2(cache->startframe, 0);
 		cache->flag &= ~PTCACHE_REDO_NEEDED;
 		return result;
@@ -554,7 +554,7 @@
 	}
 
 	/* try to read from cache */
-	cache_result = BKE_ptcache_read_cache(&pid, (float)framenr, scene->r.frs_sec);
+	cache_result = BKE_ptcache_read_cache(&pid, PTCACHE_MODE_READ_FRAME, (float)framenr, scene->r.frs_sec);
 
 	if(cache_result == PTCACHE_READ_EXACT || cache_result == PTCACHE_READ_INTERPOLATED) {
 		implicit_set_positions(clmd);
@@ -563,7 +563,7 @@
 		BKE_ptcache_validate(cache, framenr);
 
 		if(cache_result == PTCACHE_READ_INTERPOLATED && cache->flag & PTCACHE_REDO_NEEDED)
-			BKE_ptcache_write_cache(&pid, framenr);
+			BKE_ptcache_write_cache(&pid, PTCACHE_MODE_WRITE_FRAME, framenr);
 
 		return result;
 	}
@@ -578,7 +578,7 @@
 
 	/* if on second frame, write cache for first frame */
 	if(cache->simframe == startframe && (cache->flag & PTCACHE_OUTDATED || cache->last_exact<=cache->startframe))
-		BKE_ptcache_write_cache(&pid, startframe);
+		BKE_ptcache_write_cache(&pid, PTCACHE_MODE_WRITE_FRAME, startframe);
 
 	clmd->sim_parms->timescale *= framenr - cache->simframe;
 
@@ -589,7 +589,7 @@
 		BKE_ptcache_invalidate(cache);
 	}
 	else
-		BKE_ptcache_write_cache(&pid, framenr);
+		BKE_ptcache_write_cache(&pid, PTCACHE_MODE_WRITE_FRAME, framenr);
 
 	cloth_to_object (ob, clmd, result);
 

Modified: branches/render25/source/blender/blenkernel/intern/particle_system.c
===================================================================
--- branches/render25/source/blender/blenkernel/intern/particle_system.c	2010-05-18 16:02:33 UTC (rev 28837)
+++ branches/render25/source/blender/blenkernel/intern/particle_system.c	2010-05-18 16:31:29 UTC (rev 28838)
@@ -3757,7 +3757,7 @@
 
 /* 2. try to read from the cache */
 	if(use_cache) {
-		int cache_result = BKE_ptcache_read_cache(use_cache, cfra, sim->scene->r.frs_sec);
+		int cache_result = BKE_ptcache_read_cache(use_cache, PTCACHE_MODE_READ_FRAME, cfra, sim->scene->r.frs_sec);
 
 		if(ELEM(cache_result, PTCACHE_READ_EXACT, PTCACHE_READ_INTERPOLATED)) {
 			cached_step(sim, cfra);
@@ -3767,7 +3767,7 @@
 			BKE_ptcache_validate(cache, framenr);
 
 			if(cache_result == PTCACHE_READ_INTERPOLATED && cache->flag & PTCACHE_REDO_NEEDED)
-				BKE_ptcache_write_cache(use_cache, framenr);
+				BKE_ptcache_write_cache(use_cache, PTCACHE_MODE_WRITE_FRAME, framenr);
 
 			return;
 		}
@@ -3782,7 +3782,7 @@
 
 		/* if on second frame, write cache for first frame */
 		if(psys->cfra == startframe && (cache->flag & PTCACHE_OUTDATED || cache->last_exact<=cache->startframe))
-			BKE_ptcache_write_cache(use_cache, startframe);
+			BKE_ptcache_write_cache(use_cache, PTCACHE_MODE_WRITE_FRAME, startframe);
 	}
 	else
 		BKE_ptcache_invalidate(cache);
@@ -3823,7 +3823,7 @@
 	if(use_cache) {
 		BKE_ptcache_validate(cache, framenr);
 		if(framenr != startframe)
-			BKE_ptcache_write_cache(use_cache, framenr);
+			BKE_ptcache_write_cache(use_cache, PTCACHE_MODE_WRITE_FRAME, framenr);
 	}
 
 	if(init)

Modified: branches/render25/source/blender/blenkernel/intern/pointcache.c
===================================================================
--- branches/render25/source/blender/blenkernel/intern/pointcache.c	2010-05-18 16:02:33 UTC (rev 28837)
+++ branches/render25/source/blender/blenkernel/intern/pointcache.c	2010-05-18 16:31:29 UTC (rev 28838)
@@ -1423,7 +1423,7 @@
 
 /* reads cache from disk or memory */
 /* possible to get old or interpolated result */
-int BKE_ptcache_read_cache(PTCacheID *pid, float cfra, float frs_sec)
+int BKE_ptcache_read_cache(PTCacheID *pid, int mode, float cfra, float frs_sec)
 {
 	PTCacheFile *pf=NULL, *pf2=NULL;
 	PTCacheMem *pm=NULL, *pm2=NULL;
@@ -1445,7 +1445,7 @@
 
 	if(pid->cache->flag & PTCACHE_READ_INFO) {
 		pid->cache->flag &= ~PTCACHE_READ_INFO;
-		BKE_ptcache_read_cache(pid, 0, frs_sec);
+		BKE_ptcache_read_cache(pid, PTCACHE_MODE_READ_INFO, 0, frs_sec);
 	}
 
 
@@ -1721,7 +1721,7 @@
 		pm->index_array[*index] = i + 1;
 }
 /* writes cache to disk or memory */
-int BKE_ptcache_write_cache(PTCacheID *pid, int cfra)
+int BKE_ptcache_write_cache(PTCacheID *pid, int mode, int cfra)
 {
 	PointCache *cache = pid->cache;
 	PTCacheFile *pf= NULL, *pf2= NULL;
@@ -1729,13 +1729,13 @@
 	int totpoint = pid->totpoint(pid->calldata, cfra);
 	int add = 0, overwrite = 0;
 
-	if(totpoint == 0 || (cfra ? pid->data_types == 0 : pid->info_types == 0))
+	if(totpoint == 0 || (mode == PTCACHE_MODE_WRITE_INFO ? pid->info_types == 0 : pid->data_types == 0))
 		return 0;
 
 	if(cache->flag & PTCACHE_DISK_CACHE) {
 		int ofra=0, efra = cache->endframe;
 
-		if(cfra==0 && cache->startframe > 0)
+		if(mode == PTCACHE_MODE_WRITE_INFO && cache->startframe > 0)
 			add = 1;
 		/* allways start from scratch on the first frame */
 		else if(cfra == cache->startframe) {
@@ -1770,8 +1770,8 @@
 				return 0;
 
 			pf->type = pid->type;
-			pf->totpoint = cfra ? pid->totwrite(pid->calldata, cfra) : totpoint;
-			pf->data_types = cfra ? pid->data_types : pid->info_types;
+			pf->totpoint = mode == PTCACHE_MODE_WRITE_FRAME ? pid->totwrite(pid->calldata, cfra) : totpoint;
+			pf->data_types = mode == PTCACHE_MODE_WRITE_FRAME ? pid->data_types : pid->info_types;
 
 			if(!ptcache_file_write_header_begin(pf) || !pid->write_header(pf)) {
 				ptcache_file_close(pf);
@@ -1826,7 +1826,7 @@
 		pm2 = cache->mem_cache.first;
 		
 		/* don't write info file in memory */
-		if(cfra==0)
+		if(cfra==PTCACHE_MODE_WRITE_INFO)
 			return 1;
 		/* allways start from scratch on the first frame */
 		if(cfra == cache->startframe) {
@@ -1854,7 +1854,7 @@
 			pm = MEM_callocN(sizeof(PTCacheMem), "Pointcache mem");
 
 			pm->totpoint = pid->totwrite(pid->calldata, cfra);
-			pm->data_types = cfra ? pid->data_types : pid->info_types;
+			pm->data_types = mode == PTCACHE_MODE_WRITE_FRAME ? pid->data_types : pid->info_types;
 
 			ptcache_alloc_data(pm);
 			BKE_ptcache_mem_init_pointers(pm);
@@ -1881,7 +1881,7 @@
 		}
 	}
 
-	if(add || overwrite) {
+	if(mode == PTCACHE_MODE_WRITE_FRAME && (add || overwrite)) {
 		if(cfra - cache->last_exact == 1
 			|| cfra == cache->startframe) {
 			cache->last_exact = cfra;
@@ -2544,7 +2544,7 @@
 			cache->flag |= PTCACHE_BAKED;
 			/* write info file */
 			if(cache->flag & PTCACHE_DISK_CACHE)
-				BKE_ptcache_write_cache(pid, 0);
+				BKE_ptcache_write_cache(pid, PTCACHE_MODE_WRITE_INFO, 0);
 		}
 	}
 	else for(SETLOOPER(scene, base)) {
@@ -2567,7 +2567,7 @@
 			if(bake) {
 				cache->flag |= PTCACHE_BAKED;
 				if(cache->flag & PTCACHE_DISK_CACHE)
-					BKE_ptcache_write_cache(pid, 0);
+					BKE_ptcache_write_cache(pid, PTCACHE_MODE_WRITE_INFO, 0);
 			}
 		}
 		BLI_freelistN(&pidlist);
@@ -2698,7 +2698,7 @@
 
 			/* write info file */
 			if(cache->flag & PTCACHE_BAKED)
-				BKE_ptcache_write_cache(pid, 0);
+				BKE_ptcache_write_cache(pid, PTCACHE_MODE_WRITE_INFO, 0);
 		}
 		else
 			if (G.f & G_DEBUG) 

Modified: branches/render25/source/blender/blenkernel/intern/smoke.c
===================================================================
--- branches/render25/source/blender/blenkernel/intern/smoke.c	2010-05-18 16:02:33 UTC (rev 28837)
+++ branches/render25/source/blender/blenkernel/intern/smoke.c	2010-05-18 16:31:29 UTC (rev 28838)
@@ -1226,7 +1226,7 @@
 		}
 
 		/* try to read from cache */
-		cache_result =  BKE_ptcache_read_cache(&pid, (float)framenr, scene->r.frs_sec);
+		cache_result =  BKE_ptcache_read_cache(&pid, PTCACHE_MODE_READ_FRAME, (float)framenr, scene->r.frs_sec);
 		// printf("cache_result: %d\n", cache_result);
 
 		if(cache_result == PTCACHE_READ_EXACT) 
@@ -1235,7 +1235,7 @@
 
 			if(sds->wt)
 			{
-				cache_result_wt = BKE_ptcache_read_cache(&pid_wt, (float)framenr, scene->r.frs_sec);
+				cache_result_wt = BKE_ptcache_read_cache(&pid_wt, PTCACHE_MODE_READ_FRAME, (float)framenr, scene->r.frs_sec);
 				
 				if(cache_result_wt == PTCACHE_READ_EXACT) 
 				{
@@ -1282,7 +1282,7 @@
 			smoke_calc_transparency(sds->shadow, smoke_get_density(sds->fluid), sds->p0, sds->p1, sds->res, sds->dx, light, calc_voxel_transp, -7.0*sds->dx);
 	
 		BKE_ptcache_validate(cache, framenr);
-		BKE_ptcache_write_cache(&pid, framenr);
+		BKE_ptcache_write_cache(&pid, PTCACHE_MODE_WRITE_FRAME, framenr);
 
 		if(sds->wt)
 		{
@@ -1294,7 +1294,7 @@
 			}
 
 			BKE_ptcache_validate(cache_wt, framenr);
-			BKE_ptcache_write_cache(&pid_wt, framenr);
+			BKE_ptcache_write_cache(&pid_wt, PTCACHE_MODE_WRITE_FRAME, framenr);
 		}
 
 		tend();

Modified: branches/render25/source/blender/blenkernel/intern/softbody.c
===================================================================
--- branches/render25/source/blender/blenkernel/intern/softbody.c	2010-05-18 16:02:33 UTC (rev 28837)
+++ branches/render25/source/blender/blenkernel/intern/softbody.c	2010-05-18 16:31:29 UTC (rev 28838)
@@ -4122,7 +4122,7 @@
 	}
 
 	/* try to read from cache */

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list