[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [28827] branches/render25/source/blender: particle system can start in negative frames now.

Joseph Eagar joeedh at gmail.com
Tue May 18 16:30:36 CEST 2010


Revision: 28827
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=28827
Author:   joeedh
Date:     2010-05-18 16:30:33 +0200 (Tue, 18 May 2010)

Log Message:
-----------
particle system can start in negative frames now.  also removed BIF_preview_changed, since it's not being used anymore.

Modified Paths:
--------------
    branches/render25/source/blender/blenkernel/BKE_particle.h
    branches/render25/source/blender/blenkernel/BKE_pointcache.h
    branches/render25/source/blender/blenkernel/intern/anim.c
    branches/render25/source/blender/blenkernel/intern/cloth.c
    branches/render25/source/blender/blenkernel/intern/collision.c
    branches/render25/source/blender/blenkernel/intern/depsgraph.c
    branches/render25/source/blender/blenkernel/intern/effect.c
    branches/render25/source/blender/blenkernel/intern/object.c
    branches/render25/source/blender/blenkernel/intern/particle.c
    branches/render25/source/blender/blenkernel/intern/particle_system.c
    branches/render25/source/blender/blenkernel/intern/pointcache.c
    branches/render25/source/blender/editors/object/object_relations.c
    branches/render25/source/blender/editors/physics/particle_edit.c
    branches/render25/source/blender/editors/render/render_preview.c
    branches/render25/source/blender/editors/space_view3d/drawobject.c
    branches/render25/source/blender/makesdna/DNA_cloth_types.h
    branches/render25/source/blender/makesdna/DNA_particle_types.h
    branches/render25/source/blender/makesrna/intern/rna_object_force.c
    branches/render25/source/blender/modifiers/intern/MOD_collision.c
    branches/render25/source/blender/modifiers/intern/MOD_explode.c
    branches/render25/source/blender/modifiers/intern/MOD_particleinstance.c
    branches/render25/source/blender/render/intern/source/object_particle.c
    branches/render25/source/blender/render/intern/source/texture_pointdensity.c

Modified: branches/render25/source/blender/blenkernel/BKE_particle.h
===================================================================
--- branches/render25/source/blender/blenkernel/BKE_particle.h	2010-05-18 14:30:20 UTC (rev 28826)
+++ branches/render25/source/blender/blenkernel/BKE_particle.h	2010-05-18 14:30:33 UTC (rev 28827)
@@ -244,7 +244,7 @@
 float psys_get_child_time(struct ParticleSystem *psys, struct ChildParticle *cpa, float cfra, float *birthtime, float *dietime);
 float psys_get_child_size(struct ParticleSystem *psys, struct ChildParticle *cpa, float cfra, float *pa_time);
 void psys_get_particle_on_path(struct ParticleSimulationData *sim, int pa_num, struct ParticleKey *state, int vel);
-int psys_get_particle_state(struct ParticleSimulationData *sim, int p, struct ParticleKey *state, int always);
+int psys_get_particle_state(struct ParticleSimulationData *sim, int p, struct ParticleKey *state, int always, int use_current_frame);
 
 /* for anim.c */
 void psys_get_dupli_texture(struct Object *ob, struct ParticleSettings *part, struct ParticleSystemModifierData *psmd, struct ParticleData *pa, struct ChildParticle *cpa, float *uv, float *orco);

Modified: branches/render25/source/blender/blenkernel/BKE_pointcache.h
===================================================================
--- branches/render25/source/blender/blenkernel/BKE_pointcache.h	2010-05-18 14:30:20 UTC (rev 28826)
+++ branches/render25/source/blender/blenkernel/BKE_pointcache.h	2010-05-18 14:30:33 UTC (rev 28827)
@@ -227,7 +227,7 @@
 } PTCacheEdit;
 
 /* Particle functions */
-void BKE_ptcache_make_particle_key(struct ParticleKey *key, int index, void **data, float time);
+void BKE_ptcache_make_particle_key(struct ParticleKey *key, int index, void **data, float time, int use_frames);
 
 /**************** Creating ID's ****************************/
 void BKE_ptcache_id_from_softbody(PTCacheID *pid, struct Object *ob, struct SoftBody *sb);

Modified: branches/render25/source/blender/blenkernel/intern/anim.c
===================================================================
--- branches/render25/source/blender/blenkernel/intern/anim.c	2010-05-18 14:30:20 UTC (rev 28826)
+++ branches/render25/source/blender/blenkernel/intern/anim.c	2010-05-18 14:30:33 UTC (rev 28827)
@@ -1078,7 +1078,7 @@
 	ParticleSettings *part;
 	ParticleData *pa;
 	ChildParticle *cpa=0;
-	ParticleKey state;
+	ParticleKey state={0,};
 	ParticleCacheKey *cache;
 	float ctime, pa_time, scale = 1.0f;
 	float tmat[4][4], mat[4][4], pamat[4][4], vec[3], size=0.0;
