[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [13741] trunk/blender/source/blender: texture forcefields had a bug where uninitialized values could be used.

Campbell Barton ideasman42 at gmail.com
Mon Feb 18 00:53:48 CET 2008


Revision: 13741
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=13741
Author:   campbellbarton
Date:     2008-02-18 00:53:48 +0100 (Mon, 18 Feb 2008)

Log Message:
-----------
texture forcefields had a bug where uninitialized values could be used.
do_texture_effector assumed multitex_ext would assign r/g/b colors which isnt true for grey textures.
Fallback to PFIELD_TEX_GRAD with grey textures, node this in tooltip also.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/particle_system.c
    trunk/blender/source/blender/render/intern/source/texture.c
    trunk/blender/source/blender/src/buttons_object.c

Modified: trunk/blender/source/blender/blenkernel/intern/particle_system.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/particle_system.c	2008-02-17 23:39:16 UTC (rev 13740)
+++ trunk/blender/source/blender/blenkernel/intern/particle_system.c	2008-02-17 23:53:48 UTC (rev 13741)
@@ -2261,13 +2261,11 @@
 {
 	TexResult result[4];
 	float tex_co[3], strength, mag_vec[3];
-	int i;
+	int hasrgb;
+	if(tex==NULL) return;
 
-	if(tex==0) return;
+	result[0].nor = result[1].nor = result[2].nor = result[3].nor = 0;
 
-	for(i=0; i<4; i++)
-		result[i].nor=0;
-
 	strength= force_val*falloff;///(float)pow((double)distance,(double)power);
 
 	VECCOPY(tex_co,pa_co);
@@ -2282,9 +2280,9 @@
 		Mat4Mul3Vecfl(obmat,tex_co);
 	}
 
-	multitex_ext(tex, tex_co, NULL,NULL, 1, result);
+	hasrgb = multitex_ext(tex, tex_co, NULL,NULL, 1, result);
 
-	if(mode==PFIELD_TEX_RGB){
+	if(hasrgb && mode==PFIELD_TEX_RGB){
 		mag_vec[0]= (0.5f-result->tr)*strength;
 		mag_vec[1]= (0.5f-result->tg)*strength;
 		mag_vec[2]= (0.5f-result->tb)*strength;
@@ -2303,7 +2301,7 @@
 		tex_co[2]+= nabla;
 		multitex_ext(tex, tex_co, NULL,NULL, 1, result+3);
 
-		if(mode==PFIELD_TEX_GRAD){
+		if(mode==PFIELD_TEX_GRAD || !hasrgb){ /* if we dont have rgb fall back to grad */
 			mag_vec[0]= (result[0].tin-result[1].tin)*strength;
 			mag_vec[1]= (result[0].tin-result[2].tin)*strength;
 			mag_vec[2]= (result[0].tin-result[3].tin)*strength;

Modified: trunk/blender/source/blender/render/intern/source/texture.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/texture.c	2008-02-17 23:39:16 UTC (rev 13740)
+++ trunk/blender/source/blender/render/intern/source/texture.c	2008-02-17 23:53:48 UTC (rev 13741)
@@ -1210,6 +1210,8 @@
 	return retval;
 }
 
+/* Warning, if the texres's values are not declared zero, check the return value to be sure
+ * the color values are set before using the r/g/b values, otherwise you may use uninitialized values - Campbell */
 int multitex_ext(Tex *tex, float *texvec, float *dxt, float *dyt, int osatex, TexResult *texres)
 {
 	

Modified: trunk/blender/source/blender/src/buttons_object.c
===================================================================
--- trunk/blender/source/blender/src/buttons_object.c	2008-02-17 23:39:16 UTC (rev 13740)
+++ trunk/blender/source/blender/src/buttons_object.c	2008-02-17 23:53:48 UTC (rev 13741)
@@ -3429,7 +3429,7 @@
 				uiDefButBitS(block, TOG, PFIELD_GUIDE_PATH_ADD, B_FIELD_CHANGE, "Additive",	10,40,140,20, &pd->flag, 0.0, 0, 0, 0, "Based on distance/falloff it adds a portion of the entire path");
 			}
 			else if(pd->forcefield==PFIELD_TEXTURE){
-				uiDefButS(block, MENU, B_FIELD_CHANGE, "Texture mode%t|RGB%x0|Gradient%x1|Curl%x2",	10,40,140,20, &pd->tex_mode, 0.0, 0.0, 0, 0, "How the texture effect is calculated (RGB & Curl need a RGB texture)");
+				uiDefButS(block, MENU, B_FIELD_CHANGE, "Texture mode%t|RGB%x0|Gradient%x1|Curl%x2",	10,40,140,20, &pd->tex_mode, 0.0, 0.0, 0, 0, "How the texture effect is calculated (RGB & Curl need a RGB texture else Gradient will be used instead)");
 	
 				uiDefButF(block, NUM, B_FIELD_CHANGE, "Nabla:",	10,20,140,20, &pd->tex_nabla, 0.0001f, 1.0, 1, 0, "Specify the dimension of the area for gradient and curl calculation");
 			}





More information about the Bf-blender-cvs mailing list