== Multires ==
authorNicholas Bishop <nicholasbishop@gmail.com>
Wed, 24 Jan 2007 01:34:05 +0000 (01:34 +0000)
committerNicholas Bishop <nicholasbishop@gmail.com>
Wed, 24 Jan 2007 01:34:05 +0000 (01:34 +0000)
Fixed bug #5799, Multires mesh modifications get reset by rendering

This bug can cause some nasty data loss (was introduces with my commit for using orco with multires.) Fixed by making sure to do multires_update_levels before applying modifiers.

source/blender/blenkernel/BKE_bad_level_calls.h
source/blender/blenkernel/bad_level_call_stubs/stubs.c
source/blender/blenkernel/intern/DerivedMesh.c

index 5c71fb6cf312cbabb12a1dcf1bead4323f460ca9..3c1a1c748218e7b5e52b86c9f156cf51f98896e0 100644 (file)
@@ -202,6 +202,7 @@ struct MultiresLevel;
 struct MultiresLevel *multires_level_n(struct Multires *mr, int n);
 void multires_free(struct Multires *mr);
 void multires_set_level(void *ob, void *me_v);
+void multires_update_levels(struct Mesh *me);
 void multires_calc_level_maps(struct MultiresLevel *lvl);
 struct Multires *multires_copy(struct Multires *orig);
 /* sculptmode.c */
index fc01086a48cce1a822ed2941918bb0dfb6d77080..fb1d0e6215f9be1e9fe2dd853e11591e5e8ab5d5 100644 (file)
@@ -295,6 +295,7 @@ void post_server_add(void) {}
 struct MultiresLevel *multires_level_n(struct Multires *mr, int n) {return NULL;}
 void multires_free(struct Multires *mr) {}
 void multires_set_level(void *ob, void *me_v) {}
+void multires_update_levels(struct Mesh *me) {}
 void multires_calc_level_maps(struct MultiresLevel *lvl) {}
 struct Multires *multires_copy(struct Multires *orig) {return NULL;}
 void sculptmode_init(struct Scene *sce) {}
index 62c1a5f613f849115f0ca0d7f578329d637320cf..d2921cd9ea73c4c7e561d8bf73a04edea8bf0a17 100644 (file)
@@ -2221,6 +2221,9 @@ float *multires_render_pin(Object *ob, Mesh *me, int *orig_lvl)
        if(me->mr) {
                MultiresLevel *lvl= NULL;
                int i;
+               
+               /* Make sure all mesh edits are properly stored in the multires data*/
+               multires_update_levels(me);
        
                /* Copy the highest level of multires verts */
                *orig_lvl= me->mr->current;