Revision: 27862
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=27862
Author:   blendix
Date:     2010-03-30 13:13:23 +0200 (Tue, 30 Mar 2010)

Log Message:
-----------
Fix external multires data link getting lost on exiting editmode.

Modified Paths:
--------------
    branches/render25/source/blender/blenkernel/intern/customdata.c

Modified: branches/render25/source/blender/blenkernel/intern/customdata.c
===================================================================
--- branches/render25/source/blender/blenkernel/intern/customdata.c     
2010-03-30 10:49:52 UTC (rev 27861)
+++ branches/render25/source/blender/blenkernel/intern/customdata.c     
2010-03-30 11:13:23 UTC (rev 27862)
@@ -848,7 +848,7 @@
 {
        const LayerTypeInfo *typeInfo;
        CustomDataLayer *layer, *newlayer;
-       int i, type, number = 0, lasttype = -1, lastactive = 0, lastrender = 0, 
lastclone = 0, lastmask = 0;
+       int i, type, number = 0, lasttype = -1, lastactive = 0, lastrender = 0, 
lastclone = 0, lastmask = 0, lastflag = 0;
 
        for(i = 0; i < source->totlayer; ++i) {
                layer = &source->layers[i];
@@ -863,15 +863,16 @@
                        lastclone = layer->active_clone;
                        lastmask = layer->active_mask;
                        lasttype = type;
+                       lastflag = layer->flag;
                }
                else
                        number++;
 
-               if(layer->flag & CD_FLAG_NOCOPY) continue;
+               if(lastflag & CD_FLAG_NOCOPY) continue;
                else if(!((int)mask & (int)(1 << (int)type))) continue;
                else if(number < CustomData_number_of_layers(dest, type)) 
continue;
 
-               if((alloctype == CD_ASSIGN) && (layer->flag & CD_FLAG_NOFREE))
+               if((alloctype == CD_ASSIGN) && (lastflag & CD_FLAG_NOFREE))
                        newlayer = customData_add_layer__internal(dest, type, 
CD_REFERENCE,
                                layer->data, totelem, layer->name);
                else
@@ -883,6 +884,7 @@
                        newlayer->active_rnd = lastrender;
                        newlayer->active_clone = lastclone;
                        newlayer->active_mask = lastmask;
+                       newlayer->flag |= lastflag & 
(CD_FLAG_EXTERNAL|CD_FLAG_IN_MEMORY);
                }
        }
 }
@@ -892,6 +894,9 @@
 {
        memset(dest, 0, sizeof(*dest));
 
+       if(source->external)
+               dest->external= MEM_dupallocN(source->external);
+
        CustomData_merge(source, dest, mask, alloctype, totelem);
 }
 


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to