diff --git a/source/blender/blenkernel/intern/particle_system.c b/source/blender/blenkernel/intern/particle_system.c index cda75bbde32..e90fc4a7545 100644 --- a/source/blender/blenkernel/intern/particle_system.c +++ b/source/blender/blenkernel/intern/particle_system.c @@ -2261,12 +2261,10 @@ static void do_texture_effector(Tex *tex, short mode, short is_2d, float nabla, { TexResult result[4]; float tex_co[3], strength, mag_vec[3]; - int i; + int hasrgb; + if(tex==NULL) return; - if(tex==0) return; - - for(i=0; i<4; i++) - result[i].nor=0; + result[0].nor = result[1].nor = result[2].nor = result[3].nor = 0; strength= force_val*falloff;///(float)pow((double)distance,(double)power); @@ -2282,9 +2280,9 @@ static void do_texture_effector(Tex *tex, short mode, short is_2d, float nabla, 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 @@ static void do_texture_effector(Tex *tex, short mode, short is_2d, float nabla, 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; diff --git a/source/blender/render/intern/source/texture.c b/source/blender/render/intern/source/texture.c index 348ceac4566..5de1757b56d 100644 --- a/source/blender/render/intern/source/texture.c +++ b/source/blender/render/intern/source/texture.c @@ -1210,6 +1210,8 @@ static int multitex(Tex *tex, float *texvec, float *dxt, float *dyt, int osatex, 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) { diff --git a/source/blender/src/buttons_object.c b/source/blender/src/buttons_object.c index 010d9bf4f32..d7cef42171e 100644 --- a/source/blender/src/buttons_object.c +++ b/source/blender/src/buttons_object.c @@ -3429,7 +3429,7 @@ static void object_panel_fields(Object *ob) 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"); }