@@ -1229,7 +1229,9 @@
 			else {
 				/* first key */
 				state.time = ctime;
-				if(psys_get_particle_state(&sim, a, &state, 0) == 0)
+				state.use_frames = 1;
+
+				if(psys_get_particle_state(&sim, a, &state, 0, 0) == 0)
 					continue;
 
 				quat_to_mat4( pamat,state.rot);

Modified: branches/render25/source/blender/blenkernel/intern/cloth.c
===================================================================
--- branches/render25/source/blender/blenkernel/intern/cloth.c	2010-05-18 14:30:20 UTC (rev 28826)
+++ branches/render25/source/blender/blenkernel/intern/cloth.c	2010-05-18 14:30:33 UTC (rev 28827)
@@ -494,7 +494,7 @@
 		cache->flag |= PTCACHE_OUTDATED;
 		BKE_ptcache_id_reset(scene, &pid, PTCACHE_RESET_OUTDATED);
 		BKE_ptcache_validate(cache, 0);
-		cache->last_exact= 0;
+		cache->last_exact= MIN2(cache->startframe, 0);
 		cache->flag &= ~PTCACHE_REDO_NEEDED;
 		return result;
 	}
@@ -577,7 +577,7 @@
 	}
 
 	/* if on second frame, write cache for first frame */
-	if(cache->simframe == startframe && (cache->flag & PTCACHE_OUTDATED || cache->last_exact==0))
+	if(cache->simframe == startframe && (cache->flag & PTCACHE_OUTDATED || cache->last_exact<=cache->startframe))
 		BKE_ptcache_write_cache(&pid, startframe);
 
 	clmd->sim_parms->timescale *= framenr - cache->simframe;

Modified: branches/render25/source/blender/blenkernel/intern/collision.c
===================================================================
--- branches/render25/source/blender/blenkernel/intern/collision.c	2010-05-18 14:30:20 UTC (rev 28826)
+++ branches/render25/source/blender/blenkernel/intern/collision.c	2010-05-18 14:30:33 UTC (rev 28827)
@@ -1585,17 +1585,11 @@
 			normalize_v3(vec);
 		} else VECCOPY(vec, no);
 
-		mul_v3_fl(no, lambda*2);
-		mul_v3_fl(vec, lambda*2.0);
+		mul_v3_fl(no, lambda);
+		mul_v3_fl(vec, lambda);
 
+		//add_v3_v3(cv->txold, vec);
 		add_v3_v3(cv->tx, no);
-		sub_v3_v3(cv->txold, vec);
-
-		//add_v3_v3(cv->txold, cv->tx);
-		//mul_v3_fl(cv->txold, 0.5f);
-		//add_v3_v3(cv->txold, cv->tx);
-		//mul_v3_fl(cv->txold, 0.5f);
-		VECCOPY(cv->txold, cv->tx);
 	}
 
 	MEM_freeN(frefs);

