fix for r36399
authorCampbell Barton <ideasman42@gmail.com>
Sun, 1 May 2011 05:41:08 +0000 (05:41 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Sun, 1 May 2011 05:41:08 +0000 (05:41 +0000)
- missing copy, free calls to curve falloff.
- missing localizing call for texture preview.
- also moved versioning into do_versions()

source/blender/blenkernel/intern/texture.c
source/blender/blenloader/intern/readfile.c

index 5cba963b0a6aae2e47a69589f94db713b88069bf..c518403d6631d541bf5d825ec885c9c8057c80ef 100644 (file)
@@ -486,7 +486,10 @@ void free_texture(Tex *tex)
        
        if(tex->coba) MEM_freeN(tex->coba);
        if(tex->env) BKE_free_envmap(tex->env);
-       if(tex->pd) BKE_free_pointdensity(tex->pd);
+       if(tex->pd) {
+               curvemapping_free(tex->pd->falloff_curve);
+               BKE_free_pointdensity(tex->pd);
+       }
        if(tex->vd) BKE_free_voxeldata(tex->vd);
        BKE_free_animdata((struct ID *)tex);
        
@@ -762,9 +765,15 @@ Tex *copy_texture(Tex *tex)
        
        if(texn->coba) texn->coba= MEM_dupallocN(texn->coba);
        if(texn->env) texn->env= BKE_copy_envmap(texn->env);
-       if(texn->pd) texn->pd= MEM_dupallocN(texn->pd);
+
+       if(texn->pd) {
+               texn->pd= MEM_dupallocN(texn->pd);
+               if(texn->pd->falloff_curve) {
+                       texn->pd->falloff_curve = curvemapping_copy(texn->pd->falloff_curve);
+               }
+       }
+
        if(texn->vd) texn->vd= MEM_dupallocN(texn->vd);
-       
        if(tex->preview) texn->preview = BKE_previewimg_copy(tex->preview);
 
        if(tex->nodetree) {
@@ -802,6 +811,8 @@ Tex *localize_texture(Tex *tex)
                        texn->pd->coba= MEM_dupallocN(texn->pd->coba);
                }
 
+               texn->pd->falloff_curve= curvemapping_copy(texn->pd->falloff_curve);
+
        }
        if(texn->vd) {
                texn->vd= MEM_dupallocN(texn->vd);
index 085866414de0333bbb4a1ce4fb0967cd4fc70793..3db42e84b946120f2154bcbbb51bc4015f4f2733 100644 (file)
@@ -2964,20 +2964,9 @@ static void direct_link_texture(FileData *fd, Tex *tex)
                tex->pd->point_tree = NULL;
                tex->pd->coba= newdataadr(fd, tex->pd->coba);
                tex->pd->falloff_curve= newdataadr(fd, tex->pd->falloff_curve);
-               
-               /*hack to avoid a do_versions patch*/
-               if (tex->pd->falloff_speed_scale == 0.0)
-                       tex->pd->falloff_speed_scale = 100.0;
-               
-               if (!tex->pd->falloff_curve) {
-                       tex->pd->falloff_curve = curvemapping_add(1, 0, 0, 1, 1);
-                       
-                       tex->pd->falloff_curve->preset = CURVE_PRESET_LINE;
-                       tex->pd->falloff_curve->cm->flag &= ~CUMA_EXTEND_EXTRAPOLATE;
-                       curvemap_reset(tex->pd->falloff_curve->cm, &tex->pd->falloff_curve->clipr, tex->pd->falloff_curve->preset, CURVEMAP_SLOPE_POSITIVE);
-                       curvemapping_changed(tex->pd->falloff_curve, 0);
-               } else
+               if(tex->pd->falloff_curve) {
                        direct_link_curvemapping(fd, tex->pd->falloff_curve);
+               }
        }
        
        tex->vd= newdataadr(fd, tex->vd);
@@ -11637,6 +11626,26 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
                                }
                        }
                }
+
+               {
+                       /* Initialize texture point density curve falloff */
+                       Tex *tex;
+                       for(tex= main->tex.first; tex; tex= tex->id.next) {
+                               if(tex->pd) {
+                                       if (tex->pd->falloff_speed_scale == 0.0)
+                                               tex->pd->falloff_speed_scale = 100.0;
+
+                                       if (!tex->pd->falloff_curve) {
+                                               tex->pd->falloff_curve = curvemapping_add(1, 0, 0, 1, 1);
+
+                                               tex->pd->falloff_curve->preset = CURVE_PRESET_LINE;
+                                               tex->pd->falloff_curve->cm->flag &= ~CUMA_EXTEND_EXTRAPOLATE;
+                                               curvemap_reset(tex->pd->falloff_curve->cm, &tex->pd->falloff_curve->clipr, tex->pd->falloff_curve->preset, CURVEMAP_SLOPE_POSITIVE);
+                                               curvemapping_changed(tex->pd->falloff_curve, 0);
+                                       }
+                               }
+                       }
+               }
        }
        
        /* WATCH IT!!!: pointers from libdata have not been converted yet here! */