[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [27862] branches/render25/source/blender/ blenkernel/intern/customdata.c: Fix external multires data link getting lost on exiting editmode.

Brecht Van Lommel brecht at blender.org
Tue Mar 30 13:13:23 CEST 2010


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);
 }
 





More information about the Bf-blender-cvs mailing list