Modified: branches/render25/source/blender/blenkernel/intern/depsgraph.c
===================================================================
--- branches/render25/source/blender/blenkernel/intern/depsgraph.c	2010-05-18 14:30:20 UTC (rev 28826)
+++ branches/render25/source/blender/blenkernel/intern/depsgraph.c	2010-05-18 14:30:33 UTC (rev 28827)
@@ -2225,7 +2225,7 @@
 			ob= base->object;
 
 			if(base->lay & lay) {
-				if(ELEM5(ob->type, OB_MESH, OB_CURVE, OB_SURF, OB_FONT, OB_MBALL))
+				//if(ELEM5(ob->type, OB_MESH, OB_CURVE, OB_SURF, OB_FONT, OB_MBALL))
 					ob->recalc |= OB_RECALC_DATA;
 				if(ob->dup_group) 
 					ob->dup_group->id.flag |= LIB_DOIT;
@@ -2235,7 +2235,7 @@
 		for(group= G.main->group.first; group; group= group->id.next) {
 			if(group->id.flag & LIB_DOIT) {
 				for(go= group->gobject.first; go; go= go->next) {
-					if(ELEM5(go->ob->type, OB_MESH, OB_CURVE, OB_SURF, OB_FONT, OB_MBALL))
+					//if(ELEM5(go->ob->type, OB_MESH, OB_CURVE, OB_SURF, OB_FONT, OB_MBALL))
 						go->ob->recalc |= OB_RECALC_DATA;
 					if(go->ob->proxy_from)
 						go->ob->recalc |= OB_RECALC_OB;
@@ -2247,6 +2247,9 @@
 
 		/* now tag update flags, to ensure deformers get calculated on redraw */
 		DAG_scene_update_flags(scene, lay);
+
+		scene_update_for_newframe(scene, lay);
+		//scene_update_for_newframe(scene, lay);
 	}
 }
 

Modified: branches/render25/source/blender/blenkernel/intern/effect.c
===================================================================
--- branches/render25/source/blender/blenkernel/intern/effect.c	2010-05-18 14:30:20 UTC (rev 28826)
+++ branches/render25/source/blender/blenkernel/intern/effect.c	2010-05-18 14:30:33 UTC (rev 28827)
@@ -631,7 +631,7 @@
 	else if(eff->psys) {
 		ParticleSimulationData sim = {eff->scene, eff->ob, eff->psys, NULL, NULL};
 		ParticleData *pa = eff->psys->particles + *efd->index;
-		ParticleKey state;
+		ParticleKey state={0,};
 
 		/* exclude the particle itself for self effecting particles */
 		if(eff->psys == point->psys && *efd->index == point->index)
@@ -639,8 +639,10 @@
 		else {
 			/* TODO: time from actual previous calculated frame (step might not be 1) */
 			state.time = cfra - 1.0;
-			ret = psys_get_particle_state(&sim, *efd->index, &state, 0);
+			state.use_frames = 1;
 
+			ret = psys_get_particle_state(&sim, *efd->index, &state, 0, 0);
+
 			/* TODO */
 			//if(eff->pd->forcefiled == PFIELD_HARMONIC && ret==0) {
 			//	if(pa->dietime < eff->psys->cfra)

Modified: branches/render25/source/blender/blenkernel/intern/object.c
===================================================================
--- branches/render25/source/blender/blenkernel/intern/object.c	2010-05-18 14:30:20 UTC (rev 28826)
+++ branches/render25/source/blender/blenkernel/intern/object.c	2010-05-18 14:30:33 UTC (rev 28827)
@@ -2547,6 +2547,7 @@
 				BKE_animsys_evaluate_animdata(data_id, adt, ctime, ADT_RECALC_DRIVERS);
 				
 				if(ob->id.lib && ob->proxy_from) {
+					where_is_pose(scene, ob->proxy_from);
 					copy_pose_result(ob->pose, ob->proxy_from->pose);
 					// printf("pose proxy copy, lib ob %s proxy %s\n", ob->id.name, ob->proxy_from->id.name);
 				}

Modified: branches/render25/source/blender/blenkernel/intern/particle.c
===================================================================
--- branches/render25/source/blender/blenkernel/intern/particle.c	2010-05-18 14:30:20 UTC (rev 28826)
+++ branches/render25/source/blender/blenkernel/intern/particle.c	2010-05-18 14:30:33 UTC (rev 28827)
@@ -1060,12 +1060,12 @@
 			while(pm && pm->next && (float)pm->frame < t)
 				pm = pm->next;
 
-			BKE_ptcache_make_particle_key(key2, pm->index_array ? pm->index_array[index] - 1 : index, pm->data, (float)pm->frame);
-			BKE_ptcache_make_particle_key(key1, pm->prev->index_array ? pm->prev->index_array[index] - 1 : index, pm->prev->data, (float)pm->prev->frame);
+			BKE_ptcache_make_particle_key(key2, pm->index_array ? pm->index_array[index] - 1 : index, pm->data, (float)pm->frame, 1);
+			BKE_ptcache_make_particle_key(key1, pm->prev->index_array ? pm->prev->index_array[index] - 1 : index, pm->prev->data, (float)pm->prev->frame, 1);
 		}
 		else if(cache->mem_cache.first) {
 			PTCacheMem *pm2 = cache->mem_cache.first;
-			BKE_ptcache_make_particle_key(key2, pm2->index_array ? pm2->index_array[index] - 1 : index, pm2->data, (float)pm2->frame);
+			BKE_ptcache_make_particle_key(key2, pm2->index_array ? pm2->index_array[index] - 1 : index, pm2->data, (float)pm2->frame, 1);
 			copy_particle_key(key1, key2, 1);
 		}
 	}
@@ -1142,8 +1142,8 @@
 
 	/* interpret timing and find keys */
 	if(point) {
-		if(result->time < 0.0f)
-			real_t = -result->time;
+		if(result->use_frames)
+			real_t = result->time;
 		else
 			real_t = *(pind->ekey[0]->time) + t * (*(pind->ekey[0][point->totkey-1].time) - *(pind->ekey[0]->time));
 
@@ -1159,8 +1159,8 @@
 			return;
 		}
 
-		if(result->time < 0.0f)
-			real_t = -result->time;
+		if(result->use_frames)
+			real_t = result->time;
 		else
 			real_t = pind->kkey[0]->time + t * (pind->kkey[0][pa->totkey-1].time - pind->kkey[0]->time);
 
@@ -1190,14 +1190,14 @@
 		pind->kkey[0] = pind->kkey[1] - 1;
 	}
 	else if(pind->cache) {
-		if(result->time < 0.0f) /* flag for time in frames */
-			real_t = -result->time;
+		if(result->use_frames) /* flag for time in frames */
+			real_t = result->time;
 		else
 			real_t = pa->time + t * (pa->dietime - pa->time);
 	}
 	else {
-		if(result->time < 0.0f)
-			real_t = -result->time;
+		if(result->use_frames)
+			real_t = result->time;
 		else
 			real_t = pind->hkey[0]->time + t * (pind->hkey[0][pa->totkey-1].time - pind->hkey[0]->time);
 
@@ -1945,7 +1945,7 @@
 void precalc_guides(ParticleSimulationData *sim, ListBase *effectors)
 {
 	EffectedPoint point;
-	ParticleKey state;

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list