[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