[Bf-blender-cvs] [b2b54b0] master: Fix T43471, based on patch submitted by @sean_loh.

Lukas Tönne noreply at git.blender.org
Thu Feb 12 10:18:04 CET 2015


Commit: b2b54b0902045ec4f0c1a4cae3209be863878f5b
Author: Lukas Tönne
Date:   Thu Feb 12 10:15:25 2015 +0100
Branches: master
https://developer.blender.org/rBb2b54b0902045ec4f0c1a4cae3209be863878f5b

Fix T43471, based on patch submitted by @sean_loh.

Particle textures always override timing information of particles.
Previously particle times could be scripted, but now these changes are
discarded by the texture evaluation function.

The patch disables texture overriding when no textures are defined, this
way at least some old scripts can keep working.

===================================================================

M	source/blender/blenkernel/BKE_particle.h
M	source/blender/blenkernel/intern/particle.c
M	source/blender/blenkernel/intern/particle_system.c

===================================================================

diff --git a/source/blender/blenkernel/BKE_particle.h b/source/blender/blenkernel/BKE_particle.h
index a5f12bb..6b94797 100644
--- a/source/blender/blenkernel/BKE_particle.h
+++ b/source/blender/blenkernel/BKE_particle.h
@@ -403,7 +403,7 @@ float psys_get_dietime_from_cache(struct PointCache *cache, int index);
 void psys_free_pdd(struct ParticleSystem *psys);
 
 float *psys_cache_vgroup(struct DerivedMesh *dm, struct ParticleSystem *psys, int vgroup);
-void psys_get_texture(struct ParticleSimulationData *sim, struct ParticleData *pa, struct ParticleTexture *ptex, int event, float cfra);
+bool psys_get_texture(struct ParticleSimulationData *sim, struct ParticleData *pa, struct ParticleTexture *ptex, int event, float cfra);
 void psys_interpolate_face(struct MVert *mvert, struct MFace *mface, struct MTFace *tface,
                            float (*orcodata)[3], float w[4], float vec[3], float nor[3], float utan[3], float vtan[3],
                            float orco[3], float ornor[3]);
diff --git a/source/blender/blenkernel/intern/particle.c b/source/blender/blenkernel/intern/particle.c
index 2de5f46..72aed1b 100644
--- a/source/blender/blenkernel/intern/particle.c
+++ b/source/blender/blenkernel/intern/particle.c
@@ -3429,7 +3429,7 @@ static void get_cpa_texture(DerivedMesh *dm, ParticleSystem *psys, ParticleSetti
 	CLAMP_PARTICLE_TEXTURE_POS(PAMAP_ROUGH, ptex->rough1);
 	CLAMP_PARTICLE_TEXTURE_POS(PAMAP_DENS, ptex->exist);
 }
-void psys_get_texture(ParticleSimulationData *sim, ParticleData *pa, ParticleTexture *ptex, int event, float cfra)
+bool psys_get_texture(ParticleSimulationData *sim, ParticleData *pa, ParticleTexture *ptex, int event, float cfra)
 {
 	Object *ob = sim->ob;
 	Mesh *me = (Mesh *)ob->data;
@@ -3439,6 +3439,7 @@ void psys_get_texture(ParticleSimulationData *sim, ParticleData *pa, ParticleTex
 	int m;
 	float value, rgba[4], co[3], texvec[3];
 	int setvars = 0;
+	bool has_texture = false;
 
 	/* initialize ptex */
 	ptex->ivel = ptex->life = ptex->exist = ptex->size = ptex->damp =
@@ -3514,6 +3515,8 @@ void psys_get_texture(ParticleSimulationData *sim, ParticleData *pa, ParticleTex
 			SET_PARTICLE_TEXTURE(PAMAP_GRAVITY, ptex->gravity, mtex->gravityfac);
 			SET_PARTICLE_TEXTURE(PAMAP_DAMP, ptex->damp, mtex->dampfac);
 			SET_PARTICLE_TEXTURE(PAMAP_LENGTH, ptex->length, mtex->lengthfac);
+			
+			has_texture = true;
 		}
 	}
 
@@ -3526,6 +3529,8 @@ void psys_get_texture(ParticleSimulationData *sim, ParticleData *pa, ParticleTex
 	CLAMP_PARTICLE_TEXTURE_POSNEG(PAMAP_GRAVITY, ptex->gravity);
 	CLAMP_PARTICLE_TEXTURE_POS(PAMAP_DAMP, ptex->damp);
 	CLAMP_PARTICLE_TEXTURE_POS(PAMAP_LENGTH, ptex->length);
+	
+	return has_texture;
 }
 /************************************************/
 /*			Particle State						*/
diff --git a/source/blender/blenkernel/intern/particle_system.c b/source/blender/blenkernel/intern/particle_system.c
index 0418160..4a1573f 100644
--- a/source/blender/blenkernel/intern/particle_system.c
+++ b/source/blender/blenkernel/intern/particle_system.c
@@ -521,22 +521,25 @@ static void initialize_particle_texture(ParticleSimulationData *sim, ParticleDat
 	ParticleSystem *psys = sim->psys;
 	ParticleSettings *part = psys->part;
 	ParticleTexture ptex;
+	bool has_texture = false;
 
-	psys_get_texture(sim, pa, &ptex, PAMAP_INIT, 0.f);
+	has_texture = psys_get_texture(sim, pa, &ptex, PAMAP_INIT, 0.f);
 	
-	switch (part->type) {
-	case PART_EMITTER:
-		if (ptex.exist < psys_frand(psys, p+125))
-			pa->flag |= PARS_UNEXIST;
-		pa->time = part->sta + (part->end - part->sta)*ptex.time;
-		break;
-	case PART_HAIR:
-		if (ptex.exist < psys_frand(psys, p+125))
-			pa->flag |= PARS_UNEXIST;
-		pa->time = 0.f;
-		break;
-	case PART_FLUID:
-		break;
+	if (has_texture) {
+		switch (part->type) {
+			case PART_EMITTER:
+				if (ptex.exist < psys_frand(psys, p+125))
+					pa->flag |= PARS_UNEXIST;
+				pa->time = part->sta + (part->end - part->sta)*ptex.time;
+				break;
+			case PART_HAIR:
+				if (ptex.exist < psys_frand(psys, p+125))
+					pa->flag |= PARS_UNEXIST;
+				pa->time = 0.f;
+				break;
+			case PART_FLUID:
+				break;
+		}
 	}
 }
 
@@ -969,6 +972,7 @@ void reset_particle(ParticleSimulationData *sim, ParticleData *pa, float dtime,
 	ParticleSettings *part;
 	ParticleTexture ptex;
 	int p = pa - psys->particles;
+	
 	part=psys->part;
 	
 	/* get precise emitter matrix if particle is born */




More information about the Bf-blender-cvs mailing list